From 64fc4a485fb3ce7d2f3d9a789f0e4ba1f07caf9b Mon Sep 17 00:00:00 2001 From: Matthias Simon Date: Mon, 15 Aug 2022 15:29:07 +0200 Subject: [PATCH] Copy TTCN3_PART1 --- core_language/.classpath | 3 + .../de.ugoe.cs.swe.trex.ui.rulebuilder.launch | 7 + core_language/.gitignore | 1 + core_language/.project | 44 + .../com.testingtech.ttworkbench.core.prefs | 23 + .../NegSem_0501_Identifier_001.ttcn | 20 + .../NegSyn_0501_Identifier_001.ttcn | 20 + .../Syn_0501_Identifier_001.ttcn | 28 + .../Sem_050201_Scope_of_parameters_001.ttcn | 43 + .../Sem_050201_Scope_of_parameters_002.ttcn | 38 + .../NegSem_050202_Uniqueness_001.ttcn | 18 + .../NegSem_050202_Uniqueness_004.ttcn | 22 + .../NegSem_050202_Uniqueness_005.ttcn | 23 + .../NegSem_050202_Uniqueness_006.ttcn | 18 + .../NegSem_050202_Uniqueness_007.ttcn | 22 + .../NegSem_050202_Uniqueness_008.ttcn | 22 + .../NegSem_050202_Uniqueness_009.ttcn | 22 + .../NegSem_050202_Uniqueness_010.ttcn | 23 + .../NegSem_050202_Uniqueness_011.ttcn | 21 + .../NegSem_050202_Uniqueness_012.ttcn | 28 + .../Sem_050202_Uniqueness_001.ttcn | 33 + .../Sem_050202_Uniqueness_002.ttcn | 27 + .../Sem_050202_Uniqueness_003.ttcn | 27 + .../Sem_050202_Uniqueness_004.ttcn | 32 + .../Sem_050202_Uniqueness_005.ttcn | 39 + .../0502_toplevel/NegSem_0502_Scope_001.ttcn | 29 + .../0502_toplevel/NegSem_0502_Scope_002.ttcn | 28 + .../0502_toplevel/NegSem_0502_Scope_003.ttcn | 31 + .../0502_toplevel/Sem_0502_Scope_001.ttcn | 25 + .../0502_toplevel/Sem_0502_Scope_002.ttcn | 39 + .../0502_toplevel/Sem_0502_Scope_003.ttcn | 42 + .../0502_toplevel/Sem_0502_Scope_004.ttcn | 52 + .../0502_toplevel/Sem_0502_Scope_008.ttcn | 31 + .../0502_toplevel/Syn_0502_Scope_001.ttcn | 79 + .../NegSem_0503_Ordering_001.ttcn | 33 + .../NegSem_0503_Ordering_002.ttcn | 36 + .../NegSem_0503_Ordering_003.ttcn | 36 + .../Sem_0503_Ordering_001.ttcn | 37 + .../Sem_0503_Ordering_002.ttcn | 37 + .../Sem_0503_Ordering_005.ttcn | 39 + ...05040101_parameters_of_kind_value_001.ttcn | 28 + ...05040101_parameters_of_kind_value_002.ttcn | 33 + ...05040101_parameters_of_kind_value_003.ttcn | 41 + ...05040101_parameters_of_kind_value_004.ttcn | 41 + ...05040101_parameters_of_kind_value_005.ttcn | 29 + ...05040101_parameters_of_kind_value_006.ttcn | 29 + ...05040101_parameters_of_kind_value_007.ttcn | 27 + ...05040101_parameters_of_kind_value_009.ttcn | 27 + ...05040101_parameters_of_kind_value_011.ttcn | 29 + ...05040101_parameters_of_kind_value_012.ttcn | 30 + ...05040101_parameters_of_kind_value_013.ttcn | 25 + ...05040101_parameters_of_kind_value_014.ttcn | 30 + ...05040101_parameters_of_kind_value_015.ttcn | 30 + ...05040101_parameters_of_kind_value_016.ttcn | 30 + ...05040101_parameters_of_kind_value_017.ttcn | 30 + ...05040101_parameters_of_kind_value_018.ttcn | 27 + ...05040101_parameters_of_kind_value_001.ttcn | 16 + ...05040101_parameters_of_kind_value_002.ttcn | 18 + ...05040101_parameters_of_kind_value_003.ttcn | 18 + ...05040101_parameters_of_kind_value_004.ttcn | 18 + ...05040101_parameters_of_kind_value_005.ttcn | 18 + ...05040101_parameters_of_kind_value_006.ttcn | 16 + ...05040101_parameters_of_kind_value_007.ttcn | 16 + ...05040101_parameters_of_kind_value_008.ttcn | 16 + ...05040101_parameters_of_kind_value_009.ttcn | 19 + ...05040101_parameters_of_kind_value_010.ttcn | 18 + ...05040101_parameters_of_kind_value_011.ttcn | 16 + ...05040101_parameters_of_kind_value_012.ttcn | 18 + ...05040101_parameters_of_kind_value_013.ttcn | 16 + ...05040101_parameters_of_kind_value_001.ttcn | 32 + ...05040101_parameters_of_kind_value_002.ttcn | 32 + ...05040101_parameters_of_kind_value_003.ttcn | 33 + ...05040101_parameters_of_kind_value_004.ttcn | 34 + ...05040101_parameters_of_kind_value_005.ttcn | 40 + ...05040101_parameters_of_kind_value_006.ttcn | 39 + ...05040101_parameters_of_kind_value_007.ttcn | 33 + ...05040101_parameters_of_kind_value_008.ttcn | 34 + ...05040101_parameters_of_kind_value_009.ttcn | 29 + ...05040101_parameters_of_kind_value_010.ttcn | 32 + ...05040101_parameters_of_kind_value_011.ttcn | 27 + ...05040101_parameters_of_kind_value_012.ttcn | 29 + ...05040101_parameters_of_kind_value_013.ttcn | 25 + ...05040101_parameters_of_kind_value_014.ttcn | 26 + ...05040101_parameters_of_kind_value_015.ttcn | 25 + ...05040101_parameters_of_kind_value_016.ttcn | 33 + ...05040101_parameters_of_kind_value_017.ttcn | 30 + ...05040101_parameters_of_kind_value_018.ttcn | 30 + ...05040101_parameters_of_kind_value_019.ttcn | 30 + ...05040101_parameters_of_kind_value_020.ttcn | 30 + ...05040101_parameters_of_kind_value_021.ttcn | 29 + ...05040101_parameters_of_kind_value_022.ttcn | 43 + ...05040101_parameters_of_kind_value_023.ttcn | 28 + ...05040101_parameters_of_kind_value_024.ttcn | 32 + ...05040101_parameters_of_kind_value_025.ttcn | 37 + ...40102_parameters_of_kind_template_001.ttcn | 28 + ...40102_parameters_of_kind_template_002.ttcn | 33 + ...40102_parameters_of_kind_template_003.ttcn | 41 + ...40102_parameters_of_kind_template_004.ttcn | 41 + ...40102_parameters_of_kind_template_005.ttcn | 29 + ...40102_parameters_of_kind_template_006.ttcn | 29 + ...40102_parameters_of_kind_template_007.ttcn | 27 + ...40102_parameters_of_kind_template_009.ttcn | 27 + ...40102_parameters_of_kind_template_011.ttcn | 29 + ...40102_parameters_of_kind_template_012.ttcn | 30 + ...40102_parameters_of_kind_template_013.ttcn | 25 + ...40102_parameters_of_kind_template_014.ttcn | 30 + ...40102_parameters_of_kind_template_015.ttcn | 30 + ...40102_parameters_of_kind_template_016.ttcn | 30 + ...40102_parameters_of_kind_template_017.ttcn | 30 + ...40102_parameters_of_kind_template_018.ttcn | 28 + ...40102_parameters_of_kind_template_019.ttcn | 28 + ...40102_parameters_of_kind_template_001.ttcn | 14 + ...40102_parameters_of_kind_template_001.ttcn | 86 + ...40102_parameters_of_kind_template_002.ttcn | 79 + ...40102_parameters_of_kind_template_003.ttcn | 42 + ...40102_parameters_of_kind_template_004.ttcn | 41 + ...40102_parameters_of_kind_template_005.ttcn | 35 + ...40102_parameters_of_kind_template_006.ttcn | 36 + ...40102_parameters_of_kind_template_007.ttcn | 32 + ...40102_parameters_of_kind_template_008.ttcn | 33 + ...40102_parameters_of_kind_template_009.ttcn | 27 + ...40102_parameters_of_kind_template_010.ttcn | 29 + ...40102_parameters_of_kind_template_011.ttcn | 25 + ...40102_parameters_of_kind_template_012.ttcn | 26 + ...40102_parameters_of_kind_template_013.ttcn | 25 + ...40102_parameters_of_kind_template_014.ttcn | 33 + ...40102_parameters_of_kind_template_015.ttcn | 37 + ...40102_parameters_of_kind_template_016.ttcn | 36 + ...40102_parameters_of_kind_template_017.ttcn | 31 + ...40102_parameters_of_kind_template_018.ttcn | 32 + ...40102_parameters_of_kind_template_019.ttcn | 28 + ...40102_parameters_of_kind_template_020.ttcn | 37 + ...40102_parameters_of_kind_template_021.ttcn | 36 + ...40102_parameters_of_kind_template_022.ttcn | 31 + ...40102_parameters_of_kind_template_023.ttcn | 32 + ...40102_parameters_of_kind_template_024.ttcn | 28 + ...40102_parameters_of_kind_template_025.ttcn | 37 + ...40102_parameters_of_kind_template_026.ttcn | 36 + ...40102_parameters_of_kind_template_027.ttcn | 31 + ...40102_parameters_of_kind_template_028.ttcn | 32 + ...40102_parameters_of_kind_template_029.ttcn | 28 + ...40102_parameters_of_kind_template_030.ttcn | 37 + ...40102_parameters_of_kind_template_031.ttcn | 36 + ...40102_parameters_of_kind_template_032.ttcn | 31 + ...40102_parameters_of_kind_template_033.ttcn | 32 + ...40102_parameters_of_kind_template_034.ttcn | 28 + ...40102_parameters_of_kind_template_035.ttcn | 30 + ...40102_parameters_of_kind_template_036.ttcn | 30 + ...40102_parameters_of_kind_template_037.ttcn | 30 + ...40102_parameters_of_kind_template_038.ttcn | 30 + ...40102_parameters_of_kind_template_039.ttcn | 27 + ...40102_parameters_of_kind_template_040.ttcn | 32 + ...40102_parameters_of_kind_template_041.ttcn | 35 + ...05040103_parameters_of_kind_timer_001.ttcn | 33 + ...05040103_parameters_of_kind_timer_002.ttcn | 34 + ...05040103_parameters_of_kind_timer_003.ttcn | 27 + ...05040103_parameters_of_kind_timer_004.ttcn | 29 + ...05040103_parameters_of_kind_timer_001.ttcn | 30 + ...05040103_parameters_of_kind_timer_002.ttcn | 42 + ...05040103_parameters_of_kind_timer_001.ttcn | 98 + ...05040103_parameters_of_kind_timer_002.ttcn | 30 + ...05040103_parameters_of_kind_timer_003.ttcn | 32 + ..._05040104_parameters_of_kind_port_001.ttcn | 35 + ..._05040104_parameters_of_kind_port_002.ttcn | 38 + ..._05040104_parameters_of_kind_port_003.ttcn | 33 + ..._05040104_parameters_of_kind_port_004.ttcn | 32 + ..._05040104_parameters_of_kind_port_005.ttcn | 33 + ..._05040104_parameters_of_kind_port_006.ttcn | 31 + ..._05040104_parameters_of_kind_port_001.ttcn | 111 + ..._05040104_parameters_of_kind_port_002.ttcn | 33 + .../050401_top_level/NOTES | 7 + .../NegSem_050401_top_level_001.ttcn | 43 + .../NegSem_050401_top_level_002.ttcn | 42 + .../NegSem_050401_top_level_003.ttcn | 40 + .../Sem_050401_top_level_001.ttcn | 29 + .../Sem_050401_top_level_002.ttcn | 34 + .../Sem_050401_top_level_003.ttcn | 30 + .../Sem_050401_top_level_004.ttcn | 30 + .../Sem_050401_top_level_005.ttcn | 31 + .../Sem_050401_top_level_006.ttcn | 31 + .../Sem_050401_top_level_007.ttcn | 32 + .../Sem_050401_top_level_008.ttcn | 33 + .../Sem_050401_top_level_009.ttcn | 33 + .../Sem_050401_top_level_010.ttcn | 35 + .../Sem_050401_top_level_011.ttcn | 34 + .../Sem_050401_top_level_012.ttcn | 35 + .../Sem_050401_top_level_013.ttcn | 34 + .../Sem_050401_top_level_014.ttcn | 34 + .../Sem_050401_top_level_015.ttcn | 34 + .../Sem_050401_top_level_016.ttcn | 40 + .../Sem_050401_top_level_017.ttcn | 42 + .../Sem_050401_top_level_018.ttcn | 35 + .../Sem_050401_top_level_019.ttcn | 29 + .../Sem_050401_top_level_020.ttcn | 29 + .../Sem_050401_top_level_021.ttcn | 35 + .../Sem_050401_top_level_022.ttcn | 29 + .../Sem_050401_top_level_023.ttcn | 29 + .../Sem_050401_top_level_024.ttcn | 35 + .../Sem_050401_top_level_025.ttcn | 39 + .../Sem_050401_top_level_026.ttcn | 39 + .../Sem_050401_top_level_027.ttcn | 36 + .../Sem_050401_top_level_028.ttcn | 36 + .../Sem_050401_top_level_029.ttcn | 39 + .../NegSem_050402_actual_parameters_001.ttcn | 33 + .../NegSem_050402_actual_parameters_002.ttcn | 32 + .../NegSem_050402_actual_parameters_003.ttcn | 36 + .../NegSem_050402_actual_parameters_004.ttcn | 38 + .../NegSem_050402_actual_parameters_005.ttcn | 37 + .../NegSem_050402_actual_parameters_006.ttcn | 34 + .../NegSem_050402_actual_parameters_007.ttcn | 33 + .../NegSem_050402_actual_parameters_008.ttcn | 37 + .../NegSem_050402_actual_parameters_009.ttcn | 39 + .../NegSem_050402_actual_parameters_010.ttcn | 38 + .../NegSem_050402_actual_parameters_011.ttcn | 37 + .../NegSem_050402_actual_parameters_012.ttcn | 36 + .../NegSem_050402_actual_parameters_013.ttcn | 40 + .../NegSem_050402_actual_parameters_014.ttcn | 42 + .../NegSem_050402_actual_parameters_015.ttcn | 41 + .../NegSem_050402_actual_parameters_016.ttcn | 29 + .../NegSem_050402_actual_parameters_017.ttcn | 28 + .../NegSem_050402_actual_parameters_018.ttcn | 31 + .../NegSem_050402_actual_parameters_019.ttcn | 33 + .../NegSem_050402_actual_parameters_020.ttcn | 32 + .../NegSem_050402_actual_parameters_021.ttcn | 30 + .../NegSem_050402_actual_parameters_022.ttcn | 32 + .../NegSem_050402_actual_parameters_023.ttcn | 32 + .../NegSem_050402_actual_parameters_024.ttcn | 34 + .../NegSem_050402_actual_parameters_025.ttcn | 35 + .../NegSem_050402_actual_parameters_026.ttcn | 32 + .../NegSem_050402_actual_parameters_027.ttcn | 31 + .../NegSem_050402_actual_parameters_028.ttcn | 35 + .../NegSem_050402_actual_parameters_029.ttcn | 37 + .../NegSem_050402_actual_parameters_030.ttcn | 36 + .../NegSem_050402_actual_parameters_031.ttcn | 35 + .../NegSem_050402_actual_parameters_032.ttcn | 38 + .../NegSem_050402_actual_parameters_033.ttcn | 34 + .../NegSem_050402_actual_parameters_034.ttcn | 36 + .../NegSem_050402_actual_parameters_035.ttcn | 36 + .../NegSem_050402_actual_parameters_036.ttcn | 38 + .../NegSem_050402_actual_parameters_037.ttcn | 39 + .../NegSem_050402_actual_parameters_038.ttcn | 36 + .../NegSem_050402_actual_parameters_039.ttcn | 35 + .../NegSem_050402_actual_parameters_040.ttcn | 39 + .../NegSem_050402_actual_parameters_041.ttcn | 41 + .../NegSem_050402_actual_parameters_042.ttcn | 40 + .../NegSem_050402_actual_parameters_043.ttcn | 39 + .../NegSem_050402_actual_parameters_044.ttcn | 42 + .../NegSem_050402_actual_parameters_045.ttcn | 26 + .../NegSem_050402_actual_parameters_046.ttcn | 28 + .../NegSem_050402_actual_parameters_047.ttcn | 28 + .../NegSem_050402_actual_parameters_048.ttcn | 30 + .../NegSem_050402_actual_parameters_049.ttcn | 31 + .../NegSem_050402_actual_parameters_050.ttcn | 28 + .../NegSem_050402_actual_parameters_051.ttcn | 26 + .../NegSem_050402_actual_parameters_052.ttcn | 30 + .../NegSem_050402_actual_parameters_053.ttcn | 32 + .../NegSem_050402_actual_parameters_054.ttcn | 31 + .../NegSem_050402_actual_parameters_055.ttcn | 31 + .../NegSem_050402_actual_parameters_056.ttcn | 34 + .../NegSem_050402_actual_parameters_057.ttcn | 30 + .../NegSem_050402_actual_parameters_058.ttcn | 32 + .../NegSem_050402_actual_parameters_059.ttcn | 32 + .../NegSem_050402_actual_parameters_060.ttcn | 34 + .../NegSem_050402_actual_parameters_061.ttcn | 35 + .../NegSem_050402_actual_parameters_062.ttcn | 32 + .../NegSem_050402_actual_parameters_063.ttcn | 34 + .../NegSem_050402_actual_parameters_064.ttcn | 36 + .../NegSem_050402_actual_parameters_065.ttcn | 36 + .../NegSem_050402_actual_parameters_066.ttcn | 38 + .../NegSem_050402_actual_parameters_067.ttcn | 39 + .../NegSem_050402_actual_parameters_068.ttcn | 36 + .../NegSem_050402_actual_parameters_069.ttcn | 26 + .../NegSem_050402_actual_parameters_070.ttcn | 28 + .../NegSem_050402_actual_parameters_071.ttcn | 28 + .../NegSem_050402_actual_parameters_072.ttcn | 30 + .../NegSem_050402_actual_parameters_073.ttcn | 31 + .../NegSem_050402_actual_parameters_074.ttcn | 28 + .../NegSem_050402_actual_parameters_075.ttcn | 31 + .../NegSem_050402_actual_parameters_076.ttcn | 33 + .../NegSem_050402_actual_parameters_077.ttcn | 33 + .../NegSem_050402_actual_parameters_078.ttcn | 35 + .../NegSem_050402_actual_parameters_079.ttcn | 36 + .../NegSem_050402_actual_parameters_080.ttcn | 33 + .../NegSem_050402_actual_parameters_081.ttcn | 34 + .../NegSem_050402_actual_parameters_082.ttcn | 36 + .../NegSem_050402_actual_parameters_083.ttcn | 37 + .../NegSem_050402_actual_parameters_084.ttcn | 39 + .../NegSem_050402_actual_parameters_085.ttcn | 40 + .../NegSem_050402_actual_parameters_086.ttcn | 37 + .../NegSem_050402_actual_parameters_087.ttcn | 27 + .../NegSem_050402_actual_parameters_088.ttcn | 29 + .../NegSem_050402_actual_parameters_089.ttcn | 29 + .../NegSem_050402_actual_parameters_090.ttcn | 31 + .../NegSem_050402_actual_parameters_091.ttcn | 32 + .../NegSem_050402_actual_parameters_092.ttcn | 29 + .../NegSem_050402_actual_parameters_093.ttcn | 42 + .../NegSem_050402_actual_parameters_094.ttcn | 43 + .../NegSem_050402_actual_parameters_095.ttcn | 44 + .../NegSem_050402_actual_parameters_096.ttcn | 45 + .../NegSem_050402_actual_parameters_097.ttcn | 33 + .../NegSem_050402_actual_parameters_098.ttcn | 30 + .../NegSem_050402_actual_parameters_099.ttcn | 35 + .../NegSem_050402_actual_parameters_100.ttcn | 29 + .../NegSem_050402_actual_parameters_101.ttcn | 28 + .../NegSem_050402_actual_parameters_102.ttcn | 28 + .../NegSem_050402_actual_parameters_103.ttcn | 29 + .../NegSem_050402_actual_parameters_104.ttcn | 29 + .../NegSem_050402_actual_parameters_105.ttcn | 29 + .../NegSem_050402_actual_parameters_106.ttcn | 28 + .../NegSem_050402_actual_parameters_107.ttcn | 40 + .../NegSem_050402_actual_parameters_108.ttcn | 42 + .../NegSem_050402_actual_parameters_109.ttcn | 39 + .../NegSem_050402_actual_parameters_110.ttcn | 36 + .../NegSem_050402_actual_parameters_111.ttcn | 29 + .../NegSem_050402_actual_parameters_112.ttcn | 29 + .../NegSem_050402_actual_parameters_113.ttcn | 29 + .../NegSem_050402_actual_parameters_114.ttcn | 39 + .../NegSem_050402_actual_parameters_115.ttcn | 31 + .../NegSem_050402_actual_parameters_116.ttcn | 26 + .../NegSem_050402_actual_parameters_117.ttcn | 36 + .../NegSem_050402_actual_parameters_118.ttcn | 29 + .../NegSem_050402_actual_parameters_119.ttcn | 36 + .../NegSem_050402_actual_parameters_120.ttcn | 36 + .../NegSem_050402_actual_parameters_121.ttcn | 36 + .../NegSem_050402_actual_parameters_122.ttcn | 36 + .../NegSem_050402_actual_parameters_123.ttcn | 36 + .../NegSem_050402_actual_parameters_124.ttcn | 36 + .../NegSem_050402_actual_parameters_125.ttcn | 31 + .../NegSem_050402_actual_parameters_126.ttcn | 31 + .../NegSem_050402_actual_parameters_127.ttcn | 31 + .../NegSem_050402_actual_parameters_128.ttcn | 31 + .../NegSem_050402_actual_parameters_129.ttcn | 39 + .../NegSem_050402_actual_parameters_130.ttcn | 39 + .../NegSem_050402_actual_parameters_131.ttcn | 40 + .../NegSem_050402_actual_parameters_132.ttcn | 37 + .../NegSem_050402_actual_parameters_133.ttcn | 37 + .../NegSem_050402_actual_parameters_134.ttcn | 37 + .../NegSem_050402_actual_parameters_135.ttcn | 35 + .../NegSem_050402_actual_parameters_136.ttcn | 43 + .../NegSem_050402_actual_parameters_137.ttcn | 43 + .../NegSem_050402_actual_parameters_138.ttcn | 44 + .../NegSem_050402_actual_parameters_139.ttcn | 41 + .../NegSem_050402_actual_parameters_140.ttcn | 41 + .../NegSem_050402_actual_parameters_141.ttcn | 41 + .../NegSem_050402_actual_parameters_142.ttcn | 39 + .../NegSem_050402_actual_parameters_143.ttcn | 38 + .../NegSem_050402_actual_parameters_144.ttcn | 33 + .../NegSem_050402_actual_parameters_145.ttcn | 27 + .../NegSem_050402_actual_parameters_146.ttcn | 32 + .../NegSem_050402_actual_parameters_147.ttcn | 37 + .../NegSem_050402_actual_parameters_148.ttcn | 36 + .../NegSem_050402_actual_parameters_149.ttcn | 34 + .../NegSem_050402_actual_parameters_150.ttcn | 34 + .../NegSem_050402_actual_parameters_151.ttcn | 33 + .../NegSem_050402_actual_parameters_152.ttcn | 36 + .../NegSem_050402_actual_parameters_153.ttcn | 41 + .../NegSem_050402_actual_parameters_154.ttcn | 40 + .../NegSem_050402_actual_parameters_155.ttcn | 38 + .../NegSem_050402_actual_parameters_156.ttcn | 38 + .../NegSem_050402_actual_parameters_157.ttcn | 37 + .../NegSem_050402_actual_parameters_158.ttcn | 29 + .../NegSem_050402_actual_parameters_159.ttcn | 27 + .../NegSem_050402_actual_parameters_160.ttcn | 33 + .../NegSem_050402_actual_parameters_161.ttcn | 25 + .../NegSem_050402_actual_parameters_162.ttcn | 34 + .../NegSem_050402_actual_parameters_163.ttcn | 34 + .../NegSem_050402_actual_parameters_164.ttcn | 34 + .../NegSem_050402_actual_parameters_165.ttcn | 32 + .../NegSem_050402_actual_parameters_166.ttcn | 36 + .../NegSem_050402_actual_parameters_167.ttcn | 38 + .../NegSem_050402_actual_parameters_168.ttcn | 37 + .../NegSem_050402_actual_parameters_169.ttcn | 36 + .../NegSem_050402_actual_parameters_170.ttcn | 39 + .../NegSem_050402_actual_parameters_171.ttcn | 36 + .../NegSem_050402_actual_parameters_172.ttcn | 40 + .../NegSem_050402_actual_parameters_173.ttcn | 42 + .../NegSem_050402_actual_parameters_174.ttcn | 41 + .../NegSem_050402_actual_parameters_175.ttcn | 40 + .../NegSem_050402_actual_parameters_176.ttcn | 43 + .../NegSem_050402_actual_parameters_177.ttcn | 27 + .../NegSem_050402_actual_parameters_178.ttcn | 30 + .../NegSem_050402_actual_parameters_179.ttcn | 31 + .../NegSem_050402_actual_parameters_180.ttcn | 31 + .../NegSem_050402_actual_parameters_181.ttcn | 31 + .../NegSem_050402_actual_parameters_182.ttcn | 35 + .../NegSem_050402_actual_parameters_183.ttcn | 37 + .../NegSyn_050402_actual_parameters_001.ttcn | 36 + .../Sem_050402_actual_parameters_001.ttcn | 85 + .../Sem_050402_actual_parameters_002.ttcn | 85 + .../Sem_050402_actual_parameters_003.ttcn | 31 + .../Sem_050402_actual_parameters_004.ttcn | 33 + .../Sem_050402_actual_parameters_005.ttcn | 33 + .../Sem_050402_actual_parameters_006.ttcn | 32 + .../Sem_050402_actual_parameters_007.ttcn | 35 + .../Sem_050402_actual_parameters_008.ttcn | 36 + .../Sem_050402_actual_parameters_009.ttcn | 38 + .../Sem_050402_actual_parameters_010.ttcn | 36 + .../Sem_050402_actual_parameters_011.ttcn | 36 + .../Sem_050402_actual_parameters_012.ttcn | 32 + .../Sem_050402_actual_parameters_013.ttcn | 34 + .../Sem_050402_actual_parameters_014.ttcn | 34 + .../Sem_050402_actual_parameters_015.ttcn | 33 + .../Sem_050402_actual_parameters_016.ttcn | 36 + .../Sem_050402_actual_parameters_017.ttcn | 37 + .../Sem_050402_actual_parameters_018.ttcn | 39 + .../Sem_050402_actual_parameters_019.ttcn | 37 + .../Sem_050402_actual_parameters_020.ttcn | 37 + .../Sem_050402_actual_parameters_021.ttcn | 35 + .../Sem_050402_actual_parameters_022.ttcn | 37 + .../Sem_050402_actual_parameters_023.ttcn | 37 + .../Sem_050402_actual_parameters_024.ttcn | 36 + .../Sem_050402_actual_parameters_025.ttcn | 39 + .../Sem_050402_actual_parameters_026.ttcn | 40 + .../Sem_050402_actual_parameters_027.ttcn | 42 + .../Sem_050402_actual_parameters_028.ttcn | 40 + .../Sem_050402_actual_parameters_029.ttcn | 40 + .../Sem_050402_actual_parameters_030.ttcn | 27 + .../Sem_050402_actual_parameters_031.ttcn | 29 + .../Sem_050402_actual_parameters_032.ttcn | 29 + .../Sem_050402_actual_parameters_033.ttcn | 28 + .../Sem_050402_actual_parameters_034.ttcn | 31 + .../Sem_050402_actual_parameters_035.ttcn | 31 + .../Sem_050402_actual_parameters_036.ttcn | 34 + .../Sem_050402_actual_parameters_037.ttcn | 32 + .../Sem_050402_actual_parameters_038.ttcn | 32 + .../Sem_050402_actual_parameters_039.ttcn | 31 + .../Sem_050402_actual_parameters_040.ttcn | 35 + .../Sem_050402_actual_parameters_041.ttcn | 37 + .../Sem_050402_actual_parameters_042.ttcn | 35 + .../Sem_050402_actual_parameters_043.ttcn | 35 + .../Sem_050402_actual_parameters_044.ttcn | 38 + .../Sem_050402_actual_parameters_045.ttcn | 35 + .../Sem_050402_actual_parameters_046.ttcn | 39 + .../Sem_050402_actual_parameters_047.ttcn | 41 + .../Sem_050402_actual_parameters_048.ttcn | 39 + .../Sem_050402_actual_parameters_049.ttcn | 39 + .../Sem_050402_actual_parameters_050.ttcn | 42 + .../Sem_050402_actual_parameters_051.ttcn | 27 + .../Sem_050402_actual_parameters_052.ttcn | 30 + .../Sem_050402_actual_parameters_053.ttcn | 33 + .../Sem_050402_actual_parameters_054.ttcn | 31 + .../Sem_050402_actual_parameters_055.ttcn | 31 + .../Sem_050402_actual_parameters_056.ttcn | 35 + .../Sem_050402_actual_parameters_057.ttcn | 32 + .../Sem_050402_actual_parameters_058.ttcn | 34 + .../Sem_050402_actual_parameters_059.ttcn | 34 + .../Sem_050402_actual_parameters_060.ttcn | 33 + .../Sem_050402_actual_parameters_061.ttcn | 36 + .../Sem_050402_actual_parameters_062.ttcn | 37 + .../Sem_050402_actual_parameters_063.ttcn | 39 + .../Sem_050402_actual_parameters_064.ttcn | 37 + .../Sem_050402_actual_parameters_065.ttcn | 37 + .../Sem_050402_actual_parameters_066.ttcn | 34 + .../Sem_050402_actual_parameters_067.ttcn | 33 + .../Sem_050402_actual_parameters_068.ttcn | 37 + .../Sem_050402_actual_parameters_069.ttcn | 39 + .../Sem_050402_actual_parameters_070.ttcn | 38 + .../Sem_050402_actual_parameters_071.ttcn | 33 + .../Sem_050402_actual_parameters_072.ttcn | 35 + .../Sem_050402_actual_parameters_073.ttcn | 35 + .../Sem_050402_actual_parameters_074.ttcn | 34 + .../Sem_050402_actual_parameters_075.ttcn | 37 + .../Sem_050402_actual_parameters_076.ttcn | 38 + .../Sem_050402_actual_parameters_077.ttcn | 40 + .../Sem_050402_actual_parameters_078.ttcn | 38 + .../Sem_050402_actual_parameters_079.ttcn | 38 + .../Sem_050402_actual_parameters_080.ttcn | 35 + .../Sem_050402_actual_parameters_081.ttcn | 34 + .../Sem_050402_actual_parameters_082.ttcn | 38 + .../Sem_050402_actual_parameters_083.ttcn | 40 + .../Sem_050402_actual_parameters_084.ttcn | 39 + .../Sem_050402_actual_parameters_085.ttcn | 36 + .../Sem_050402_actual_parameters_086.ttcn | 38 + .../Sem_050402_actual_parameters_087.ttcn | 38 + .../Sem_050402_actual_parameters_088.ttcn | 37 + .../Sem_050402_actual_parameters_089.ttcn | 40 + .../Sem_050402_actual_parameters_090.ttcn | 41 + .../Sem_050402_actual_parameters_091.ttcn | 43 + .../Sem_050402_actual_parameters_092.ttcn | 41 + .../Sem_050402_actual_parameters_093.ttcn | 41 + .../Sem_050402_actual_parameters_094.ttcn | 38 + .../Sem_050402_actual_parameters_095.ttcn | 37 + .../Sem_050402_actual_parameters_096.ttcn | 41 + .../Sem_050402_actual_parameters_097.ttcn | 43 + .../Sem_050402_actual_parameters_098.ttcn | 42 + .../Sem_050402_actual_parameters_099.ttcn | 28 + .../Sem_050402_actual_parameters_100.ttcn | 30 + .../Sem_050402_actual_parameters_101.ttcn | 30 + .../Sem_050402_actual_parameters_102.ttcn | 29 + .../Sem_050402_actual_parameters_103.ttcn | 32 + .../Sem_050402_actual_parameters_104.ttcn | 32 + .../Sem_050402_actual_parameters_105.ttcn | 35 + .../Sem_050402_actual_parameters_106.ttcn | 33 + .../Sem_050402_actual_parameters_107.ttcn | 33 + .../Sem_050402_actual_parameters_108.ttcn | 30 + .../Sem_050402_actual_parameters_109.ttcn | 29 + .../Sem_050402_actual_parameters_110.ttcn | 32 + .../Sem_050402_actual_parameters_111.ttcn | 34 + .../Sem_050402_actual_parameters_112.ttcn | 33 + .../Sem_050402_actual_parameters_113.ttcn | 32 + .../Sem_050402_actual_parameters_114.ttcn | 36 + .../Sem_050402_actual_parameters_115.ttcn | 38 + .../Sem_050402_actual_parameters_116.ttcn | 37 + .../Sem_050402_actual_parameters_117.ttcn | 36 + .../Sem_050402_actual_parameters_118.ttcn | 39 + .../Sem_050402_actual_parameters_119.ttcn | 36 + .../Sem_050402_actual_parameters_120.ttcn | 40 + .../Sem_050402_actual_parameters_121.ttcn | 42 + .../Sem_050402_actual_parameters_122.ttcn | 41 + .../Sem_050402_actual_parameters_123.ttcn | 40 + .../Sem_050402_actual_parameters_124.ttcn | 43 + .../Sem_050402_actual_parameters_125.ttcn | 27 + .../Sem_050402_actual_parameters_126.ttcn | 30 + .../Sem_050402_actual_parameters_127.ttcn | 31 + .../Sem_050402_actual_parameters_128.ttcn | 31 + .../Sem_050402_actual_parameters_129.ttcn | 31 + .../Sem_050402_actual_parameters_130.ttcn | 35 + .../Sem_050402_actual_parameters_131.ttcn | 32 + .../Sem_050402_actual_parameters_132.ttcn | 36 + .../Sem_050402_actual_parameters_133.ttcn | 38 + .../Sem_050402_actual_parameters_134.ttcn | 37 + .../Sem_050402_actual_parameters_135.ttcn | 36 + .../Sem_050402_actual_parameters_136.ttcn | 39 + .../Sem_050402_actual_parameters_137.ttcn | 36 + .../Sem_050402_actual_parameters_138.ttcn | 40 + .../Sem_050402_actual_parameters_139.ttcn | 42 + .../Sem_050402_actual_parameters_140.ttcn | 41 + .../Sem_050402_actual_parameters_141.ttcn | 40 + .../Sem_050402_actual_parameters_142.ttcn | 43 + .../Sem_050402_actual_parameters_143.ttcn | 28 + .../Sem_050402_actual_parameters_144.ttcn | 31 + .../Sem_050402_actual_parameters_145.ttcn | 33 + .../Sem_050402_actual_parameters_146.ttcn | 32 + .../Sem_050402_actual_parameters_147.ttcn | 32 + .../Sem_050402_actual_parameters_148.ttcn | 35 + .../Sem_050402_actual_parameters_149.ttcn | 45 + .../Sem_050402_actual_parameters_150.ttcn | 43 + .../Sem_050402_actual_parameters_151.ttcn | 47 + .../Sem_050402_actual_parameters_152.ttcn | 44 + .../Sem_050402_actual_parameters_153.ttcn | 48 + .../Sem_050402_actual_parameters_154.ttcn | 46 + .../Sem_050402_actual_parameters_155.ttcn | 35 + .../Sem_050402_actual_parameters_156.ttcn | 35 + .../Sem_050402_actual_parameters_157.ttcn | 32 + .../Sem_050402_actual_parameters_158.ttcn | 32 + .../Sem_050402_actual_parameters_159.ttcn | 36 + .../Sem_050402_actual_parameters_160.ttcn | 35 + .../Sem_050402_actual_parameters_161.ttcn | 39 + .../Sem_050402_actual_parameters_162.ttcn | 29 + .../Sem_050402_actual_parameters_163.ttcn | 29 + .../Sem_050402_actual_parameters_164.ttcn | 29 + .../Sem_050402_actual_parameters_165.ttcn | 29 + .../Sem_050402_actual_parameters_166.ttcn | 47 + .../Sem_050402_actual_parameters_167.ttcn | 49 + .../Sem_050402_actual_parameters_168.ttcn | 37 + .../Sem_050402_actual_parameters_169.ttcn | 37 + .../Sem_050402_actual_parameters_170.ttcn | 37 + .../Sem_050402_actual_parameters_171.ttcn | 37 + .../Sem_050402_actual_parameters_172.ttcn | 28 + .../Sem_050402_actual_parameters_173.ttcn | 28 + .../Sem_050402_actual_parameters_174.ttcn | 29 + .../Sem_050402_actual_parameters_175.ttcn | 29 + .../Sem_050402_actual_parameters_176.ttcn | 29 + .../Sem_050402_actual_parameters_177.ttcn | 29 + .../Sem_050402_actual_parameters_178.ttcn | 30 + .../Sem_050402_actual_parameters_179.ttcn | 31 + .../Sem_050402_actual_parameters_180.ttcn | 28 + .../Sem_050402_actual_parameters_181.ttcn | 28 + .../Sem_050402_actual_parameters_182.ttcn | 29 + .../Sem_050402_actual_parameters_183.ttcn | 40 + .../Sem_050402_actual_parameters_184.ttcn | 42 + .../Sem_050402_actual_parameters_185.ttcn | 29 + .../Sem_050402_actual_parameters_186.ttcn | 29 + .../Sem_050402_actual_parameters_187.ttcn | 29 + .../Sem_050402_actual_parameters_188.ttcn | 41 + .../Sem_050402_actual_parameters_189.ttcn | 30 + .../Sem_050402_actual_parameters_190.ttcn | 32 + .../Sem_050402_actual_parameters_191.ttcn | 37 + .../Sem_050402_actual_parameters_192.ttcn | 37 + .../Sem_050402_actual_parameters_193.ttcn | 28 + .../Sem_050402_actual_parameters_194.ttcn | 30 + .../Sem_050402_actual_parameters_195.ttcn | 28 + .../Sem_050402_actual_parameters_196.ttcn | 31 + .../Sem_050402_actual_parameters_197.ttcn | 28 + .../Sem_050402_actual_parameters_198.ttcn | 29 + .../Sem_050402_actual_parameters_199.ttcn | 43 + .../Sem_050402_actual_parameters_200.ttcn | 34 + .../Sem_050402_actual_parameters_201.ttcn | 46 + .../Sem_050402_actual_parameters_202.ttcn | 31 + .../Sem_050402_actual_parameters_203.ttcn | 37 + .../Sem_050402_actual_parameters_204.ttcn | 37 + .../Sem_050402_actual_parameters_205.ttcn | 40 + .../Sem_050402_actual_parameters_206.ttcn | 41 + .../Sem_050402_actual_parameters_207.ttcn | 41 + .../Sem_050402_actual_parameters_208.ttcn | 40 + .../Sem_050402_actual_parameters_209.ttcn | 41 + .../Sem_050402_actual_parameters_210.ttcn | 41 + .../Sem_050402_actual_parameters_211.ttcn | 32 + .../Sem_050402_actual_parameters_212.ttcn | 41 + .../Sem_050402_actual_parameters_213.ttcn | 41 + .../Sem_050402_actual_parameters_214.ttcn | 44 + .../Sem_050402_actual_parameters_215.ttcn | 45 + .../Sem_050402_actual_parameters_216.ttcn | 45 + .../Sem_050402_actual_parameters_217.ttcn | 44 + .../Sem_050402_actual_parameters_218.ttcn | 45 + .../Sem_050402_actual_parameters_219.ttcn | 45 + .../Sem_050402_actual_parameters_220.ttcn | 36 + .../Sem_050402_actual_parameters_221.ttcn | 31 + .../Sem_050402_actual_parameters_222.ttcn | 35 + .../Sem_050402_actual_parameters_223.ttcn | 30 + .../Sem_050402_actual_parameters_224.ttcn | 34 + .../Sem_050402_actual_parameters_225.ttcn | 30 + .../Sem_050402_actual_parameters_226.ttcn | 34 + .../Sem_050402_actual_parameters_227.ttcn | 41 + ...4_parametrization_incompatibility_001.ttcn | 61 + ...yn_0504_forbidden_parametrization_001.ttcn | 22 + ...yn_0504_forbidden_parametrization_002.ttcn | 22 + .../NegSem_0505_cyclic_definitions_001.ttcn | 22 + .../NegSem_0505_cyclic_definitions_002.ttcn | 35 + .../Sem_0505_cyclic_definitions_001.ttcn | 34 + .../Sem_0505_cyclic_definitions_002.ttcn | 36 + .../Sem_0505_cyclic_definitions_003.ttcn | 57 + .../Sem_0505_cyclic_definitions_004.ttcn | 52 + .../05_toplevel/NegSyn_05_TopLevel_001.ttcn | 12 + .../NegSyn_060100_SimpleBasicTypes_001.ttcn | 9 + .../NegSyn_060100_SimpleBasicTypes_002.ttcn | 9 + .../NegSyn_060100_SimpleBasicTypes_003.ttcn | 9 + .../NegSyn_060100_SimpleBasicTypes_004.ttcn | 9 + .../NegSyn_060100_SimpleBasicTypes_005.ttcn | 9 + .../NegSyn_060100_SimpleBasicTypes_006.ttcn | 9 + .../Sem_060100_SimpleBasicTypes_001.ttcn | 25 + .../Sem_060100_SimpleBasicTypes_002.ttcn | 25 + .../Sem_060100_SimpleBasicTypes_003.ttcn | 25 + .../Sem_060100_SimpleBasicTypes_004.ttcn | 25 + .../Sem_060100_SimpleBasicTypes_005.ttcn | 25 + .../Syn_060100_SimpleBasicTypes_001.ttcn | 11 + .../Syn_060100_SimpleBasicTypes_002.ttcn | 10 + .../Syn_060100_SimpleBasicTypes_003.ttcn | 13 + .../Syn_060100_SimpleBasicTypes_004.ttcn | 12 + .../Syn_060100_SimpleBasicTypes_005.ttcn | 10 + .../Syn_060100_SimpleBasicTypes_006.ttcn | 13 + ...Sem_06010101_AccessStringElements_001.ttcn | 32 + ...Sem_06010101_AccessStringElements_002.ttcn | 32 + ...Syn_06010101_AccessStringElements_001.ttcn | 26 + ...Syn_06010101_AccessStringElements_002.ttcn | 26 + ...Sem_06010101_AccessStringElements_001.ttcn | 25 + ...Sem_06010101_AccessStringElements_002.ttcn | 25 + ...Sem_06010101_AccessStringElements_003.ttcn | 25 + ...Sem_06010101_AccessStringElements_004.ttcn | 29 + ...Sem_06010101_AccessStringElements_005.ttcn | 29 + ...Sem_06010101_AccessStringElements_006.ttcn | 26 + ...Sem_06010101_AccessStringElements_007.ttcn | 25 + ...Sem_06010101_AccessStringElements_008.ttcn | 25 + ...Sem_06010101_AccessStringElements_009.ttcn | 26 + ...Sem_06010101_AccessStringElements_010.ttcn | 25 + .../NegSyn_060101_TopLevel_001.ttcn | 9 + .../NegSyn_060101_TopLevel_002.ttcn | 9 + .../NegSyn_060101_TopLevel_003.ttcn | 9 + .../NegSyn_060101_TopLevel_004.ttcn | 9 + .../NegSyn_060101_TopLevel_005.ttcn | 9 + .../NegSyn_060101_TopLevel_006.ttcn | 9 + .../NegSyn_060101_TopLevel_007.ttcn | 9 + .../NegSyn_060101_TopLevel_008.ttcn | 9 + .../NegSyn_060101_TopLevel_009.ttcn | 9 + .../NegSyn_060101_TopLevel_010.ttcn | 9 + .../Sem_060101_TopLevel_001.ttcn | 25 + .../Sem_060101_TopLevel_002.ttcn | 25 + .../Sem_060101_TopLevel_003.ttcn | 25 + .../Sem_060101_TopLevel_004.ttcn | 32 + .../Sem_060101_TopLevel_005.ttcn | 25 + .../Sem_060101_TopLevel_006.ttcn | 25 + .../Sem_060101_TopLevel_007.ttcn | 42 + .../Sem_060101_TopLevel_008.ttcn | 34 + .../Sem_060101_TopLevel_009.ttcn | 34 + .../Sem_060101_TopLevel_010.ttcn | 34 + .../Sem_060101_TopLevel_011.ttcn | 36 + .../Sem_060101_TopLevel_012.ttcn | 34 + .../Sem_060101_TopLevel_013.ttcn | 35 + .../Sem_060101_TopLevel_014.ttcn | 26 + .../Sem_060101_TopLevel_015.ttcn | 27 + .../Syn_060101_TopLevel_001.ttcn | 13 + .../Syn_060101_TopLevel_002.ttcn | 13 + .../Syn_060101_TopLevel_003.ttcn | 13 + .../06010201_lists_of_values/NOTES | 2 + .../NegSem_06010201_ListOfValues_001.ttcn | 20 + .../NegSem_06010201_ListOfValues_002.ttcn | 20 + .../NegSem_06010201_ListOfValues_003.ttcn | 20 + .../NegSem_06010201_ListOfValues_004.ttcn | 20 + .../NegSem_06010201_ListOfValues_005.ttcn | 20 + .../NegSem_06010201_ListOfValues_006.ttcn | 20 + .../Sem_06010201_ListOfValues_001.ttcn | 25 + .../06010202_lists_of_types/NOTES | 1 + .../NegSem_06010202_ListOfTypes_001.ttcn | 22 + .../NegSem_06010202_ListOfTypes_002.ttcn | 23 + .../NegSem_06010202_ListOfTypes_003.ttcn | 23 + .../NegSem_06010202_ListOfTypes_004.ttcn | 23 + .../NegSem_06010202_ListOfTypes_005.ttcn | 22 + .../NegSem_06010202_ListOfTypes_006.ttcn | 23 + .../NegSem_06010202_ListOfTypes_007.ttcn | 23 + .../NegSem_06010202_ListOfTypes_008.ttcn | 22 + .../NegSem_06010202_ListOfTypes_009.ttcn | 23 + .../Sem_06010202_ListOfTypes_001.ttcn | 24 + .../Sem_06010202_ListOfTypes_002.ttcn | 24 + .../Sem_06010202_ListOfTypes_003.ttcn | 24 + .../Sem_06010202_ListOfTypes_004.ttcn | 24 + .../Sem_06010202_ListOfTypes_005.ttcn | 24 + .../Sem_06010202_ListOfTypes_006.ttcn | 24 + .../Sem_06010202_ListOfTypes_007.ttcn | 24 + .../Sem_06010202_ListOfTypes_008.ttcn | 22 + .../Sem_06010202_ListOfTypes_009.ttcn | 25 + .../NegSem_06010203_Ranges_001.ttcn | 20 + .../NegSem_06010203_Ranges_002.ttcn | 20 + .../NegSem_06010203_Ranges_003.ttcn | 21 + .../NegSem_06010203_Ranges_004.ttcn | 20 + .../NegSem_06010203_Ranges_005.ttcn | 20 + .../NegSem_06010203_Ranges_006.ttcn | 23 + .../NegSem_06010203_Ranges_007.ttcn | 21 + .../NegSem_06010203_Ranges_008.ttcn | 21 + .../NegSem_06010203_Ranges_009.ttcn | 21 + .../NegSem_06010203_Ranges_010.ttcn | 20 + .../NegSem_06010203_Ranges_011.ttcn | 20 + .../NegSem_06010203_Ranges_012.ttcn | 20 + .../NegSem_06010203_Ranges_013.ttcn | 21 + .../NegSem_06010203_Ranges_014.ttcn | 21 + .../NegSem_06010203_Ranges_015.ttcn | 21 + .../NegSem_06010203_Ranges_016.ttcn | 21 + .../NegSem_06010203_Ranges_017.ttcn | 21 + .../Sem_06010203_Ranges_001.ttcn | 23 + .../Sem_06010203_Ranges_002.ttcn | 28 + .../Sem_06010203_Ranges_003.ttcn | 28 + .../Sem_06010203_Ranges_004.ttcn | 24 + .../Sem_06010203_Ranges_005.ttcn | 26 + .../Sem_06010203_Ranges_006.ttcn | 25 + .../Sem_06010203_Ranges_007.ttcn | 21 + .../Sem_06010203_Ranges_008.ttcn | 25 + .../06010204_string_length_restrictions/NOTES | 1 + ...Sem_06010204_StringLenghtRestrict_001.ttcn | 20 + ...Sem_06010204_StringLenghtRestrict_002.ttcn | 20 + ...Sem_06010204_StringLenghtRestrict_003.ttcn | 21 + ...Sem_06010204_StringLenghtRestrict_004.ttcn | 21 + ...Sem_06010204_StringLenghtRestrict_005.ttcn | 21 + ...Sem_06010204_StringLenghtRestrict_006.ttcn | 21 + ...Sem_06010204_StringLenghtRestrict_007.ttcn | 21 + ...Sem_06010204_StringLenghtRestrict_008.ttcn | 21 + ...Syn_06010204_StringLenghtRestrict_001.ttcn | 10 + ...Syn_06010204_StringLenghtRestrict_002.ttcn | 10 + ...Sem_06010204_StringLenghtRestrict_001.ttcn | 28 + ...Sem_06010204_StringLenghtRestrict_002.ttcn | 28 + ...Sem_06010204_StringLenghtRestrict_003.ttcn | 28 + ...Sem_06010204_StringLenghtRestrict_004.ttcn | 28 + .../NOTES | 1 + .../NegSem_06010205_StringPattern_001.ttcn | 20 + .../NegSyn_06010205_StringPattern_001.ttcn | 21 + .../NegSyn_06010205_StringPattern_002.ttcn | 21 + .../Sem_06010205_StringPattern_001.ttcn | 25 + .../Sem_06010205_StringPattern_002.ttcn | 25 + .../Sem_06010205_StringPattern_003.ttcn | 33 + .../NegSem_0601020601_MixingSubtype_001.ttcn | 20 + .../NegSem_0601020601_MixingSubtype_002.ttcn | 20 + .../Sem_0601020601_MixingSubtype_001.ttcn | 24 + .../Sem_0601020601_MixingSubtype_002.ttcn | 25 + .../NOTES | 1 + .../NegSem_0601020602_StringMixing_001.ttcn | 20 + .../NegSem_0601020602_StringMixing_002.ttcn | 20 + .../NegSem_0601020602_StringMixing_003.ttcn | 20 + .../NegSem_0601020602_StringMixing_004.ttcn | 20 + .../NegSem_0601020602_StringMixing_005.ttcn | 20 + .../NegSem_0601020602_StringMixing_006.ttcn | 20 + .../Sem_0601020602_StringMixing_001.ttcn | 25 + .../Sem_0601020602_StringMixing_002.ttcn | 24 + .../Sem_0601020602_StringMixing_003.ttcn | 23 + .../Sem_0601020602_StringMixing_004.ttcn | 23 + .../Sem_0601020602_StringMixing_005.ttcn | 23 + .../Sem_0601020602_StringMixing_006.ttcn | 23 + .../Sem_0601020602_StringMixing_007.ttcn | 31 + ..._06020101_ReferencingRecordFields_001.ttcn | 31 + ..._06020101_ReferencingRecordFields_002.ttcn | 35 + ..._06020101_ReferencingRecordFields_003.ttcn | 38 + ..._06020101_ReferencingRecordFields_004.ttcn | 39 + ..._06020101_ReferencingRecordFields_001.ttcn | 38 + ..._06020101_ReferencingRecordFields_002.ttcn | 38 + ..._06020101_ReferencingRecordFields_003.ttcn | 36 + ..._06020101_ReferencingRecordFields_004.ttcn | 37 + ..._06020101_ReferencingRecordFields_005.ttcn | 38 + ..._06020101_ReferencingRecordFields_006.ttcn | 40 + ..._06020101_ReferencingRecordFields_007.ttcn | 43 + ..._06020101_ReferencingRecordFields_008.ttcn | 49 + ..._06020101_ReferencingRecordFields_009.ttcn | 49 + ..._06020101_ReferencingRecordFields_010.ttcn | 48 + ..._06020101_ReferencingRecordFields_011.ttcn | 57 + ..._06020101_ReferencingRecordFields_012.ttcn | 56 + ..._06020101_ReferencingRecordFields_013.ttcn | 52 + ..._06020101_ReferencingRecordFields_014.ttcn | 52 + ..._06020101_ReferencingRecordFields_015.ttcn | 51 + ..._06020101_ReferencingRecordFields_016.ttcn | 60 + ..._06020101_ReferencingRecordFields_017.ttcn | 59 + .../NegSem_060201_RecordTypeValues_001.ttcn | 36 + .../NegSyn_060201_RecordTypeValues_001.ttcn | 18 + .../NegSyn_060201_RecordTypeValues_002.ttcn | 18 + .../Sem_060201_RecordTypeValues_001.ttcn | 39 + .../Sem_060201_RecordTypeValues_002.ttcn | 40 + .../Sem_060201_RecordTypeValues_003.ttcn | 41 + .../Sem_060201_RecordTypeValues_004.ttcn | 37 + .../Syn_060201_RecordTypeValues_001.ttcn | 19 + .../Syn_060201_RecordTypeValues_002.ttcn | 10 + .../NegSem_060202_SetTypeValues_001.ttcn | 31 + .../NegSem_060202_SetTypeValues_002.ttcn | 36 + .../NegSyn_060202_SetTypeValues_001.ttcn | 18 + .../NegSyn_060202_SetTypeValues_002.ttcn | 18 + .../Sem_060202_SetTypeValues_001.ttcn | 38 + .../Sem_060202_SetTypeValues_002.ttcn | 38 + .../Sem_060202_SetTypeValues_003.ttcn | 36 + .../Sem_060202_SetTypeValues_004.ttcn | 37 + .../Sem_060202_SetTypeValues_005.ttcn | 39 + .../Sem_060202_SetTypeValues_006.ttcn | 40 + .../Sem_060202_SetTypeValues_007.ttcn | 41 + .../Sem_060202_SetTypeValues_008.ttcn | 37 + .../Syn_060202_SetTypeValues_001.ttcn | 19 + .../Syn_060202_SetTypeValues_002.ttcn | 10 + ..._records_and_sets_of_single_types_001.ttcn | 25 + ..._records_and_sets_of_single_types_002.ttcn | 25 + ..._records_and_sets_of_single_types_003.ttcn | 29 + ..._records_and_sets_of_single_types_004.ttcn | 29 + ..._records_and_sets_of_single_types_005.ttcn | 29 + ..._records_and_sets_of_single_types_006.ttcn | 29 + ..._records_and_sets_of_single_types_007.ttcn | 29 + ..._records_and_sets_of_single_types_008.ttcn | 29 + ..._records_and_sets_of_single_types_009.ttcn | 29 + ..._records_and_sets_of_single_types_010.ttcn | 29 + ..._records_and_sets_of_single_types_011.ttcn | 33 + ..._records_and_sets_of_single_types_012.ttcn | 33 + ..._records_and_sets_of_single_types_013.ttcn | 30 + ..._records_and_sets_of_single_types_014.ttcn | 30 + ..._records_and_sets_of_single_types_015.ttcn | 34 + ..._records_and_sets_of_single_types_016.ttcn | 35 + ..._records_and_sets_of_single_types_017.ttcn | 36 + ..._records_and_sets_of_single_types_018.ttcn | 36 + ..._records_and_sets_of_single_types_019.ttcn | 37 + ..._records_and_sets_of_single_types_020.ttcn | 36 + ..._records_and_sets_of_single_types_021.ttcn | 37 + ..._records_and_sets_of_single_types_022.ttcn | 36 + ..._records_and_sets_of_single_types_023.ttcn | 37 + ..._records_and_sets_of_single_types_001.ttcn | 28 + ..._records_and_sets_of_single_types_001.ttcn | 32 + ..._records_and_sets_of_single_types_002.ttcn | 42 + ..._records_and_sets_of_single_types_003.ttcn | 42 + ..._records_and_sets_of_single_types_004.ttcn | 39 + ..._records_and_sets_of_single_types_005.ttcn | 39 + ..._records_and_sets_of_single_types_006.ttcn | 42 + ..._records_and_sets_of_single_types_007.ttcn | 42 + ..._records_and_sets_of_single_types_008.ttcn | 35 + ..._records_and_sets_of_single_types_009.ttcn | 35 + ..._records_and_sets_of_single_types_010.ttcn | 44 + ..._records_and_sets_of_single_types_011.ttcn | 44 + ..._records_and_sets_of_single_types_012.ttcn | 35 + ..._records_and_sets_of_single_types_013.ttcn | 35 + ..._records_and_sets_of_single_types_014.ttcn | 36 + ..._records_and_sets_of_single_types_015.ttcn | 36 + ..._records_and_sets_of_single_types_016.ttcn | 34 + ..._records_and_sets_of_single_types_017.ttcn | 34 + ..._records_and_sets_of_single_types_019.ttcn | 39 + ..._records_and_sets_of_single_types_020.ttcn | 39 + ..._records_and_sets_of_single_types_021.ttcn | 38 + ..._records_and_sets_of_single_types_022.ttcn | 38 + ..._records_and_sets_of_single_types_023.ttcn | 35 + ..._records_and_sets_of_single_types_024.ttcn | 36 + ..._records_and_sets_of_single_types_025.ttcn | 35 + ..._records_and_sets_of_single_types_026.ttcn | 36 + ..._records_and_sets_of_single_types_027.ttcn | 36 + ..._records_and_sets_of_single_types_028.ttcn | 37 + ..._records_and_sets_of_single_types_029.ttcn | 36 + ..._records_and_sets_of_single_types_030.ttcn | 37 + ..._records_and_sets_of_single_types_031.ttcn | 35 + ..._records_and_sets_of_single_types_032.ttcn | 36 + ..._records_and_sets_of_single_types_033.ttcn | 35 + ..._records_and_sets_of_single_types_034.ttcn | 36 + ..._records_and_sets_of_single_types_035.ttcn | 36 + ..._records_and_sets_of_single_types_036.ttcn | 37 + ..._records_and_sets_of_single_types_037.ttcn | 36 + ..._records_and_sets_of_single_types_038.ttcn | 37 + ...060204_enumerated_type_and_values_001.ttcn | 18 + ...060204_enumerated_type_and_values_002.ttcn | 17 + ...060204_enumerated_type_and_values_003.ttcn | 36 + ...060204_enumerated_type_and_values_004.ttcn | 37 + ...060204_enumerated_type_and_values_005.ttcn | 32 + ...060204_enumerated_type_and_values_006.ttcn | 38 + ...060204_enumerated_type_and_values_007.ttcn | 40 + ...060204_enumerated_type_and_values_008.ttcn | 38 + ...060204_enumerated_type_and_values_009.ttcn | 37 + ...060204_enumerated_type_and_values_010.ttcn | 38 + ...060204_enumerated_type_and_values_011.ttcn | 38 + ...060204_enumerated_type_and_values_013.ttcn | 33 + ...060204_enumerated_type_and_values_001.ttcn | 18 + ...060204_enumerated_type_and_values_002.ttcn | 17 + ...060204_enumerated_type_and_values_004.ttcn | 16 + ...060204_enumerated_type_and_values_001.ttcn | 22 + ...060204_enumerated_type_and_values_002.ttcn | 41 + ...060204_enumerated_type_and_values_003.ttcn | 41 + ...060204_enumerated_type_and_values_004.ttcn | 41 + ...060204_enumerated_type_and_values_005.ttcn | 33 + ...060204_enumerated_type_and_values_006.ttcn | 37 + ...060204_enumerated_type_and_values_007.ttcn | 37 + ...060204_enumerated_type_and_values_001.ttcn | 18 + ...060204_enumerated_type_and_values_002.ttcn | 17 + ..._referencing_fields_of_union_type_001.ttcn | 34 + ..._referencing_fields_of_union_type_002.ttcn | 35 + ..._referencing_fields_of_union_type_003.ttcn | 29 + ..._referencing_fields_of_union_type_004.ttcn | 30 + ..._referencing_fields_of_union_type_005.ttcn | 34 + ..._referencing_fields_of_union_type_006.ttcn | 32 + ..._referencing_fields_of_union_type_007.ttcn | 38 + ..._referencing_fields_of_union_type_008.ttcn | 39 + ..._referencing_fields_of_union_type_001.ttcn | 34 + ..._referencing_fields_of_union_type_002.ttcn | 35 + ..._referencing_fields_of_union_type_003.ttcn | 35 + ..._referencing_fields_of_union_type_004.ttcn | 37 + ..._referencing_fields_of_union_type_005.ttcn | 42 + ..._referencing_fields_of_union_type_006.ttcn | 50 + ..._referencing_fields_of_union_type_007.ttcn | 39 + ..._referencing_fields_of_union_type_008.ttcn | 41 + .../NegSyn_06020502_option_and_union_001.ttcn | 17 + ...d_type_definition_for_field_types_001.ttcn | 27 + .../NegSem_060205_top_level_001.ttcn | 30 + .../NegSem_060205_top_level_002.ttcn | 31 + .../NegSem_060205_top_level_003.ttcn | 29 + .../NegSem_060205_top_level_004.ttcn | 29 + .../NegSem_060205_top_level_005.ttcn | 28 + .../NegSyn_060205_top_level_001.ttcn | 20 + .../Sem_060205_top_level_001.ttcn | 30 + .../Syn_060205_top_level_001.ttcn | 22 + .../Syn_060205_top_level_002.ttcn | 18 + .../NegSem_060206_anytype_001.ttcn | 35 + .../NegSem_060206_anytype_002.ttcn | 33 + .../NegSyn_060206_anytype_001.ttcn | 38 + .../NegSyn_060206_anytype_002.ttcn | 35 + .../NegSyn_060206_anytype_003.ttcn | 35 + .../Sem_060206_anytype_001.ttcn | 36 + .../Sem_060206_anytype_002.ttcn | 34 + .../Sem_060206_anytype_003.ttcn | 37 + .../Sem_060206_anytype_004.ttcn | 35 + .../Sem_060206_anytype_005.ttcn | 32 + .../Sem_060206_anytype_006.ttcn | 37 + .../Sem_060206_anytype_007.ttcn | 34 + .../Sem_060206_anytype_008.ttcn | 35 + .../Sem_060206_anytype_009.ttcn | 45 + .../Sem_060206_anytype_010.ttcn | 35 + .../Sem_060206_anytype_011.ttcn | 40 + .../Sem_060206_anytype_012.ttcn | 48 + .../Sem_060206_anytype_013.ttcn | 37 + .../Sem_060206_anytype_014.ttcn | 43 + .../Sem_060206_anytype_015.ttcn | 43 + .../Sem_060206_anytype_016.ttcn | 45 + .../Sem_060206_anytype_017.ttcn | 38 + .../Sem_060206_anytype_018.ttcn | 43 + .../Sem_060206_anytype_019.ttcn | 45 + .../NegSem_060207_arrays_001.ttcn | 24 + .../NegSem_060207_arrays_002.ttcn | 24 + .../NegSem_060207_arrays_003.ttcn | 31 + .../NegSem_060207_arrays_004.ttcn | 31 + .../NegSem_060207_arrays_005.ttcn | 37 + .../NegSem_060207_arrays_006.ttcn | 37 + .../NegSem_060207_arrays_007.ttcn | 30 + .../NegSem_060207_arrays_008.ttcn | 30 + .../NegSem_060207_arrays_009.ttcn | 32 + .../NegSem_060207_arrays_010.ttcn | 35 + .../NegSem_060207_arrays_011.ttcn | 36 + .../NegSem_060207_arrays_012.ttcn | 35 + .../NegSem_060207_arrays_013.ttcn | 34 + .../NegSem_060207_arrays_014.ttcn | 35 + .../NegSem_060207_arrays_015.ttcn | 27 + .../NegSem_060207_arrays_016.ttcn | 27 + .../NegSem_060207_arrays_017.ttcn | 27 + .../NegSem_060207_arrays_018.ttcn | 28 + .../NegSem_060207_arrays_019.ttcn | 27 + .../NegSem_060207_arrays_020.ttcn | 30 + .../NegSem_060207_arrays_021.ttcn | 32 + .../NegSem_060207_arrays_022.ttcn | 28 + .../NegSem_060207_arrays_023.ttcn | 28 + .../NegSem_060207_arrays_024.ttcn | 27 + .../NegSem_060207_arrays_025.ttcn | 27 + .../NegSem_060207_arrays_026.ttcn | 35 + .../NegSem_060207_arrays_027.ttcn | 34 + .../NegSem_060207_arrays_028.ttcn | 34 + .../NegSyn_060207_arrays_001.ttcn | 25 + .../NegSyn_060207_arrays_002.ttcn | 25 + .../NegSyn_060207_arrays_003.ttcn | 26 + .../NegSyn_060207_arrays_004.ttcn | 21 + .../NegSyn_060207_arrays_005.ttcn | 15 + .../060207_arrays/Sem_060207_arrays_001.ttcn | 35 + .../060207_arrays/Sem_060207_arrays_002.ttcn | 43 + .../060207_arrays/Sem_060207_arrays_003.ttcn | 38 + .../060207_arrays/Sem_060207_arrays_004.ttcn | 42 + .../060207_arrays/Sem_060207_arrays_005.ttcn | 34 + .../060207_arrays/Sem_060207_arrays_006.ttcn | 36 + .../060207_arrays/Sem_060207_arrays_007.ttcn | 36 + .../060207_arrays/Sem_060207_arrays_008.ttcn | 35 + .../060207_arrays/Sem_060207_arrays_009.ttcn | 34 + .../060207_arrays/Sem_060207_arrays_010.ttcn | 36 + .../060207_arrays/Sem_060207_arrays_011.ttcn | 41 + .../060207_arrays/Sem_060207_arrays_012.ttcn | 39 + .../060207_arrays/Sem_060207_arrays_013.ttcn | 40 + .../060207_arrays/Sem_060207_arrays_014.ttcn | 47 + .../060207_arrays/Sem_060207_arrays_015.ttcn | 27 + .../060207_arrays/Sem_060207_arrays_016.ttcn | 28 + .../060207_arrays/Sem_060207_arrays_017.ttcn | 30 + .../060207_arrays/Sem_060207_arrays_018.ttcn | 32 + .../060207_arrays/Sem_060207_arrays_019.ttcn | 30 + .../060207_arrays/Sem_060207_arrays_020.ttcn | 28 + .../060207_arrays/Sem_060207_arrays_021.ttcn | 29 + .../060207_arrays/Sem_060207_arrays_022.ttcn | 31 + .../060207_arrays/Sem_060207_arrays_023.ttcn | 32 + .../060207_arrays/Syn_060207_arrays_001.ttcn | 20 + .../060207_arrays/Syn_060207_arrays_002.ttcn | 15 + .../060207_arrays/Syn_060207_arrays_003.ttcn | 20 + .../060207_arrays/Syn_060207_arrays_004.ttcn | 20 + .../060207_arrays/Syn_060207_arrays_005.ttcn | 20 + .../060207_arrays/Syn_060207_arrays_006.ttcn | 21 + .../060207_arrays/Syn_060207_arrays_007.ttcn | 21 + .../060208_default_type/NOTES | 25 + .../Sem_060208_default_type_001.ttcn | 32 + .../Sem_060208_default_type_002.ttcn | 26 + .../Sem_060208_default_type_003.ttcn | 32 + .../060209_comm_port_types/NOTES | 5 + ...Sem_060209_CommunicationPortTypes_001.ttcn | 45 + ...Sem_060209_CommunicationPortTypes_002.ttcn | 45 + ...Sem_060209_CommunicationPortTypes_003.ttcn | 45 + ...Sem_060209_CommunicationPortTypes_004.ttcn | 35 + ...Sem_060209_CommunicationPortTypes_005.ttcn | 35 + ...Sem_060209_CommunicationPortTypes_006.ttcn | 51 + ...Sem_060209_CommunicationPortTypes_007.ttcn | 51 + ...Sem_060209_CommunicationPortTypes_008.ttcn | 51 + ...Sem_060209_CommunicationPortTypes_004.ttcn | 74 + ...Sem_060209_CommunicationPortTypes_005.ttcn | 241 + ...Syn_060209_CommunicationPortTypes_001.ttcn | 27 + ...Syn_060209_CommunicationPortTypes_002.ttcn | 17 + ...Syn_060209_CommunicationPortTypes_003.ttcn | 25 + ...Syn_060209_CommunicationPortTypes_004.ttcn | 19 + ...Syn_060209_CommunicationPortTypes_005.ttcn | 19 + ...Syn_060209_CommunicationPortTypes_006.ttcn | 19 + ...Syn_060209_CommunicationPortTypes_007.ttcn | 32 + ...Syn_060209_CommunicationPortTypes_008.ttcn | 21 + ...Syn_060209_CommunicationPortTypes_009.ttcn | 21 + ...Syn_060209_CommunicationPortTypes_010.ttcn | 36 + ...gSyn_060210_ReuseofComponentTypes_001.ttcn | 42 + ...gSyn_060210_ReuseofComponentTypes_002.ttcn | 44 + ...gSyn_060210_ReuseofComponentTypes_003.ttcn | 41 + .../Sem_060210_ReuseofComponentTypes_001.ttcn | 50 + .../Sem_060210_ReuseofComponentTypes_002.ttcn | 86 + .../Sem_060210_ReuseofComponentTypes_003.ttcn | 90 + ...60212_AddressingEntitiesInsideSut_001.ttcn | 37 + ...60212_AddressingEntitiesInsideSut_002.ttcn | 56 + ...60212_AddressingEntitiesInsideSut_003.ttcn | 60 + ...60212_AddressingEntitiesInsideSut_004.ttcn | 55 + ...60212_AddressingEntitiesInsideSut_001.ttcn | 23 + ...60212_AddressingEntitiesInsideSut_002.ttcn | 45 + .../NegSem_06021301_LengthSubtyping_001.ttcn | 13 + .../NegSem_06021301_LengthSubtyping_002.ttcn | 13 + .../NegSem_06021301_LengthSubtyping_003.ttcn | 12 + .../NegSem_06021301_LengthSubtyping_004.ttcn | 12 + .../NegSem_06021301_LengthSubtyping_005.ttcn | 15 + .../NegSem_06021301_LengthSubtyping_006.ttcn | 17 + .../Syn_06021301_LengthSubtyping_001.ttcn | 14 + .../Syn_06021301_LengthSubtyping_002.ttcn | 14 + .../NegSem_06021302_ListSubtyping_001.ttcn | 24 + .../NegSem_06021302_ListSubtyping_002.ttcn | 24 + .../Sem_06021302_ListSubtyping_001.ttcn | 40 + .../Sem_06021302_ListSubtyping_002.ttcn | 40 + .../Sem_06021302_ListSubtyping_003.ttcn | 41 + .../NegSem_0602_TopLevel_001.ttcn | 27 + .../NegSem_0602_TopLevel_002.ttcn | 34 + .../NegSem_0602_TopLevel_003.ttcn | 34 + .../NegSem_0602_TopLevel_004.ttcn | 32 + .../NegSyn_0602_TopLevel_001.ttcn | 13 + .../NegSyn_0602_TopLevel_002.ttcn | 14 + .../NegSyn_0602_TopLevel_003.ttcn | 18 + .../NegSyn_0602_TopLevel_004.ttcn | 23 + .../NegSyn_0602_TopLevel_005.ttcn | 37 + .../NegSyn_0602_TopLevel_006.ttcn | 41 + .../NegSyn_0602_TopLevel_007.ttcn | 37 + .../0602_toplevel/Sem_0602_TopLevel_001.ttcn | 37 + .../0602_toplevel/Sem_0602_TopLevel_002.ttcn | 33 + .../0602_toplevel/Sem_0602_TopLevel_003.ttcn | 39 + .../0602_toplevel/Sem_0602_TopLevel_004.ttcn | 33 + .../0602_toplevel/Sem_0602_TopLevel_005.ttcn | 35 + .../0602_toplevel/Sem_0602_TopLevel_006.ttcn | 32 + .../0602_toplevel/Sem_0602_TopLevel_007.ttcn | 33 + .../0602_toplevel/Sem_0602_TopLevel_008.ttcn | 29 + .../0602_toplevel/Sem_0602_TopLevel_009.ttcn | 32 + .../0602_toplevel/Sem_0602_TopLevel_010.ttcn | 29 + .../0602_toplevel/Sem_0602_TopLevel_011.ttcn | 29 + .../0602_toplevel/Sem_0602_TopLevel_012.ttcn | 32 + .../0602_toplevel/Sem_0602_TopLevel_013.ttcn | 32 + .../0602_toplevel/Sem_0602_TopLevel_014.ttcn | 34 + .../0602_toplevel/Syn_0602_TopLevel_001.ttcn | 13 + .../0602_toplevel/Syn_0602_TopLevel_002.ttcn | 14 + .../0602_toplevel/Syn_0602_TopLevel_003.ttcn | 18 + .../0602_toplevel/Syn_0602_TopLevel_004.ttcn | 14 + .../0602_toplevel/Syn_0602_TopLevel_005.ttcn | 20 + ...egSem_060301_non_structured_types_001.ttcn | 28 + ...egSem_060301_non_structured_types_002.ttcn | 28 + ...egSem_060301_non_structured_types_003.ttcn | 27 + ...egSem_060301_non_structured_types_004.ttcn | 28 + ...egSem_060301_non_structured_types_005.ttcn | 28 + ...egSem_060301_non_structured_types_006.ttcn | 27 + ...egSem_060301_non_structured_types_007.ttcn | 27 + ...egSem_060301_non_structured_types_008.ttcn | 27 + ...egSem_060301_non_structured_types_009.ttcn | 27 + ...egSem_060301_non_structured_types_010.ttcn | 27 + ...egSem_060301_non_structured_types_011.ttcn | 27 + ...egSem_060301_non_structured_types_012.ttcn | 26 + .../Sem_060301_non_structured_types_001.ttcn | 43 + .../Sem_060301_non_structured_types_002.ttcn | 74 + .../Sem_060301_non_structured_types_003.ttcn | 45 + .../Sem_060301_non_structured_types_004.ttcn | 42 + .../NegSem_060302_structured_types_001.ttcn | 31 + .../NegSem_060302_structured_types_002.ttcn | 39 + .../NegSem_060302_structured_types_003.ttcn | 39 + .../NegSem_060302_structured_types_004.ttcn | 40 + .../NegSem_060302_structured_types_005.ttcn | 41 + .../NegSem_060302_structured_types_006.ttcn | 32 + .../NegSem_060302_structured_types_007.ttcn | 32 + .../NegSem_060302_structured_types_008.ttcn | 42 + .../NegSem_060302_structured_types_009.ttcn | 41 + .../NegSem_060302_structured_types_010.ttcn | 42 + .../NegSem_060302_structured_types_011.ttcn | 49 + .../NegSem_060302_structured_types_012.ttcn | 57 + .../NegSem_060302_structured_types_013.ttcn | 57 + .../NegSem_060302_structured_types_014.ttcn | 36 + .../NegSem_060302_structured_types_015.ttcn | 36 + .../NegSem_060302_structured_types_016.ttcn | 36 + .../NegSem_060302_structured_types_017.ttcn | 36 + .../NegSem_060302_structured_types_018.ttcn | 32 + .../NegSem_060302_structured_types_019.ttcn | 64 + .../Sem_060302_structured_types_001.ttcn | 97 + .../Sem_060302_structured_types_002.ttcn | 60 + .../Sem_060302_structured_types_003.ttcn | 51 + .../Sem_060302_structured_types_004.ttcn | 50 + .../Sem_060302_structured_types_005.ttcn | 46 + .../Sem_060302_structured_types_006.ttcn | 62 + .../NegSem_060303_component_types_001.ttcn | 43 + .../NegSem_060303_component_types_002.ttcn | 42 + .../Sem_060303_component_types_001.ttcn | 45 + .../Sem_060303_component_types_002.ttcn | 44 + ...ility_of_communication_operations_001.ttcn | 36 + ...ility_of_communication_operations_002.ttcn | 40 + ...ility_of_communication_operations_003.ttcn | 48 + ...ility_of_communication_operations_004.ttcn | 48 + ...ility_of_communication_operations_005.ttcn | 42 + ...05_compatibility_of_anytype_types_001.ttcn | 52 + ...05_compatibility_of_anytype_types_001.ttcn | 43 + ...05_compatibility_of_anytype_types_002.ttcn | 43 + .../0604_type_synonym/NOTES | 1 + .../070101_arithmetic_operators/NOTES | 2 + ...NegSem_070101_ArithmeticOperators_001.ttcn | 27 + ...NegSem_070101_ArithmeticOperators_002.ttcn | 26 + ...NegSem_070101_ArithmeticOperators_003.ttcn | 25 + ...NegSem_070101_ArithmeticOperators_004.ttcn | 25 + ...NegSem_070101_ArithmeticOperators_008.ttcn | 26 + ...NegSem_070101_ArithmeticOperators_009.ttcn | 26 + ...NegSem_070101_ArithmeticOperators_010.ttcn | 27 + .../Sem_070101_ArithmeticOperators_001.ttcn | 29 + .../Sem_070101_ArithmeticOperators_002.ttcn | 31 + .../Sem_070101_ArithmeticOperators_003.ttcn | 29 + .../Sem_070101_ArithmeticOperators_004.ttcn | 29 + .../Sem_070101_ArithmeticOperators_005.ttcn | 30 + .../Sem_070101_ArithmeticOperators_006.ttcn | 29 + .../Sem_070101_ArithmeticOperators_007.ttcn | 31 + .../Sem_070101_ArithmeticOperators_008.ttcn | 29 + .../Sem_070101_ArithmeticOperators_009.ttcn | 30 + .../Sem_070101_ArithmeticOperators_010.ttcn | 28 + .../Sem_070101_ArithmeticOperators_011.ttcn | 28 + .../Sem_070101_ArithmeticOperators_012.ttcn | 28 + .../Sem_070101_ArithmeticOperators_013.ttcn | 28 + .../Sem_070101_ArithmeticOperators_014.ttcn | 28 + .../Sem_070101_ArithmeticOperators_015.ttcn | 28 + .../Sem_070101_ArithmeticOperators_016.ttcn | 28 + .../Sem_070101_ArithmeticOperators_017.ttcn | 28 + .../Sem_070101_ArithmeticOperators_018.ttcn | 28 + .../Sem_070101_ArithmeticOperators_019.ttcn | 41 + .../Sem_070101_ArithmeticOperators_020.ttcn | 41 + .../Sem_070101_ArithmeticOperators_021.ttcn | 41 + .../Sem_070101_ArithmeticOperators_022.ttcn | 41 + .../Sem_070101_ArithmeticOperators_023.ttcn | 40 + .../Sem_070101_ArithmeticOperators_024.ttcn | 32 + .../Sem_070101_ArithmeticOperators_025.ttcn | 32 + .../Sem_070101_ArithmeticOperators_026.ttcn | 30 + .../Sem_070101_ArithmeticOperators_027.ttcn | 28 + .../Sem_070101_ArithmeticOperators_028.ttcn | 28 + .../Sem_070101_ArithmeticOperators_029.ttcn | 28 + .../Sem_070101_ArithmeticOperators_030.ttcn | 28 + .../Sem_070101_ArithmeticOperators_031.ttcn | 28 + .../Sem_070101_ArithmeticOperators_032.ttcn | 28 + .../Sem_070101_ArithmeticOperators_033.ttcn | 28 + .../Sem_070101_ArithmeticOperators_034.ttcn | 28 + .../Sem_070101_ArithmeticOperators_035.ttcn | 28 + .../Sem_070101_ArithmeticOperators_036.ttcn | 28 + .../Sem_070101_ArithmeticOperators_037.ttcn | 28 + .../Sem_070101_ArithmeticOperators_038.ttcn | 28 + .../Sem_070101_ArithmeticOperators_039.ttcn | 30 + .../Sem_070101_ArithmeticOperators_040.ttcn | 30 + .../Sem_070101_ArithmeticOperators_041.ttcn | 29 + .../Sem_070101_ArithmeticOperators_042.ttcn | 29 + .../Sem_070101_ArithmeticOperators_043.ttcn | 29 + .../Sem_070101_ArithmeticOperators_044.ttcn | 29 + .../Sem_070101_ArithmeticOperators_045.ttcn | 29 + .../Sem_070101_ArithmeticOperators_046.ttcn | 29 + .../Sem_070101_ArithmeticOperators_047.ttcn | 29 + .../Sem_070101_ArithmeticOperators_048.ttcn | 29 + .../Sem_070101_ArithmeticOperators_049.ttcn | 29 + .../Sem_070101_ArithmeticOperators_050.ttcn | 30 + .../Sem_070101_ArithmeticOperators_051.ttcn | 32 + .../Sem_070101_ArithmeticOperators_052.ttcn | 35 + .../Sem_070101_ArithmeticOperators_053.ttcn | 26 + .../Syn_070101_ArithmeticOperators_001.ttcn | 12 + .../Syn_070101_ArithmeticOperators_002.ttcn | 12 + .../Syn_070101_ArithmeticOperators_003.ttcn | 12 + .../Syn_070101_ArithmeticOperators_004.ttcn | 12 + .../Syn_070101_ArithmeticOperators_005.ttcn | 12 + .../Syn_070101_ArithmeticOperators_006.ttcn | 12 + .../Syn_070101_ArithmeticOperators_007.ttcn | 12 + .../Syn_070101_ArithmeticOperators_008.ttcn | 12 + .../Syn_070101_ArithmeticOperators_009.ttcn | 12 + .../Syn_070101_ArithmeticOperators_010.ttcn | 12 + .../Syn_070101_ArithmeticOperators_011.ttcn | 12 + .../Syn_070101_ArithmeticOperators_012.ttcn | 12 + .../Sem_070102_ListOperator_001.ttcn | 26 + .../Sem_070102_ListOperator_002.ttcn | 26 + .../Sem_070102_ListOperator_003.ttcn | 31 + .../Sem_070102_ListOperator_004.ttcn | 31 + .../Sem_070102_ListOperator_005.ttcn | 33 + .../Sem_070102_ListOperator_006.ttcn | 30 + .../070103_relational_operators/NOTES | 4 + ...NegSem_070103_RelationalOperators_001.ttcn | 33 + ...NegSem_070103_RelationalOperators_002.ttcn | 50 + ...NegSem_070103_RelationalOperators_003.ttcn | 51 + ...NegSem_070103_RelationalOperators_004.ttcn | 50 + ...NegSem_070103_RelationalOperators_005.ttcn | 32 + ...NegSem_070103_RelationalOperators_006.ttcn | 51 + ...NegSem_070103_RelationalOperators_007.ttcn | 51 + ...NegSem_070103_RelationalOperators_008.ttcn | 50 + ...NegSyn_070103_RelationalOperators_001.ttcn | 32 + ...NegSyn_070103_RelationalOperators_002.ttcn | 32 + ...NegSyn_070103_RelationalOperators_003.ttcn | 32 + ...NegSyn_070103_RelationalOperators_004.ttcn | 32 + .../Sem_070103_RelationalOperators_001.ttcn | 25 + .../Sem_070103_RelationalOperators_002.ttcn | 25 + .../Sem_070103_RelationalOperators_003.ttcn | 32 + .../Sem_070103_RelationalOperators_004.ttcn | 25 + .../Sem_070103_RelationalOperators_005.ttcn | 25 + .../Sem_070103_RelationalOperators_006.ttcn | 32 + .../Sem_070103_RelationalOperators_007.ttcn | 25 + .../Sem_070103_RelationalOperators_008.ttcn | 25 + .../Sem_070103_RelationalOperators_009.ttcn | 25 + .../Sem_070103_RelationalOperators_010.ttcn | 25 + .../Sem_070103_RelationalOperators_011.ttcn | 32 + .../Sem_070103_RelationalOperators_012.ttcn | 32 + .../Sem_070103_RelationalOperators_013.ttcn | 25 + .../Sem_070103_RelationalOperators_014.ttcn | 25 + .../Sem_070103_RelationalOperators_015.ttcn | 32 + .../Sem_070103_RelationalOperators_016.ttcn | 25 + .../Sem_070103_RelationalOperators_017.ttcn | 25 + .../Sem_070103_RelationalOperators_018.ttcn | 25 + .../Sem_070103_RelationalOperators_019.ttcn | 25 + .../Sem_070103_RelationalOperators_020.ttcn | 32 + .../Sem_070103_RelationalOperators_021.ttcn | 32 + .../Sem_070103_RelationalOperators_022.ttcn | 25 + .../Sem_070103_RelationalOperators_023.ttcn | 25 + .../Sem_070103_RelationalOperators_024.ttcn | 32 + .../Sem_070103_RelationalOperators_025.ttcn | 33 + .../Sem_070103_RelationalOperators_026.ttcn | 33 + .../Sem_070103_RelationalOperators_030.ttcn | 33 + .../Sem_070103_RelationalOperators_031.ttcn | 33 + .../Sem_070103_RelationalOperators_032.ttcn | 33 + .../Sem_070103_RelationalOperators_033.ttcn | 33 + .../Sem_070103_RelationalOperators_034.ttcn | 33 + .../Sem_070103_RelationalOperators_035.ttcn | 34 + .../Sem_070103_RelationalOperators_036.ttcn | 33 + .../Sem_070103_RelationalOperators_037.ttcn | 38 + .../Sem_070103_RelationalOperators_038.ttcn | 31 + .../Sem_070103_RelationalOperators_039.ttcn | 31 + .../Sem_070103_RelationalOperators_040.ttcn | 31 + .../Sem_070103_RelationalOperators_041.ttcn | 31 + .../Sem_070103_RelationalOperators_042.ttcn | 30 + .../Sem_070103_RelationalOperators_043.ttcn | 30 + .../Sem_070103_RelationalOperators_044.ttcn | 30 + .../Sem_070103_RelationalOperators_045.ttcn | 30 + .../Sem_070103_RelationalOperators_046.ttcn | 29 + .../Sem_070103_RelationalOperators_047.ttcn | 27 + .../Sem_070103_RelationalOperators_048.ttcn | 40 + .../Sem_070103_RelationalOperators_049.ttcn | 39 + .../Sem_070103_RelationalOperators_050.ttcn | 41 + .../Sem_070104_LogicalOperators_001.ttcn | 28 + .../Sem_070104_LogicalOperators_002.ttcn | 30 + .../Sem_070105_BitwiseOperators_001.ttcn | 28 + .../Sem_070105_BitwiseOperators_002.ttcn | 28 + .../Sem_070106_ShiftOperators_001.ttcn | 28 + .../Sem_070106_ShiftOperators_002.ttcn | 28 + .../Sem_070106_ShiftOperators_003.ttcn | 28 + .../Sem_070106_ShiftOperators_004.ttcn | 28 + .../Sem_070107_RotateOperators_001.ttcn | 28 + .../Sem_070107_RotateOperators_002.ttcn | 28 + .../Sem_070107_RotateOperators_003.ttcn | 28 + .../Sem_070107_RotateOperators_004.ttcn | 28 + ...02_FieldReferencesAndListElements_001.ttcn | 32 + ...02_FieldReferencesAndListElements_002.ttcn | 29 + .../07_toplevel/NegSem_07_toplevel_001.ttcn | 29 + .../07_toplevel/NegSem_07_toplevel_002.ttcn | 32 + .../07_toplevel/NegSem_07_toplevel_003.ttcn | 33 + .../07_toplevel/NegSem_07_toplevel_004.ttcn | 33 + .../07_toplevel/NegSem_07_toplevel_005.ttcn | 28 + .../07_toplevel/Sem_07_toplevel_001.ttcn | 31 + .../07_toplevel/Sem_07_toplevel_002.ttcn | 28 + .../07_toplevel/Sem_07_toplevel_003.ttcn | 33 + .../07_toplevel/Sem_07_toplevel_004.ttcn | 30 + .../07_toplevel/Sem_07_toplevel_005.ttcn | 30 + .../07_toplevel/Sem_07_toplevel_006.ttcn | 34 + .../07_toplevel/Sem_07_toplevel_007.ttcn | 34 + .../07_toplevel/Sem_07_toplevel_008.ttcn | 31 + .../07_toplevel/Sem_07_toplevel_009.ttcn | 34 + core_language/07_expressions/NOTES | 2 + .../NegSyn_0801_DefinitionOfAModule_001.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_001.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_002.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_003.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_004.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_005.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_006.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_007.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_008.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_009.ttcn | 10 + .../Syn_0801_DefinitionOfAModule_010.ttcn | 10 + .../NegSem_080201_ModuleParameters_001.ttcn | 38 + .../NegSem_080201_ModuleParameters_002.ttcn | 46 + .../NegSem_080201_ModuleParameters_003.ttcn | 34 + .../NegSem_080201_ModuleParameters_004.ttcn | 34 + .../NegSem_080201_ModuleParameters_005.ttcn | 28 + .../NegSem_080201_ModuleParameters_006.ttcn | 30 + .../NegSyn_080201_ModuleParameters_001.ttcn | 18 + .../NegSyn_080201_ModuleParameters_002.ttcn | 12 + .../Sem_080201_ModuleParameters_001.ttcn | 27 + .../Sem_080201_ModuleParameters_002.ttcn | 29 + .../Sem_080201_ModuleParameters_003.ttcn | 29 + .../Syn_080201_ModuleParameters_001.ttcn | 10 + .../Syn_080201_ModuleParameters_002.ttcn | 10 + .../Syn_080201_ModuleParameters_003.ttcn | 10 + .../Syn_080202_GroupOfDefinitions_001.ttcn | 18 + .../Syn_080202_GroupOfDefinitions_002.ttcn | 17 + .../Syn_080202_GroupOfDefinitions_003.ttcn | 16 + .../Syn_080202_GroupOfDefinitions_004.ttcn | 18 + ...em_08020301_GeneralFormatOfImport_001.ttcn | 23 + ...em_08020301_GeneralFormatOfImport_002.ttcn | 21 + ...em_08020301_GeneralFormatOfImport_003.ttcn | 37 + ...em_08020301_GeneralFormatOfImport_004.ttcn | 35 + ...em_08020301_GeneralFormatOfImport_005.ttcn | 33 + ...em_08020301_GeneralFormatOfImport_006.ttcn | 33 + ...em_08020301_GeneralFormatOfImport_007.ttcn | 40 + ...em_08020301_GeneralFormatOfImport_008.ttcn | 24 + ...em_08020301_GeneralFormatOfImport_009.ttcn | 24 + ...em_08020301_GeneralFormatOfImport_010.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_011.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_012.ttcn | 28 + ...em_08020301_GeneralFormatOfImport_013.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_014.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_015.ttcn | 31 + ...em_08020301_GeneralFormatOfImport_016.ttcn | 23 + ...em_08020301_GeneralFormatOfImport_017.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_018.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_019.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_020.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_021.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_022.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_023.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_024.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_025.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_026.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_027.ttcn | 28 + ...em_08020301_GeneralFormatOfImport_028.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_029.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_030.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_031.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_032.ttcn | 25 + ...em_08020301_GeneralFormatOfImport_033.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_034.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_035.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_036.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_037.ttcn | 27 + ...em_08020301_GeneralFormatOfImport_038.ttcn | 24 + ...em_08020301_GeneralFormatOfImport_039.ttcn | 34 + ...em_08020301_GeneralFormatOfImport_040.ttcn | 37 + ...yn_08020301_GeneralFormatOfImport_001.ttcn | 31 + ...yn_08020301_GeneralFormatOfImport_002.ttcn | 32 + ...em_08020301_GeneralFormatOfImport_001.ttcn | 35 + ...em_08020301_GeneralFormatOfImport_002.ttcn | 40 + ...em_08020301_GeneralFormatOfImport_003.ttcn | 38 + ...em_08020301_GeneralFormatOfImport_004.ttcn | 38 + ...em_08020301_GeneralFormatOfImport_005.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_006.ttcn | 26 + ...em_08020301_GeneralFormatOfImport_007.ttcn | 34 + ...em_08020301_GeneralFormatOfImport_008.ttcn | 57 + ...em_08020301_GeneralFormatOfImport_009.ttcn | 53 + ...em_08020301_GeneralFormatOfImport_010.ttcn | 44 + ...em_08020301_GeneralFormatOfImport_011.ttcn | 54 + ...em_08020301_GeneralFormatOfImport_012.ttcn | 46 + ...em_08020301_GeneralFormatOfImport_013.ttcn | 44 + ...em_08020301_GeneralFormatOfImport_014.ttcn | 36 + ...em_08020301_GeneralFormatOfImport_015.ttcn | 38 + ...em_08020301_GeneralFormatOfImport_016.ttcn | 38 + ...em_08020301_GeneralFormatOfImport_017.ttcn | 33 + ...em_08020301_GeneralFormatOfImport_018.ttcn | 33 + ...em_08020301_GeneralFormatOfImport_019.ttcn | 46 + ...em_08020301_GeneralFormatOfImport_020.ttcn | 44 + ...yn_08020301_GeneralFormatOfImport_001.ttcn | 15 + ...yn_08020301_GeneralFormatOfImport_002.ttcn | 24 + ...020302_ImportingSingleDefinitions_001.ttcn | 32 + ...020302_ImportingSingleDefinitions_002.ttcn | 49 + .../NegSem_08020303_ImportingGroups_001.ttcn | 34 + .../Sem_08020303_ImportingGroups_001.ttcn | 34 + .../Sem_08020303_ImportingGroups_002.ttcn | 41 + .../Sem_08020303_ImportingGroups_003.ttcn | 38 + ...ImportingDefinitionsOfTheSameKind_001.ttcn | 32 + ...ImportingDefinitionsOfTheSameKind_002.ttcn | 33 + ...ImportingDefinitionsOfTheSameKind_003.ttcn | 33 + ..._ImportingAllDefinitionsOfAModule_001.ttcn | 40 + ..._ImportingAllDefinitionsOfAModule_002.ttcn | 48 + ..._ImportingAllDefinitionsOfAModule_001.ttcn | 29 + ..._ImportingAllDefinitionsOfAModule_002.ttcn | 32 + ...therT3EditionsAndFromNonT3Modules_001.ttcn | 16 + ...therT3EditionsAndFromNonT3Modules_001.ttcn | 16 + ...therT3EditionsAndFromNonT3Modules_002.ttcn | 14 + ...ngOfImportStatementsFromT3Modules_001.ttcn | 35 + ...ngOfImportStatementsFromT3Modules_002.ttcn | 36 + ...ngOfImportStatementsFromT3Modules_001.ttcn | 35 + .../NOTES | 3 + ...OfLanguageSpecificationsInImports_001.ttcn | 14 + ...OfLanguageSpecificationsInImports_002.ttcn | 33 + ...OfLanguageSpecificationsInImports_003.ttcn | 33 + ...OfLanguageSpecificationsInImports_001.ttcn | 33 + ...OfLanguageSpecificationsInImports_002.ttcn | 33 + ..._080204_DefinitionOfFriendModules_001.ttcn | 29 + ..._080204_DefinitionOfFriendModules_002.ttcn | 31 + ..._080204_DefinitionOfFriendModules_001.ttcn | 31 + ...em_080205_VisibilityOfDefinitions_001.ttcn | 29 + ...em_080205_VisibilityOfDefinitions_002.ttcn | 31 + ...em_080205_VisibilityOfDefinitions_003.ttcn | 33 + ...em_080205_VisibilityOfDefinitions_004.ttcn | 33 + ...em_080205_VisibilityOfDefinitions_005.ttcn | 35 + ...em_080205_VisibilityOfDefinitions_001.ttcn | 29 + ...em_080205_VisibilityOfDefinitions_002.ttcn | 31 + ...em_080205_VisibilityOfDefinitions_003.ttcn | 33 + ...em_080205_VisibilityOfDefinitions_004.ttcn | 35 + ...em_080205_VisibilityOfDefinitions_005.ttcn | 35 + .../Syn_0802_ModuleDefinitionsPart_001.ttcn | 15 + .../Syn_0802_ModuleDefinitionsPart_002.ttcn | 15 + .../NegSyn_0803_ModuleControlPart_001.ttcn | 18 + .../Sem_0803_ModuleControlPart_001.ttcn | 31 + .../Syn_0803_ModuleControlPart_001.ttcn | 20 + .../Syn_0803_ModuleControlPart_002.ttcn | 34 + .../Syn_0803_ModuleControlPart_003.ttcn | 14 + core_language/08_modules/NOTES | 1 + .../NegSem_0901_Communication_ports_001.ttcn | 42 + .../NegSem_0901_Communication_ports_002.ttcn | 37 + .../NegSem_0901_Communication_ports_003.ttcn | 33 + .../NegSem_0901_Communication_ports_004.ttcn | 44 + .../NegSem_0901_Communication_ports_005.ttcn | 35 + .../NegSem_0901_Communication_ports_006.ttcn | 45 + .../NegSem_0901_Communication_ports_007.ttcn | 33 + .../NegSem_0901_Communication_ports_008.ttcn | 41 + .../NegSem_0901_Communication_ports_009.ttcn | 31 + .../NegSem_0901_Communication_ports_010.ttcn | 39 + .../Sem_0901_Communication_ports_001.ttcn | 40 + .../Sem_0901_Communication_ports_002.ttcn | 79 + .../Sem_0901_Communication_ports_003.ttcn | 97 + .../Sem_0901_Communication_ports_004.ttcn | 41 + .../Sem_0901_Communication_ports_005.ttcn | 100 + .../Sem_0901_Communication_ports_006.ttcn | 35 + .../Sem_0901_Communication_ports_007.ttcn | 35 + .../Sem_0901_Communication_ports_008.ttcn | 48 + .../Sem_0901_Communication_ports_009.ttcn | 49 + .../Sem_0901_Communication_ports_010.ttcn | 44 + .../Sem_0901_Communication_ports_011.ttcn | 45 + .../NegSem_0902_Communication_ports_001.ttcn | 38 + .../NegSem_0902_Communication_ports_002.ttcn | 39 + .../NegSem_0902_Communication_ports_003.ttcn | 30 + .../NegSem_0902_Communication_ports_004.ttcn | 38 + .../Sem_0902_Communication_ports_001.ttcn | 48 + .../Sem_0902_Communication_ports_002.ttcn | 57 + .../Syn_0902_Communication_ports_001.ttcn | 35 + core_language/10_constants/NOTES | 3 + .../10_constants/NegSem_10_Constants_001.ttcn | 23 + .../10_constants/NegSem_10_Constants_002.ttcn | 21 + .../10_constants/NegSem_10_Constants_003.ttcn | 26 + .../10_constants/NegSem_10_Constants_004.ttcn | 39 + .../10_constants/NegSem_10_Constants_005.ttcn | 37 + .../10_constants/Sem_10_Constants_001.ttcn | 27 + .../10_constants/Sem_10_Constants_002.ttcn | 27 + .../10_constants/Sem_10_Constants_003.ttcn | 30 + .../10_constants/Sem_10_Constants_004.ttcn | 38 + .../10_constants/Sem_10_Constants_005.ttcn | 28 + .../10_constants/Sem_10_Constants_006.ttcn | 37 + .../10_constants/Sem_10_Constants_007.ttcn | 39 + .../10_constants/Sem_10_Constants_008.ttcn | 37 + .../10_constants/Sem_10_Constants_009.ttcn | 39 + .../10_constants/Syn_10_Constants_001.ttcn | 12 + .../10_constants/Syn_10_Constants_002.ttcn | 9 + .../10_constants/Syn_10_Constants_003.ttcn | 11 + .../10_constants/Syn_10_Constants_004.ttcn | 33 + .../11_variables/1101_value_variables/NOTES | 4 + .../NegSem_1101_ValueVars_001.ttcn | 18 + .../NegSem_1101_ValueVars_002.ttcn | 33 + .../NegSem_1101_ValueVars_003.ttcn | 41 + .../NegSem_1101_ValueVars_004.ttcn | 36 + .../NegSem_1101_ValueVars_005.ttcn | 23 + .../NegSyn_1101_ValueVars_001.ttcn | 9 + .../Sem_1101_ValueVars_001.ttcn | 40 + .../Sem_1101_ValueVars_002.ttcn | 30 + .../Sem_1101_ValueVars_003.ttcn | 29 + .../Sem_1101_ValueVars_004.ttcn | 34 + .../Sem_1101_ValueVars_005.ttcn | 38 + .../Sem_1101_ValueVars_006.ttcn | 31 + .../Syn_1101_ValueVars_001.ttcn | 30 + .../1102_template_variables/NOTES | 4 + .../NegSem_1102_TemplateVars_001.ttcn | 20 + .../NegSem_1102_TemplateVars_002.ttcn | 46 + .../NegSem_1102_TemplateVars_003.ttcn | 55 + .../NegSem_1102_TemplateVars_004.ttcn | 49 + .../NegSyn_1102_TemplateVars_001.ttcn | 9 + .../NegSyn_1102_TemplateVars_002.ttcn | 26 + .../Sem_1102_TemplateVars_001.ttcn | 40 + .../Sem_1102_TemplateVars_002.ttcn | 47 + .../Sem_1102_TemplateVars_003.ttcn | 53 + .../Syn_1102_TemplateVars_001.ttcn | 30 + .../NegSem_12_toplevel_timer_001.ttcn | 25 + .../NegSem_12_toplevel_timer_002.ttcn | 25 + .../NegSem_12_toplevel_timer_003.ttcn | 25 + .../NegSem_12_toplevel_timer_004.ttcn | 25 + .../NegSem_12_toplevel_timer_005.ttcn | 25 + .../NegSem_12_toplevel_timer_006.ttcn | 25 + .../NegSem_12_toplevel_timer_007.ttcn | 25 + .../NegSem_12_toplevel_timer_008.ttcn | 25 + .../NegSyn_12_toplevel_timer_001.ttcn | 35 + .../NegSyn_12_toplevel_timer_002.ttcn | 25 + .../NegSyn_12_toplevel_timer_003.ttcn | 25 + .../NegSyn_12_toplevel_timer_004.ttcn | 25 + .../NegSyn_12_toplevel_timer_005.ttcn | 25 + .../NegSyn_12_toplevel_timer_006.ttcn | 25 + .../NegSyn_12_toplevel_timer_007.ttcn | 25 + .../Sem_12_toplevel_timer_001.ttcn | 28 + .../Sem_12_toplevel_timer_002.ttcn | 29 + .../Sem_12_toplevel_timer_003.ttcn | 39 + .../Sem_12_toplevel_timer_004.ttcn | 33 + .../Sem_12_toplevel_timer_005.ttcn | 28 + .../Sem_12_toplevel_timer_006.ttcn | 42 + .../Sem_12_toplevel_timer_007.ttcn | 29 + .../Sem_12_toplevel_timer_008.ttcn | 34 + .../Sem_12_toplevel_timer_009.ttcn | 37 + .../Syn_12_toplevel_timer_001.ttcn | 16 + .../Syn_12_toplevel_timer_002.ttcn | 16 + .../Syn_12_toplevel_timer_003.ttcn | 16 + .../Syn_12_toplevel_timer_004.ttcn | 16 + .../Syn_12_toplevel_timer_005.ttcn | 17 + .../Syn_12_toplevel_timer_006.ttcn | 20 + .../13_toplevel/Sem_13_declaring_msg_001.ttcn | 146 + .../13_toplevel/Sem_13_declaring_msg_002.ttcn | 127 + .../13_toplevel/Sem_13_declaring_msg_003.ttcn | 128 + .../13_toplevel/Sem_13_declaring_msg_004.ttcn | 131 + .../13_toplevel/Sem_13_declaring_msg_005.ttcn | 137 + .../13_toplevel/Sem_13_declaring_msg_006.ttcn | 135 + .../13_toplevel/Sem_13_declaring_msg_007.ttcn | 136 + .../13_toplevel/Sem_13_declaring_msg_008.ttcn | 136 + .../13_toplevel/Sem_13_declaring_msg_009.ttcn | 133 + ...level_declaring_msg_various_types_001.ttcn | 142 + ...level_declaring_msg_various_types_002.ttcn | 142 + ...level_declaring_msg_various_types_003.ttcn | 142 + ...level_declaring_msg_various_types_004.ttcn | 142 + ...level_declaring_msg_various_types_005.ttcn | 142 + ...level_declaring_msg_various_types_006.ttcn | 142 + ...level_declaring_msg_various_types_007.ttcn | 142 + ...level_declaring_msg_various_types_008.ttcn | 142 + ...level_declaring_msg_various_types_009.ttcn | 142 + ...level_declaring_msg_various_types_010.ttcn | 142 + ...level_declaring_msg_various_types_011.ttcn | 142 + ...level_declaring_msg_various_types_012.ttcn | 142 + ...level_declaring_msg_various_types_013.ttcn | 142 + ...level_declaring_msg_various_types_014.ttcn | 142 + .../NegSem_1400_procedure_signatures_001.ttcn | 52 + .../NegSem_1400_procedure_signatures_002.ttcn | 73 + .../Sem_1400_procedure_signatures_001.ttcn | 79 + .../Sem_1400_procedure_signatures_002.ttcn | 80 + .../Sem_1400_procedure_signatures_003.ttcn | 72 + .../Sem_1400_procedure_signatures_004.ttcn | 68 + ...yn_1501_DeclaringMessageTemplates_001.ttcn | 22 + ...yn_1501_DeclaringMessageTemplates_002.ttcn | 18 + ...yn_1501_DeclaringMessageTemplates_003.ttcn | 18 + ...yn_1501_DeclaringMessageTemplates_004.ttcn | 12 + ...yn_1501_DeclaringMessageTemplates_005.ttcn | 12 + ...yn_1501_DeclaringMessageTemplates_006.ttcn | 42 + .../1502_declaring_signature_templates/NOTES | 2 + ..._1502_DeclaringSignatureTemplates_001.ttcn | 117 + ..._1502_DeclaringSignatureTemplates_002.ttcn | 115 + ..._1502_DeclaringSignatureTemplates_003.ttcn | 112 + ..._1502_DeclaringSignatureTemplates_001.ttcn | 18 + ..._1502_DeclaringSignatureTemplates_002.ttcn | 18 + ..._1502_DeclaringSignatureTemplates_003.ttcn | 42 + ..._1502_DeclaringSignatureTemplates_004.ttcn | 42 + ...gSem_1503_GlobalAndLocalTemplates_001.ttcn | 22 + ...gSem_1503_GlobalAndLocalTemplates_002.ttcn | 22 + ...gSem_1503_GlobalAndLocalTemplates_003.ttcn | 22 + ...gSem_1503_GlobalAndLocalTemplates_004.ttcn | 22 + ...gSyn_1503_GlobalAndLocalTemplates_001.ttcn | 17 + ...gSyn_1503_GlobalAndLocalTemplates_002.ttcn | 21 + ...gSyn_1503_GlobalAndLocalTemplates_003.ttcn | 17 + ...gSyn_1503_GlobalAndLocalTemplates_004.ttcn | 21 + .../Sem_1503_GlobalAndLocalTemplates_001.ttcn | 41 + .../Sem_1503_GlobalAndLocalTemplates_002.ttcn | 41 + .../Sem_1503_GlobalAndLocalTemplates_003.ttcn | 40 + .../Sem_1503_GlobalAndLocalTemplates_004.ttcn | 40 + .../Sem_1503_GlobalAndLocalTemplates_005.ttcn | 46 + .../Sem_1503_GlobalAndLocalTemplates_006.ttcn | 40 + .../Syn_1503_GlobalAndLocalTemplates_001.ttcn | 22 + .../Syn_1503_GlobalAndLocalTemplates_004.ttcn | 33 + .../Syn_1503_GlobalAndLocalTemplates_005.ttcn | 32 + .../Syn_1503_GlobalAndLocalTemplates_006.ttcn | 34 + .../Syn_1504_InlineTemplates_001.ttcn | 32 + .../Syn_1504_InlineTemplates_002.ttcn | 38 + .../Syn_1504_InlineTemplates_003.ttcn | 38 + .../NegSem_1505_ModifiedTemplates_001.ttcn | 19 + .../NegSem_1505_ModifiedTemplates_002.ttcn | 30 + .../NegSem_1505_ModifiedTemplates_003.ttcn | 36 + .../NegSem_1505_ModifiedTemplates_004.ttcn | 29 + .../NegSem_1505_ModifiedTemplates_005.ttcn | 29 + .../NegSem_1505_ModifiedTemplates_006.ttcn | 29 + .../NegSem_1505_ModifiedTemplates_007.ttcn | 29 + .../NegSyn_1505_ModifiedTemplates_001.ttcn | 36 + .../Sem_1505_ModifiedTemplates_001.ttcn | 49 + .../Sem_1505_ModifiedTemplates_002.ttcn | 39 + .../Sem_1505_ModifiedTemplates_003.ttcn | 44 + .../Sem_1505_ModifiedTemplates_004.ttcn | 43 + .../Sem_1505_ModifiedTemplates_005.ttcn | 41 + .../Sem_1505_ModifiedTemplates_006.ttcn | 47 + .../Sem_1505_ModifiedTemplates_007.ttcn | 51 + .../Sem_1505_ModifiedTemplates_008.ttcn | 53 + .../Sem_1505_ModifiedTemplates_009.ttcn | 38 + .../Sem_1505_ModifiedTemplates_010.ttcn | 37 + .../Syn_1505_ModifiedTemplates_001.ttcn | 26 + .../Syn_1505_ModifiedTemplates_002.ttcn | 32 + .../Syn_1505_ModifiedTemplates_003.ttcn | 27 + .../Syn_1505_ModifiedTemplates_004.ttcn | 26 + ...ferencingIndividualStringElements_001.ttcn | 30 + ...602_ReferencingRecordAndSetFields_001.ttcn | 40 + ...602_ReferencingRecordAndSetFields_002.ttcn | 41 + ...602_ReferencingRecordAndSetFields_003.ttcn | 59 + ...602_ReferencingRecordAndSetFields_004.ttcn | 59 + ...602_ReferencingRecordAndSetFields_005.ttcn | 32 + ...602_ReferencingRecordAndSetFields_006.ttcn | 37 + ...602_ReferencingRecordAndSetFields_001.ttcn | 54 + ...602_ReferencingRecordAndSetFields_002.ttcn | 60 + ...602_ReferencingRecordAndSetFields_003.ttcn | 54 + ...602_ReferencingRecordAndSetFields_004.ttcn | 53 + ...ReferencingRecordOfAndSetElements_001.ttcn | 30 + ...ReferencingRecordOfAndSetElements_002.ttcn | 31 + ...ReferencingRecordOfAndSetElements_003.ttcn | 30 + ...ReferencingRecordOfAndSetElements_004.ttcn | 28 + ...ReferencingRecordOfAndSetElements_005.ttcn | 28 + ...ReferencingRecordOfAndSetElements_006.ttcn | 28 + ...ReferencingRecordOfAndSetElements_007.ttcn | 28 + ...ReferencingRecordOfAndSetElements_008.ttcn | 28 + ...ReferencingRecordOfAndSetElements_009.ttcn | 28 + ...ReferencingRecordOfAndSetElements_010.ttcn | 42 + ...ReferencingRecordOfAndSetElements_011.ttcn | 41 + ...ReferencingRecordOfAndSetElements_012.ttcn | 41 + ...ReferencingRecordOfAndSetElements_013.ttcn | 40 + ...ReferencingRecordOfAndSetElements_014.ttcn | 30 + ...ReferencingRecordOfAndSetElements_015.ttcn | 32 + ...ReferencingRecordOfAndSetElements_001.ttcn | 35 + ...ReferencingRecordOfAndSetElements_002.ttcn | 40 + ...ReferencingRecordOfAndSetElements_003.ttcn | 41 + ...ReferencingRecordOfAndSetElements_004.ttcn | 34 + ...ReferencingRecordOfAndSetElements_005.ttcn | 35 + ...ReferencingRecordOfAndSetElements_006.ttcn | 38 + ...ReferencingRecordOfAndSetElements_007.ttcn | 46 + .../NOTES | 1 + ...04_ReferencingSignatureParameters_001.ttcn | 49 + ...04_ReferencingSignatureParameters_001.ttcn | 78 + ...05_Referencing_union_alternatives_001.ttcn | 53 + ...05_Referencing_union_alternatives_002.ttcn | 52 + ...05_Referencing_union_alternatives_003.ttcn | 54 + ...05_Referencing_union_alternatives_004.ttcn | 54 + ...05_Referencing_union_alternatives_005.ttcn | 50 + ...05_Referencing_union_alternatives_006.ttcn | 52 + ...05_Referencing_union_alternatives_001.ttcn | 59 + ...05_Referencing_union_alternatives_002.ttcn | 60 + ...05_Referencing_union_alternatives_003.ttcn | 59 + ...05_Referencing_union_alternatives_004.ttcn | 64 + .../1507_template_matching_mechanisms/README | 1 + .../1508_template_restrictions/NOTES | 1 + .../NegSem_1508_TemplateRestrictions_001.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_002.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_003.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_004.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_005.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_006.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_007.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_008.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_009.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_010.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_011.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_012.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_013.ttcn | 16 + .../NegSem_1508_TemplateRestrictions_014.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_015.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_016.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_017.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_018.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_019.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_020.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_021.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_022.ttcn | 18 + .../NegSem_1508_TemplateRestrictions_023.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_024.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_025.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_026.ttcn | 17 + .../NegSem_1508_TemplateRestrictions_029.ttcn | 41 + .../NegSem_1508_TemplateRestrictions_030.ttcn | 41 + .../NegSem_1508_TemplateRestrictions_031.ttcn | 39 + .../NegSem_1508_TemplateRestrictions_032.ttcn | 43 + .../NegSem_1508_TemplateRestrictions_033.ttcn | 43 + .../NegSem_1508_TemplateRestrictions_034.ttcn | 40 + .../NegSem_1508_TemplateRestrictions_035.ttcn | 40 + .../NegSem_1508_TemplateRestrictions_036.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_037.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_038.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_039.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_040.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_041.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_042.ttcn | 38 + .../NegSem_1508_TemplateRestrictions_049.ttcn | 39 + .../NegSem_1508_TemplateRestrictions_050.ttcn | 61 + .../NegSem_1508_TemplateRestrictions_051.ttcn | 60 + .../Sem_1508_TemplateRestrictions_001.ttcn | 29 + .../Sem_1508_TemplateRestrictions_002.ttcn | 36 + .../Sem_1508_TemplateRestrictions_003.ttcn | 38 + .../Sem_1508_TemplateRestrictions_004.ttcn | 29 + .../Sem_1508_TemplateRestrictions_005.ttcn | 38 + .../Sem_1508_TemplateRestrictions_006.ttcn | 29 + .../Sem_1508_TemplateRestrictions_007.ttcn | 38 + .../Sem_1508_TemplateRestrictions_008.ttcn | 38 + .../Sem_1508_TemplateRestrictions_009.ttcn | 38 + .../Sem_1508_TemplateRestrictions_010.ttcn | 29 + .../Sem_1508_TemplateRestrictions_011.ttcn | 38 + .../Sem_1508_TemplateRestrictions_012.ttcn | 38 + .../Sem_1508_TemplateRestrictions_013.ttcn | 38 + .../Sem_1508_TemplateRestrictions_014.ttcn | 38 + .../Sem_1508_TemplateRestrictions_015.ttcn | 41 + .../Sem_1508_TemplateRestrictions_016.ttcn | 41 + .../Sem_1508_TemplateRestrictions_017.ttcn | 41 + .../Sem_1508_TemplateRestrictions_018.ttcn | 41 + .../Sem_1508_TemplateRestrictions_019.ttcn | 41 + .../Sem_1508_TemplateRestrictions_020.ttcn | 41 + .../Sem_1508_TemplateRestrictions_021.ttcn | 41 + .../Sem_1508_TemplateRestrictions_022.ttcn | 41 + .../Sem_1508_TemplateRestrictions_023.ttcn | 41 + .../Sem_1508_TemplateRestrictions_024.ttcn | 43 + .../Sem_1508_TemplateRestrictions_025.ttcn | 43 + .../Sem_1508_TemplateRestrictions_026.ttcn | 43 + .../Sem_1508_TemplateRestrictions_027.ttcn | 45 + .../Sem_1508_TemplateRestrictions_028.ttcn | 43 + .../Sem_1508_TemplateRestrictions_029.ttcn | 43 + .../Sem_1508_TemplateRestrictions_030.ttcn | 43 + .../Sem_1508_TemplateRestrictions_031.ttcn | 53 + .../Sem_1508_TemplateRestrictions_032.ttcn | 54 + .../Sem_1508_TemplateRestrictions_033.ttcn | 53 + .../Sem_1508_TemplateRestrictions_034.ttcn | 53 + .../Sem_1508_TemplateRestrictions_035.ttcn | 53 + .../Sem_1508_TemplateRestrictions_036.ttcn | 53 + .../Sem_1508_TemplateRestrictions_043.ttcn | 38 + .../Sem_1508_TemplateRestrictions_044.ttcn | 38 + .../Sem_1508_TemplateRestrictions_045.ttcn | 38 + .../Sem_1508_TemplateRestrictions_046.ttcn | 38 + .../Sem_1508_TemplateRestrictions_047.ttcn | 38 + .../Sem_1508_TemplateRestrictions_048.ttcn | 38 + .../Sem_1508_TemplateRestrictions_049.ttcn | 60 + .../Sem_1508_TemplateRestrictions_050.ttcn | 39 + .../Sem_1508_TemplateRestrictions_051.ttcn | 44 + .../Syn_1508_TemplateRestrictions_001.ttcn | 17 + .../Syn_1508_TemplateRestrictions_002.ttcn | 17 + .../Syn_1508_TemplateRestrictions_003.ttcn | 17 + .../Syn_1508_TemplateRestrictions_004.ttcn | 17 + .../15_templates/1509_match_operation/NOTES | 1 + .../NegSem_1509_MatchOperation_001.ttcn | 27 + .../NegSem_1509_MatchOperation_002.ttcn | 32 + .../NegSem_1509_MatchOperation_003.ttcn | 31 + .../Sem_1509_MatchOperation_001.ttcn | 28 + .../Sem_1509_MatchOperation_002.ttcn | 28 + .../Sem_1509_MatchOperation_003.ttcn | 39 + .../Sem_1509_MatchOperation_004.ttcn | 39 + .../Sem_1509_MatchOperation_006.ttcn | 39 + .../Sem_1509_MatchOperation_007.ttcn | 39 + .../Sem_1509_MatchOperation_008.ttcn | 39 + .../Sem_1509_MatchOperation_010.ttcn | 39 + .../Sem_1509_MatchOperation_011.ttcn | 39 + .../Sem_1509_MatchOperation_012.ttcn | 30 + .../Sem_1509_MatchOperation_013.ttcn | 30 + .../Sem_1509_MatchOperation_014.ttcn | 31 + .../Sem_1509_MatchOperation_015.ttcn | 31 + .../Sem_1509_MatchOperation_016.ttcn | 31 + .../15_templates/1510_valueof_operation/NOTES | 1 + .../NegSem_1510_ValueOfOperation_001.ttcn | 25 + .../NegSem_1510_ValueOfOperation_002.ttcn | 34 + .../NegSem_1510_ValueOfOperation_003.ttcn | 33 + .../NegSem_1510_ValueOfOperation_004.ttcn | 26 + .../NegSem_1510_ValueOfOperation_005.ttcn | 29 + .../NegSem_1510_ValueOfOperation_006.ttcn | 35 + .../Sem_1510_ValueOfOperation_001.ttcn | 38 + ...tingTemplatesOfStringAndListTypes_001.ttcn | 24 + ...tingTemplatesOfStringAndListTypes_002.ttcn | 24 + ...tingTemplatesOfStringAndListTypes_003.ttcn | 24 + ...tingTemplatesOfStringAndListTypes_004.ttcn | 39 + ...tingTemplatesOfStringAndListTypes_005.ttcn | 39 + ...tingTemplatesOfStringAndListTypes_006.ttcn | 25 + ...tingTemplatesOfStringAndListTypes_001.ttcn | 26 + ...tingTemplatesOfStringAndListTypes_002.ttcn | 26 + ...tingTemplatesOfStringAndListTypes_003.ttcn | 27 + ...tingTemplatesOfStringAndListTypes_004.ttcn | 27 + ...tingTemplatesOfStringAndListTypes_005.ttcn | 27 + ...tingTemplatesOfStringAndListTypes_006.ttcn | 27 + ...tingTemplatesOfStringAndListTypes_007.ttcn | 30 + ...tingTemplatesOfStringAndListTypes_008.ttcn | 32 + ...tingTemplatesOfStringAndListTypes_009.ttcn | 30 + ...tingTemplatesOfStringAndListTypes_010.ttcn | 39 + ...tingTemplatesOfStringAndListTypes_011.ttcn | 26 + ...tingTemplatesOfStringAndListTypes_012.ttcn | 25 + ...tingTemplatesOfStringAndListTypes_013.ttcn | 26 + ...tingTemplatesOfStringAndListTypes_014.ttcn | 29 + ...tingTemplatesOfStringAndListTypes_015.ttcn | 33 + .../15_toplevel/NegSem_15_TopLevel_001.ttcn | 23 + .../15_toplevel/NegSem_15_TopLevel_002.ttcn | 25 + .../15_toplevel/NegSem_15_TopLevel_003.ttcn | 18 + .../15_toplevel/NegSem_15_TopLevel_004.ttcn | 20 + .../15_toplevel/NegSyn_15_TopLevel_001.ttcn | 22 + .../15_toplevel/Syn_15_TopLevel_001.ttcn | 18 + .../Sem_160101_invoking_functions_001.ttcn | 42 + .../160102_predefined_functions/NOTES | 3 + ...egSem_160102_predefined_functions_001.ttcn | 21 + ...egSem_160102_predefined_functions_002.ttcn | 21 + ...egSem_160102_predefined_functions_003.ttcn | 27 + ...egSem_160102_predefined_functions_004.ttcn | 27 + ...egSem_160102_predefined_functions_005.ttcn | 27 + ...egSem_160102_predefined_functions_006.ttcn | 27 + ...egSem_160102_predefined_functions_007.ttcn | 27 + ...egSem_160102_predefined_functions_008.ttcn | 27 + ...egSem_160102_predefined_functions_009.ttcn | 36 + ...egSem_160102_predefined_functions_010.ttcn | 29 + ...egSem_160102_predefined_functions_017.ttcn | 28 + ...egSem_160102_predefined_functions_018.ttcn | 28 + ...egSem_160102_predefined_functions_019.ttcn | 28 + ...egSem_160102_predefined_functions_021.ttcn | 27 + ...egSem_160102_predefined_functions_022.ttcn | 27 + ...egSem_160102_predefined_functions_023.ttcn | 27 + ...egSem_160102_predefined_functions_024.ttcn | 27 + ...egSem_160102_predefined_functions_025.ttcn | 27 + ...egSem_160102_predefined_functions_026.ttcn | 27 + ...egSem_160102_predefined_functions_027.ttcn | 27 + ...egSem_160102_predefined_functions_028.ttcn | 49 + ...egSem_160102_predefined_functions_029.ttcn | 49 + ...egSem_160102_predefined_functions_030.ttcn | 50 + ...egSem_160102_predefined_functions_031.ttcn | 33 + ...egSem_160102_predefined_functions_032.ttcn | 32 + ...egSem_160102_predefined_functions_033.ttcn | 31 + ...egSem_160102_predefined_functions_034.ttcn | 35 + ...egSem_160102_predefined_functions_036.ttcn | 37 + ...egSem_160102_predefined_functions_037.ttcn | 39 + ...egSem_160102_predefined_functions_038.ttcn | 40 + ...egSem_160102_predefined_functions_039.ttcn | 34 + ...egSem_160102_predefined_functions_040.ttcn | 34 + .../Sem_160102_predefined_functions_001.ttcn | 69 + .../Sem_160102_predefined_functions_002.ttcn | 78 + .../Sem_160102_predefined_functions_003.ttcn | 63 + .../Sem_160102_predefined_functions_004.ttcn | 36 + .../Sem_160102_predefined_functions_005.ttcn | 49 + .../Sem_160102_predefined_functions_006.ttcn | 27 + .../Sem_160102_predefined_functions_007.ttcn | 82 + .../Sem_160102_predefined_functions_008.ttcn | 41 + .../Sem_160102_predefined_functions_009.ttcn | 41 + .../Sem_160102_predefined_functions_010.ttcn | 44 + .../Sem_160102_predefined_functions_011.ttcn | 84 + .../Sem_160102_predefined_functions_012.ttcn | 43 + .../Sem_160102_predefined_functions_013.ttcn | 45 + .../Sem_160102_predefined_functions_014.ttcn | 36 + .../Sem_160102_predefined_functions_015.ttcn | 39 + .../Sem_160102_predefined_functions_016.ttcn | 34 + .../Sem_160102_predefined_functions_017.ttcn | 42 + .../Sem_160102_predefined_functions_018.ttcn | 43 + .../Sem_160102_predefined_functions_019.ttcn | 41 + .../Sem_160102_predefined_functions_020.ttcn | 42 + .../Sem_160102_predefined_functions_021.ttcn | 43 + .../Sem_160102_predefined_functions_022.ttcn | 33 + .../Sem_160102_predefined_functions_023.ttcn | 33 + .../Sem_160102_predefined_functions_024.ttcn | 32 + .../Sem_160102_predefined_functions_025.ttcn | 32 + .../Sem_160102_predefined_functions_026.ttcn | 41 + .../Sem_160102_predefined_functions_027.ttcn | 41 + .../Sem_160102_predefined_functions_028.ttcn | 40 + .../Sem_160102_predefined_functions_029.ttcn | 40 + .../Sem_160102_predefined_functions_030.ttcn | 40 + .../Sem_160102_predefined_functions_031.ttcn | 40 + .../Sem_160102_predefined_functions_032.ttcn | 40 + .../Sem_160102_predefined_functions_033.ttcn | 40 + .../Sem_160102_predefined_functions_034.ttcn | 40 + .../Sem_160102_predefined_functions_035.ttcn | 40 + .../Sem_160102_predefined_functions_036.ttcn | 40 + .../Sem_160102_predefined_functions_037.ttcn | 40 + .../Sem_160102_predefined_functions_038.ttcn | 40 + .../Sem_160102_predefined_functions_039.ttcn | 40 + .../Sem_160102_predefined_functions_040.ttcn | 40 + .../Sem_160102_predefined_functions_041.ttcn | 40 + .../Sem_160102_predefined_functions_042.ttcn | 35 + .../Sem_160102_predefined_functions_043.ttcn | 32 + .../Sem_160102_predefined_functions_044.ttcn | 32 + .../Sem_160102_predefined_functions_045.ttcn | 33 + .../Sem_160102_predefined_functions_046.ttcn | 38 + .../Sem_160102_predefined_functions_047.ttcn | 36 + .../Sem_160102_predefined_functions_048.ttcn | 34 + .../Sem_160102_predefined_functions_049.ttcn | 35 + .../Sem_160102_predefined_functions_050.ttcn | 34 + .../Sem_160102_predefined_functions_051.ttcn | 34 + .../Sem_160102_predefined_functions_052.ttcn | 34 + .../Sem_160102_predefined_functions_053.ttcn | 30 + .../Sem_160102_predefined_functions_054.ttcn | 31 + .../Sem_160102_predefined_functions_055.ttcn | 31 + .../Sem_160102_predefined_functions_056.ttcn | 32 + .../Sem_160102_predefined_functions_057.ttcn | 33 + .../Sem_160102_predefined_functions_058.ttcn | 33 + .../Sem_160102_predefined_functions_059.ttcn | 33 + .../Sem_160102_predefined_functions_060.ttcn | 33 + .../Sem_160102_predefined_functions_061.ttcn | 33 + .../Sem_160102_predefined_functions_062.ttcn | 30 + .../Sem_160102_predefined_functions_063.ttcn | 40 + .../Sem_160102_predefined_functions_064.ttcn | 41 + .../Sem_160102_predefined_functions_065.ttcn | 40 + .../Sem_160102_predefined_functions_066.ttcn | 38 + .../Sem_160102_predefined_functions_067.ttcn | 38 + .../Sem_160102_predefined_functions_068.ttcn | 38 + .../Sem_160102_predefined_functions_069.ttcn | 38 + .../Sem_160102_predefined_functions_070.ttcn | 46 + .../Sem_160102_predefined_functions_071.ttcn | 48 + .../Sem_160102_predefined_functions_072.ttcn | 46 + .../Sem_160102_predefined_functions_073.ttcn | 47 + .../Sem_160102_predefined_functions_074.ttcn | 43 + .../Sem_160102_predefined_functions_075.ttcn | 47 + .../Sem_160102_predefined_functions_076.ttcn | 43 + .../Sem_160102_predefined_functions_077.ttcn | 46 + .../Sem_160102_predefined_functions_078.ttcn | 46 + .../Sem_160102_predefined_functions_079.ttcn | 46 + .../Sem_160102_predefined_functions_080.ttcn | 43 + .../Sem_160102_predefined_functions_081.ttcn | 36 + .../Sem_160102_predefined_functions_082.ttcn | 40 + .../Sem_160102_predefined_functions_083.ttcn | 39 + .../Sem_160102_predefined_functions_084.ttcn | 39 + .../Sem_160102_predefined_functions_085.ttcn | 41 + .../Sem_160102_predefined_functions_086.ttcn | 38 + .../Sem_160102_predefined_functions_087.ttcn | 39 + .../Sem_160102_predefined_functions_088.ttcn | 47 + .../Sem_160102_predefined_functions_089.ttcn | 47 + .../Sem_160102_predefined_functions_090.ttcn | 42 + .../Sem_160102_predefined_functions_091.ttcn | 54 + .../Sem_160102_predefined_functions_092.ttcn | 39 + .../Sem_160102_predefined_functions_093.ttcn | 35 + .../Sem_160102_predefined_functions_094.ttcn | 34 + .../Sem_160102_predefined_functions_095.ttcn | 36 + .../Sem_160102_predefined_functions_096.ttcn | 38 + .../Sem_160102_predefined_functions_097.ttcn | 32 + .../Sem_160102_predefined_functions_098.ttcn | 33 + .../Sem_160102_predefined_functions_099.ttcn | 39 + .../Sem_160102_predefined_functions_100.ttcn | 45 + .../Sem_160102_predefined_functions_101.ttcn | 34 + .../Sem_160102_predefined_functions_102.ttcn | 33 + .../Sem_160102_predefined_functions_103.ttcn | 35 + .../Sem_160102_predefined_functions_104.ttcn | 34 + .../Sem_160102_predefined_functions_105.ttcn | 34 + .../Sem_160102_predefined_functions_106.ttcn | 33 + .../Sem_160102_predefined_functions_107.ttcn | 35 + .../Sem_160102_predefined_functions_108.ttcn | 34 + .../NegSem_160103_external_functions_001.ttcn | 23 + .../Sem_160103_external_functions_001.ttcn | 36 + .../Sem_160103_external_functions_002.ttcn | 42 + ...ng_functions_from_specific_places_001.ttcn | 45 + ...ng_functions_from_specific_places_002.ttcn | 43 + ...ng_functions_from_specific_places_003.ttcn | 39 + ...ng_functions_from_specific_places_004.ttcn | 45 + ...ng_functions_from_specific_places_005.ttcn | 43 + ...ng_functions_from_specific_places_006.ttcn | 48 + ...ng_functions_from_specific_places_007.ttcn | 51 + ...ng_functions_from_specific_places_008.ttcn | 51 + ...ng_functions_from_specific_places_009.ttcn | 51 + ...ng_functions_from_specific_places_010.ttcn | 51 + ...ng_functions_from_specific_places_011.ttcn | 48 + ...ng_functions_from_specific_places_012.ttcn | 48 + ...ng_functions_from_specific_places_013.ttcn | 48 + ...ng_functions_from_specific_places_014.ttcn | 48 + ...ng_functions_from_specific_places_015.ttcn | 48 + ...ng_functions_from_specific_places_016.ttcn | 48 + ...ng_functions_from_specific_places_017.ttcn | 43 + ...ng_functions_from_specific_places_018.ttcn | 43 + ...ng_functions_from_specific_places_019.ttcn | 44 + ...ng_functions_from_specific_places_020.ttcn | 44 + ...ng_functions_from_specific_places_021.ttcn | 52 + ...ng_functions_from_specific_places_022.ttcn | 57 + ...ng_functions_from_specific_places_023.ttcn | 58 + ...ng_functions_from_specific_places_024.ttcn | 59 + ...ng_functions_from_specific_places_025.ttcn | 58 + ...ng_functions_from_specific_places_026.ttcn | 59 + ...ng_functions_from_specific_places_027.ttcn | 43 + ...ng_functions_from_specific_places_028.ttcn | 43 + ...ng_functions_from_specific_places_029.ttcn | 43 + ...ng_functions_from_specific_places_030.ttcn | 44 + ...ng_functions_from_specific_places_031.ttcn | 45 + ...ng_functions_from_specific_places_032.ttcn | 42 + ...ng_functions_from_specific_places_033.ttcn | 43 + ...ng_functions_from_specific_places_034.ttcn | 44 + ...ng_functions_from_specific_places_035.ttcn | 44 + ...ng_functions_from_specific_places_036.ttcn | 44 + ...ng_functions_from_specific_places_037.ttcn | 44 + ...ng_functions_from_specific_places_038.ttcn | 50 + ...ng_functions_from_specific_places_039.ttcn | 42 + ...ng_functions_from_specific_places_040.ttcn | 44 + ...ng_functions_from_specific_places_041.ttcn | 48 + ...ng_functions_from_specific_places_042.ttcn | 48 + ...ng_functions_from_specific_places_043.ttcn | 41 + ...ng_functions_from_specific_places_044.ttcn | 46 + ...ng_functions_from_specific_places_045.ttcn | 47 + ...ng_functions_from_specific_places_046.ttcn | 47 + ...ng_functions_from_specific_places_047.ttcn | 52 + ...ng_functions_from_specific_places_048.ttcn | 55 + ...ng_functions_from_specific_places_049.ttcn | 55 + ...ng_functions_from_specific_places_050.ttcn | 55 + ...ng_functions_from_specific_places_051.ttcn | 55 + ...ng_functions_from_specific_places_052.ttcn | 52 + ...ng_functions_from_specific_places_053.ttcn | 52 + ...ng_functions_from_specific_places_054.ttcn | 52 + ...ng_functions_from_specific_places_055.ttcn | 52 + ...ng_functions_from_specific_places_056.ttcn | 52 + ...ng_functions_from_specific_places_057.ttcn | 52 + ...ng_functions_from_specific_places_058.ttcn | 47 + ...ng_functions_from_specific_places_059.ttcn | 47 + ...ng_functions_from_specific_places_060.ttcn | 48 + ...ng_functions_from_specific_places_061.ttcn | 48 + ...ng_functions_from_specific_places_062.ttcn | 56 + ...ng_functions_from_specific_places_063.ttcn | 61 + ...ng_functions_from_specific_places_064.ttcn | 62 + ...ng_functions_from_specific_places_065.ttcn | 63 + ...ng_functions_from_specific_places_066.ttcn | 62 + ...ng_functions_from_specific_places_067.ttcn | 63 + ...ng_functions_from_specific_places_068.ttcn | 47 + ...ng_functions_from_specific_places_069.ttcn | 47 + ...ng_functions_from_specific_places_070.ttcn | 47 + ...ng_functions_from_specific_places_071.ttcn | 48 + ...ng_functions_from_specific_places_072.ttcn | 49 + ...ng_functions_from_specific_places_073.ttcn | 46 + ...ng_functions_from_specific_places_074.ttcn | 47 + ...ng_functions_from_specific_places_075.ttcn | 48 + ...ng_functions_from_specific_places_076.ttcn | 48 + ...ng_functions_from_specific_places_077.ttcn | 48 + ...ng_functions_from_specific_places_078.ttcn | 48 + ...ng_functions_from_specific_places_079.ttcn | 54 + ...ng_functions_from_specific_places_080.ttcn | 46 + ...ng_functions_from_specific_places_081.ttcn | 48 + ...ng_functions_from_specific_places_082.ttcn | 52 + ...ng_functions_from_specific_places_083.ttcn | 52 + ...ng_functions_from_specific_places_084.ttcn | 45 + ...ng_functions_from_specific_places_085.ttcn | 50 + ...ng_functions_from_specific_places_086.ttcn | 51 + ...ng_functions_from_specific_places_087.ttcn | 46 + ...ng_functions_from_specific_places_088.ttcn | 51 + ...ng_functions_from_specific_places_089.ttcn | 54 + ...ng_functions_from_specific_places_090.ttcn | 54 + ...ng_functions_from_specific_places_091.ttcn | 54 + ...ng_functions_from_specific_places_092.ttcn | 54 + ...ng_functions_from_specific_places_093.ttcn | 51 + ...ng_functions_from_specific_places_094.ttcn | 51 + ...ng_functions_from_specific_places_095.ttcn | 51 + ...ng_functions_from_specific_places_096.ttcn | 51 + ...ng_functions_from_specific_places_097.ttcn | 51 + ...ng_functions_from_specific_places_098.ttcn | 51 + ...ng_functions_from_specific_places_099.ttcn | 46 + ...ng_functions_from_specific_places_100.ttcn | 46 + ...ng_functions_from_specific_places_101.ttcn | 47 + ...ng_functions_from_specific_places_102.ttcn | 47 + ...ng_functions_from_specific_places_103.ttcn | 55 + ...ng_functions_from_specific_places_104.ttcn | 60 + ...ng_functions_from_specific_places_105.ttcn | 61 + ...ng_functions_from_specific_places_106.ttcn | 62 + ...ng_functions_from_specific_places_107.ttcn | 61 + ...ng_functions_from_specific_places_108.ttcn | 62 + ...ng_functions_from_specific_places_109.ttcn | 46 + ...ng_functions_from_specific_places_110.ttcn | 46 + ...ng_functions_from_specific_places_111.ttcn | 46 + ...ng_functions_from_specific_places_112.ttcn | 47 + ...ng_functions_from_specific_places_113.ttcn | 48 + ...ng_functions_from_specific_places_114.ttcn | 45 + ...ng_functions_from_specific_places_115.ttcn | 46 + ...ng_functions_from_specific_places_116.ttcn | 47 + ...ng_functions_from_specific_places_117.ttcn | 47 + ...ng_functions_from_specific_places_118.ttcn | 47 + ...ng_functions_from_specific_places_119.ttcn | 47 + ...ng_functions_from_specific_places_120.ttcn | 53 + ...ng_functions_from_specific_places_121.ttcn | 45 + ...ng_functions_from_specific_places_122.ttcn | 47 + ...ng_functions_from_specific_places_123.ttcn | 51 + ...ng_functions_from_specific_places_124.ttcn | 52 + ...ng_functions_from_specific_places_125.ttcn | 44 + ...ng_functions_from_specific_places_126.ttcn | 49 + ...ng_functions_from_specific_places_127.ttcn | 50 + ...ng_functions_from_specific_places_128.ttcn | 47 + ...ng_functions_from_specific_places_129.ttcn | 47 + ...ng_functions_from_specific_places_130.ttcn | 50 + ...ng_functions_from_specific_places_131.ttcn | 55 + ...ng_functions_from_specific_places_132.ttcn | 58 + ...ng_functions_from_specific_places_133.ttcn | 58 + ...ng_functions_from_specific_places_134.ttcn | 58 + ...ng_functions_from_specific_places_135.ttcn | 58 + ...ng_functions_from_specific_places_136.ttcn | 55 + ...ng_functions_from_specific_places_137.ttcn | 55 + ...ng_functions_from_specific_places_138.ttcn | 55 + ...ng_functions_from_specific_places_139.ttcn | 55 + ...ng_functions_from_specific_places_140.ttcn | 55 + ...ng_functions_from_specific_places_141.ttcn | 55 + ...ng_functions_from_specific_places_142.ttcn | 50 + ...ng_functions_from_specific_places_143.ttcn | 50 + ...ng_functions_from_specific_places_144.ttcn | 51 + ...ng_functions_from_specific_places_145.ttcn | 51 + ...ng_functions_from_specific_places_146.ttcn | 59 + ...ng_functions_from_specific_places_147.ttcn | 64 + ...ng_functions_from_specific_places_148.ttcn | 65 + ...ng_functions_from_specific_places_149.ttcn | 66 + ...ng_functions_from_specific_places_150.ttcn | 65 + ...ng_functions_from_specific_places_151.ttcn | 66 + ...ng_functions_from_specific_places_152.ttcn | 50 + ...ng_functions_from_specific_places_153.ttcn | 50 + ...ng_functions_from_specific_places_154.ttcn | 50 + ...ng_functions_from_specific_places_155.ttcn | 51 + ...ng_functions_from_specific_places_156.ttcn | 52 + ...ng_functions_from_specific_places_157.ttcn | 49 + ...ng_functions_from_specific_places_158.ttcn | 50 + ...ng_functions_from_specific_places_159.ttcn | 51 + ...ng_functions_from_specific_places_160.ttcn | 51 + ...ng_functions_from_specific_places_161.ttcn | 51 + ...ng_functions_from_specific_places_162.ttcn | 51 + ...ng_functions_from_specific_places_163.ttcn | 57 + ...ng_functions_from_specific_places_164.ttcn | 49 + ...ng_functions_from_specific_places_165.ttcn | 51 + ...ng_functions_from_specific_places_166.ttcn | 55 + ...ng_functions_from_specific_places_167.ttcn | 56 + ...ng_functions_from_specific_places_168.ttcn | 48 + ...ng_functions_from_specific_places_169.ttcn | 53 + ...ng_functions_from_specific_places_170.ttcn | 54 + ...ng_functions_from_specific_places_171.ttcn | 51 + ...ng_functions_from_specific_places_172.ttcn | 51 + ...ng_functions_from_specific_places_173.ttcn | 44 + ...ng_functions_from_specific_places_174.ttcn | 49 + ...ng_functions_from_specific_places_175.ttcn | 52 + ...ng_functions_from_specific_places_176.ttcn | 52 + ...ng_functions_from_specific_places_177.ttcn | 52 + ...ng_functions_from_specific_places_178.ttcn | 52 + ...ng_functions_from_specific_places_179.ttcn | 49 + ...ng_functions_from_specific_places_180.ttcn | 49 + ...ng_functions_from_specific_places_181.ttcn | 47 + ...ng_functions_from_specific_places_182.ttcn | 47 + ...ng_functions_from_specific_places_183.ttcn | 47 + ...ng_functions_from_specific_places_184.ttcn | 47 + ...ng_functions_from_specific_places_185.ttcn | 44 + ...ng_functions_from_specific_places_186.ttcn | 44 + ...ng_functions_from_specific_places_187.ttcn | 45 + ...ng_functions_from_specific_places_188.ttcn | 45 + ...ng_functions_from_specific_places_189.ttcn | 53 + ...ng_functions_from_specific_places_190.ttcn | 58 + ...ng_functions_from_specific_places_191.ttcn | 59 + ...ng_functions_from_specific_places_192.ttcn | 60 + ...ng_functions_from_specific_places_193.ttcn | 59 + ...ng_functions_from_specific_places_194.ttcn | 60 + ...ng_functions_from_specific_places_195.ttcn | 44 + ...ng_functions_from_specific_places_196.ttcn | 44 + ...ng_functions_from_specific_places_197.ttcn | 44 + ...ng_functions_from_specific_places_198.ttcn | 45 + ...ng_functions_from_specific_places_199.ttcn | 46 + ...ng_functions_from_specific_places_200.ttcn | 43 + ...ng_functions_from_specific_places_201.ttcn | 44 + ...ng_functions_from_specific_places_202.ttcn | 45 + ...ng_functions_from_specific_places_203.ttcn | 45 + ...ng_functions_from_specific_places_204.ttcn | 45 + ...ng_functions_from_specific_places_205.ttcn | 45 + ...ng_functions_from_specific_places_206.ttcn | 45 + ...ng_functions_from_specific_places_207.ttcn | 49 + ...ng_functions_from_specific_places_208.ttcn | 49 + ...ng_functions_from_specific_places_209.ttcn | 47 + ...ng_functions_from_specific_places_210.ttcn | 48 + ...ng_functions_from_specific_places_211.ttcn | 44 + ...ng_functions_from_specific_places_212.ttcn | 46 + ...ng_functions_from_specific_places_213.ttcn | 51 + ...ng_functions_from_specific_places_214.ttcn | 54 + ...ng_functions_from_specific_places_215.ttcn | 54 + ...ng_functions_from_specific_places_216.ttcn | 54 + ...ng_functions_from_specific_places_217.ttcn | 54 + ...ng_functions_from_specific_places_218.ttcn | 51 + ...ng_functions_from_specific_places_219.ttcn | 51 + ...ng_functions_from_specific_places_220.ttcn | 51 + ...ng_functions_from_specific_places_221.ttcn | 51 + ...ng_functions_from_specific_places_222.ttcn | 51 + ...ng_functions_from_specific_places_223.ttcn | 51 + ...ng_functions_from_specific_places_224.ttcn | 46 + ...ng_functions_from_specific_places_225.ttcn | 46 + ...ng_functions_from_specific_places_226.ttcn | 47 + ...ng_functions_from_specific_places_227.ttcn | 47 + ...ng_functions_from_specific_places_228.ttcn | 55 + ...ng_functions_from_specific_places_229.ttcn | 60 + ...ng_functions_from_specific_places_230.ttcn | 61 + ...ng_functions_from_specific_places_231.ttcn | 62 + ...ng_functions_from_specific_places_232.ttcn | 61 + ...ng_functions_from_specific_places_233.ttcn | 62 + ...ng_functions_from_specific_places_234.ttcn | 46 + ...ng_functions_from_specific_places_235.ttcn | 46 + ...ng_functions_from_specific_places_236.ttcn | 46 + ...ng_functions_from_specific_places_237.ttcn | 47 + ...ng_functions_from_specific_places_238.ttcn | 48 + ...ng_functions_from_specific_places_239.ttcn | 45 + ...ng_functions_from_specific_places_240.ttcn | 46 + ...ng_functions_from_specific_places_241.ttcn | 47 + ...ng_functions_from_specific_places_242.ttcn | 47 + ...ng_functions_from_specific_places_243.ttcn | 47 + ...ng_functions_from_specific_places_244.ttcn | 47 + ...ng_functions_from_specific_places_245.ttcn | 53 + ...ng_functions_from_specific_places_246.ttcn | 45 + ...ng_functions_from_specific_places_247.ttcn | 47 + ...ng_functions_from_specific_places_248.ttcn | 51 + ...ng_functions_from_specific_places_249.ttcn | 51 + ...ng_functions_from_specific_places_250.ttcn | 44 + ...ng_functions_from_specific_places_251.ttcn | 49 + ...ng_functions_from_specific_places_252.ttcn | 50 + ...ng_functions_from_specific_places_253.ttcn | 46 + ...ng_functions_from_specific_places_254.ttcn | 46 + ...ng_functions_from_specific_places_255.ttcn | 47 + ...ng_functions_from_specific_places_256.ttcn | 52 + ...ng_functions_from_specific_places_257.ttcn | 55 + ...ng_functions_from_specific_places_258.ttcn | 55 + ...ng_functions_from_specific_places_259.ttcn | 55 + ...ng_functions_from_specific_places_260.ttcn | 55 + ...ng_functions_from_specific_places_261.ttcn | 52 + ...ng_functions_from_specific_places_262.ttcn | 52 + ...ng_functions_from_specific_places_263.ttcn | 52 + ...ng_functions_from_specific_places_264.ttcn | 52 + ...ng_functions_from_specific_places_265.ttcn | 52 + ...ng_functions_from_specific_places_266.ttcn | 52 + ...ng_functions_from_specific_places_267.ttcn | 47 + ...ng_functions_from_specific_places_268.ttcn | 47 + ...ng_functions_from_specific_places_269.ttcn | 48 + ...ng_functions_from_specific_places_270.ttcn | 48 + ...ng_functions_from_specific_places_271.ttcn | 56 + ...ng_functions_from_specific_places_272.ttcn | 61 + ...ng_functions_from_specific_places_273.ttcn | 62 + ...ng_functions_from_specific_places_274.ttcn | 63 + ...ng_functions_from_specific_places_275.ttcn | 62 + ...ng_functions_from_specific_places_276.ttcn | 63 + ...ng_functions_from_specific_places_277.ttcn | 47 + ...ng_functions_from_specific_places_278.ttcn | 47 + ...ng_functions_from_specific_places_279.ttcn | 47 + ...ng_functions_from_specific_places_280.ttcn | 48 + ...ng_functions_from_specific_places_281.ttcn | 49 + ...ng_functions_from_specific_places_282.ttcn | 46 + ...ng_functions_from_specific_places_283.ttcn | 47 + ...ng_functions_from_specific_places_284.ttcn | 48 + ...ng_functions_from_specific_places_285.ttcn | 48 + ...ng_functions_from_specific_places_286.ttcn | 48 + ...ng_functions_from_specific_places_287.ttcn | 48 + ...ng_functions_from_specific_places_288.ttcn | 54 + ...ng_functions_from_specific_places_289.ttcn | 46 + ...ng_functions_from_specific_places_290.ttcn | 48 + ...ng_functions_from_specific_places_291.ttcn | 52 + ...ng_functions_from_specific_places_292.ttcn | 52 + ...ng_functions_from_specific_places_293.ttcn | 45 + ...ng_functions_from_specific_places_294.ttcn | 50 + ...ng_functions_from_specific_places_295.ttcn | 51 + ...ng_functions_from_specific_places_296.ttcn | 47 + ...ng_functions_from_specific_places_297.ttcn | 47 + ...ng_functions_from_specific_places_298.ttcn | 46 + ...ng_functions_from_specific_places_299.ttcn | 44 + ...ng_functions_from_specific_places_300.ttcn | 46 + ...ng_functions_from_specific_places_301.ttcn | 42 + ...ng_functions_from_specific_places_302.ttcn | 50 + ...ng_functions_from_specific_places_303.ttcn | 48 + ...ng_functions_from_specific_places_304.ttcn | 50 + ...ng_functions_from_specific_places_305.ttcn | 46 + ...ng_functions_from_specific_places_306.ttcn | 49 + ...ng_functions_from_specific_places_307.ttcn | 47 + ...ng_functions_from_specific_places_308.ttcn | 49 + ...ng_functions_from_specific_places_309.ttcn | 45 + ...ng_functions_from_specific_places_310.ttcn | 53 + ...ng_functions_from_specific_places_311.ttcn | 51 + ...ng_functions_from_specific_places_312.ttcn | 53 + ...ng_functions_from_specific_places_313.ttcn | 49 + ...ng_functions_from_specific_places_314.ttcn | 51 + ...ng_functions_from_specific_places_315.ttcn | 45 + ...ng_functions_from_specific_places_316.ttcn | 51 + ...ng_functions_from_specific_places_317.ttcn | 43 + ...ng_functions_from_specific_places_318.ttcn | 53 + ...ng_functions_from_specific_places_319.ttcn | 47 + ...ng_functions_from_specific_places_320.ttcn | 53 + ...ng_functions_from_specific_places_321.ttcn | 45 + ...ng_functions_from_specific_places_322.ttcn | 54 + ...ng_functions_from_specific_places_323.ttcn | 48 + ...ng_functions_from_specific_places_324.ttcn | 54 + ...ng_functions_from_specific_places_325.ttcn | 46 + .../NegSem_1601_toplevel_001.ttcn | 37 + .../NegSem_1601_toplevel_002.ttcn | 28 + .../NegSem_1601_toplevel_003.ttcn | 43 + .../NegSem_1601_toplevel_004.ttcn | 37 + .../NegSem_1601_toplevel_005.ttcn | 40 + .../NegSem_1601_toplevel_006.ttcn | 43 + .../1601_toplevel/Sem_1601_toplevel_001.ttcn | 37 + .../1601_toplevel/Sem_1601_toplevel_002.ttcn | 35 + .../1601_toplevel/Sem_1601_toplevel_003.ttcn | 43 + .../NegSem_160201_invoking_altsteps_001.ttcn | 66 + .../Sem_160201_invoking_altsteps_001.ttcn | 58 + .../Sem_160201_invoking_altsteps_002.ttcn | 67 + .../Sem_160201_invoking_altsteps_003.ttcn | 58 + .../Sem_160201_invoking_altsteps_004.ttcn | 55 + .../NegSem_1602_toplevel_001.ttcn | 58 + .../NegSem_1602_toplevel_002.ttcn | 51 + .../NegSem_1602_toplevel_003.ttcn | 56 + .../NegSem_1602_toplevel_004.ttcn | 57 + .../NegSem_1602_toplevel_005.ttcn | 50 + .../NegSem_1602_toplevel_006.ttcn | 55 + .../NegSem_1602_toplevel_007.ttcn | 40 + .../NegSem_1602_toplevel_008.ttcn | 47 + .../NegSem_1602_toplevel_009.ttcn | 53 + .../NegSem_1602_toplevel_010.ttcn | 56 + .../NegSem_1602_toplevel_011.ttcn | 56 + .../NegSem_1602_toplevel_012.ttcn | 56 + .../NegSem_1602_toplevel_013.ttcn | 56 + .../NegSem_1602_toplevel_014.ttcn | 53 + .../NegSem_1602_toplevel_015.ttcn | 53 + .../NegSem_1602_toplevel_016.ttcn | 49 + .../NegSem_1602_toplevel_017.ttcn | 49 + .../NegSem_1602_toplevel_018.ttcn | 49 + .../NegSem_1602_toplevel_019.ttcn | 49 + .../NegSem_1602_toplevel_020.ttcn | 47 + .../NegSem_1602_toplevel_021.ttcn | 47 + .../NegSem_1602_toplevel_022.ttcn | 48 + .../NegSem_1602_toplevel_023.ttcn | 48 + .../NegSem_1602_toplevel_024.ttcn | 56 + .../NegSem_1602_toplevel_025.ttcn | 61 + .../NegSem_1602_toplevel_026.ttcn | 62 + .../NegSem_1602_toplevel_027.ttcn | 63 + .../NegSem_1602_toplevel_028.ttcn | 62 + .../NegSem_1602_toplevel_029.ttcn | 63 + .../NegSem_1602_toplevel_030.ttcn | 47 + .../NegSem_1602_toplevel_031.ttcn | 47 + .../NegSem_1602_toplevel_032.ttcn | 47 + .../NegSem_1602_toplevel_033.ttcn | 48 + .../NegSem_1602_toplevel_034.ttcn | 49 + .../NegSem_1602_toplevel_035.ttcn | 47 + .../NegSem_1602_toplevel_036.ttcn | 48 + .../NegSem_1602_toplevel_037.ttcn | 49 + .../NegSem_1602_toplevel_038.ttcn | 49 + .../NegSem_1602_toplevel_039.ttcn | 49 + .../NegSem_1602_toplevel_040.ttcn | 49 + .../NegSem_1602_toplevel_041.ttcn | 53 + .../NegSem_1602_toplevel_042.ttcn | 47 + .../NegSem_1602_toplevel_043.ttcn | 48 + .../NegSem_1602_toplevel_044.ttcn | 52 + .../NegSem_1602_toplevel_045.ttcn | 52 + .../NegSem_1602_toplevel_046.ttcn | 47 + .../NegSem_1602_toplevel_047.ttcn | 51 + .../NegSem_1602_toplevel_048.ttcn | 52 + .../NegSem_1602_toplevel_049.ttcn | 55 + .../NegSem_1602_toplevel_050.ttcn | 53 + .../NegSem_1602_toplevel_051.ttcn | 52 + .../NegSem_1602_toplevel_052.ttcn | 47 + .../NegSyn_1602_toplevel_001.ttcn | 57 + .../1602_toplevel/Sem_1602_toplevel_001.ttcn | 56 + .../1602_toplevel/Sem_1602_toplevel_002.ttcn | 40 + .../1602_toplevel/Sem_1602_toplevel_003.ttcn | 44 + .../NegSem_1603_testcases_001.ttcn | 29 + .../NegSem_1603_testcases_002.ttcn | 29 + .../Syn_1603_testcases_001.ttcn | 24 + .../NOTES | 1 + .../NegSem_1901_assignments_001.ttcn | 26 + .../NegSem_1901_assignments_002.ttcn | 25 + .../NegSem_1901_assignments_003.ttcn | 25 + .../NegSem_1901_assignments_004.ttcn | 39 + .../NegSem_1901_assignments_005.ttcn | 36 + .../NegSem_1901_assignments_006.ttcn | 36 + .../NegSyn_1901_assignments_001.ttcn | 28 + .../Sem_1901_assignments_001.ttcn | 31 + .../Sem_1901_assignments_002.ttcn | 39 + .../Sem_1901_assignments_003.ttcn | 39 + .../Sem_1901_assignments_004.ttcn | 45 + .../NegSyn_1902_if_else_statement_001.ttcn | 29 + .../Sem_1902_if_else_statement_001.ttcn | 36 + .../Sem_1902_if_else_statement_002.ttcn | 28 + ...gSem_190301_select_case_statement_001.ttcn | 44 + ...gSem_190301_select_case_statement_002.ttcn | 44 + .../Sem_190301_select_case_statement_001.ttcn | 38 + .../Sem_190301_select_case_statement_002.ttcn | 38 + .../Sem_190301_select_case_statement_003.ttcn | 36 + .../Sem_190301_select_case_statement_004.ttcn | 38 + .../Sem_190301_select_case_statement_005.ttcn | 38 + .../Sem_190301_select_case_statement_006.ttcn | 37 + ...Sem_190302_select_union_statement_001.ttcn | 39 + ...Sem_190302_select_union_statement_002.ttcn | 48 + ...Sem_190302_select_union_statement_003.ttcn | 45 + ...Sem_190302_select_union_statement_004.ttcn | 43 + ...Sem_190302_select_union_statement_005.ttcn | 39 + ...Sem_190302_select_union_statement_006.ttcn | 41 + ...Sem_190302_select_union_statement_001.ttcn | 38 + ...Sem_190302_select_union_statement_002.ttcn | 39 + ...Sem_190302_select_union_statement_003.ttcn | 41 + ...Sem_190302_select_union_statement_004.ttcn | 40 + ...Sem_190302_select_union_statement_005.ttcn | 39 + ...Sem_190302_select_union_statement_006.ttcn | 42 + .../NegSem_1904_for_statement_001.ttcn | 28 + .../Sem_1904_for_statement_001.ttcn | 33 + .../Sem_1904_for_statement_002.ttcn | 32 + .../Sem_1904_for_statement_003.ttcn | 34 + .../NegSem_1905_while_statement_001.ttcn | 31 + .../Sem_1905_while_statement_001.ttcn | 32 + .../Sem_1905_while_statement_002.ttcn | 32 + .../Sem_1905_while_statement_003.ttcn | 36 + .../NegSem_1906_do_while_statement_001.ttcn | 31 + .../Sem_1906_do_while_statement_001.ttcn | 32 + .../Sem_1906_do_while_statement_002.ttcn | 32 + .../Sem_1906_do_while_statement_003.ttcn | 36 + .../NegSem_1907_label_statement_001.ttcn | 71 + .../NegSyn_1907_label_statement_001.ttcn | 72 + .../NegSyn_1907_label_statement_002.ttcn | 73 + .../Syn_1907_label_statement_001.ttcn | 71 + .../NegSem_1908_goto_statement_001.ttcn | 73 + .../NegSem_1908_goto_statement_002.ttcn | 30 + .../NegSem_1908_goto_statement_003.ttcn | 33 + .../Sem_1908_goto_statement_001.ttcn | 32 + .../Sem_1908_goto_statement_002.ttcn | 33 + .../Sem_1908_goto_statement_003.ttcn | 34 + .../Sem_1909_stop_statement_001.ttcn | 26 + .../Sem_1909_stop_statement_002.ttcn | 27 + .../Sem_1909_stop_statement_003.ttcn | 38 + .../Sem_1909_stop_statement_004.ttcn | 35 + .../1910_return_statement/NOTES | 2 + .../NegSem_1910_return_statement_001.ttcn | 26 + .../Sem_1910_return_statement_001.ttcn | 35 + .../Sem_1910_return_statement_002.ttcn | 35 + .../NegSem_1911_log_statement_001.ttcn | 33 + .../Sem_1911_log_statement_001.ttcn | 30 + .../Sem_1911_log_statement_002.ttcn | 28 + .../Sem_1911_log_statement_003.ttcn | 28 + .../Sem_1911_log_statement_004.ttcn | 34 + .../Sem_1911_log_statement_005.ttcn | 39 + .../1912_break_statement/NOTES | 2 + .../Sem_1913_continue_statement_001.ttcn | 33 + .../1914_statement_block/NOTES | 2 + .../2001_the_snapshot_mechanism/NOTES | 2 + .../2002_the_alt_statement/NOTES | 3 + .../NegSem_2002_TheAltStatement_001.ttcn | 43 + .../NegSem_2002_TheAltStatement_002.ttcn | 39 + .../NegSem_2002_TheAltStatement_003.ttcn | 40 + .../NegSem_2002_TheAltStatement_004.ttcn | 39 + .../NegSem_2002_TheAltStatement_005.ttcn | 39 + .../NegSem_2002_TheAltStatement_006.ttcn | 44 + .../NegSem_2002_TheAltStatement_007.ttcn | 38 + .../NegSem_2002_TheAltStatement_008.ttcn | 40 + .../NegSem_2002_TheAltStatement_009.ttcn | 38 + .../NegSem_2002_TheAltStatement_010.ttcn | 38 + .../NegSem_2002_TheAltStatement_011.ttcn | 43 + .../NegSem_2002_TheAltStatement_012.ttcn | 40 + .../NegSem_2002_TheAltStatement_013.ttcn | 42 + .../NegSem_2002_TheAltStatement_014.ttcn | 40 + .../NegSem_2002_TheAltStatement_015.ttcn | 40 + .../NegSem_2002_TheAltStatement_016.ttcn | 45 + .../NegSem_2002_TheAltStatement_017.ttcn | 44 + .../NegSem_2002_TheAltStatement_018.ttcn | 49 + .../NegSem_2002_TheAltStatement_019.ttcn | 52 + .../NegSem_2002_TheAltStatement_020.ttcn | 52 + .../NegSem_2002_TheAltStatement_021.ttcn | 52 + .../NegSem_2002_TheAltStatement_022.ttcn | 52 + .../NegSem_2002_TheAltStatement_023.ttcn | 49 + .../NegSem_2002_TheAltStatement_024.ttcn | 49 + .../NegSem_2002_TheAltStatement_025.ttcn | 46 + .../NegSem_2002_TheAltStatement_026.ttcn | 46 + .../NegSem_2002_TheAltStatement_027.ttcn | 46 + .../NegSem_2002_TheAltStatement_028.ttcn | 46 + .../NegSem_2002_TheAltStatement_029.ttcn | 44 + .../NegSem_2002_TheAltStatement_030.ttcn | 44 + .../NegSem_2002_TheAltStatement_031.ttcn | 45 + .../NegSem_2002_TheAltStatement_032.ttcn | 45 + .../NegSem_2002_TheAltStatement_033.ttcn | 53 + .../NegSem_2002_TheAltStatement_034.ttcn | 58 + .../NegSem_2002_TheAltStatement_035.ttcn | 59 + .../NegSem_2002_TheAltStatement_036.ttcn | 60 + .../NegSem_2002_TheAltStatement_037.ttcn | 59 + .../NegSem_2002_TheAltStatement_038.ttcn | 60 + .../NegSem_2002_TheAltStatement_039.ttcn | 44 + .../NegSem_2002_TheAltStatement_040.ttcn | 44 + .../NegSem_2002_TheAltStatement_041.ttcn | 44 + .../NegSem_2002_TheAltStatement_042.ttcn | 45 + .../NegSem_2002_TheAltStatement_043.ttcn | 46 + .../NegSem_2002_TheAltStatement_044.ttcn | 44 + .../NegSem_2002_TheAltStatement_045.ttcn | 45 + .../NegSem_2002_TheAltStatement_046.ttcn | 46 + .../NegSem_2002_TheAltStatement_047.ttcn | 46 + .../NegSem_2002_TheAltStatement_048.ttcn | 46 + .../NegSem_2002_TheAltStatement_049.ttcn | 46 + .../NegSem_2002_TheAltStatement_050.ttcn | 50 + .../NegSem_2002_TheAltStatement_051.ttcn | 44 + .../NegSem_2002_TheAltStatement_052.ttcn | 45 + .../NegSem_2002_TheAltStatement_053.ttcn | 49 + .../NegSem_2002_TheAltStatement_054.ttcn | 49 + .../NegSem_2002_TheAltStatement_055.ttcn | 44 + .../NegSem_2002_TheAltStatement_056.ttcn | 48 + .../NegSem_2002_TheAltStatement_057.ttcn | 49 + .../NegSem_2002_TheAltStatement_058.ttcn | 45 + .../NegSem_2002_TheAltStatement_059.ttcn | 45 + .../NegSem_2002_TheAltStatement_060.ttcn | 40 + .../NegSem_2002_TheAltStatement_061.ttcn | 38 + .../NegSem_2002_TheAltStatement_062.ttcn | 40 + .../NegSem_2002_TheAltStatement_063.ttcn | 38 + .../NegSem_2002_TheAltStatement_064.ttcn | 42 + .../NegSem_2002_TheAltStatement_065.ttcn | 40 + .../NegSem_2002_TheAltStatement_066.ttcn | 39 + .../NegSem_2002_TheAltStatement_067.ttcn | 39 + .../NegSem_2002_TheAltStatement_068.ttcn | 39 + .../NegSem_2002_TheAltStatement_069.ttcn | 39 + .../NegSem_2002_TheAltStatement_070.ttcn | 41 + .../NegSem_2002_TheAltStatement_071.ttcn | 41 + .../NegSem_2002_TheAltStatement_072.ttcn | 44 + .../NegSem_2002_TheAltStatement_073.ttcn | 40 + .../NegSem_2002_TheAltStatement_074.ttcn | 40 + .../NegSem_2002_TheAltStatement_075.ttcn | 40 + .../NegSem_2002_TheAltStatement_076.ttcn | 40 + .../NegSem_2002_TheAltStatement_077.ttcn | 42 + .../NegSem_2002_TheAltStatement_078.ttcn | 42 + .../NegSem_2002_TheAltStatement_079.ttcn | 45 + .../NegSem_2002_TheAltStatement_080.ttcn | 43 + .../NegSem_2002_TheAltStatement_081.ttcn | 43 + .../NegSem_2002_TheAltStatement_082.ttcn | 43 + .../NegSem_2002_TheAltStatement_083.ttcn | 43 + .../NegSem_2002_TheAltStatement_084.ttcn | 45 + .../NegSem_2002_TheAltStatement_085.ttcn | 45 + .../NegSem_2002_TheAltStatement_086.ttcn | 48 + .../NegSem_2002_TheAltStatement_087.ttcn | 52 + .../NegSem_2002_TheAltStatement_088.ttcn | 50 + .../NegSem_2002_TheAltStatement_089.ttcn | 49 + .../NegSem_2002_TheAltStatement_090.ttcn | 44 + .../Sem_2002_TheAltStatement_001.ttcn | 33 + .../Sem_2002_TheAltStatement_002.ttcn | 34 + .../Sem_2002_TheAltStatement_003.ttcn | 39 + .../Sem_2002_TheAltStatement_004.ttcn | 52 + .../Sem_2002_TheAltStatement_005.ttcn | 44 + .../Sem_2002_TheAltStatement_006.ttcn | 46 + .../Sem_2002_TheAltStatement_007.ttcn | 52 + .../Sem_2002_TheAltStatement_008.ttcn | 49 + .../Sem_2002_TheAltStatement_009.ttcn | 49 + .../Sem_2002_TheAltStatement_010.ttcn | 27 + .../Sem_2002_TheAltStatement_011.ttcn | 33 + .../Sem_2002_TheAltStatement_012.ttcn | 52 + .../Sem_2002_TheAltStatement_013.ttcn | 50 + .../Sem_2002_TheAltStatement_014.ttcn | 45 + .../NegSem_2003_the_repeat_statement_001.ttcn | 40 + .../Sem_2003_the_repeat_statement_001.ttcn | 46 + .../Sem_2003_the_repeat_statement_002.ttcn | 50 + .../Sem_2003_the_repeat_statement_003.ttcn | 45 + .../Sem_2003_the_repeat_statement_004.ttcn | 45 + .../NegSem_2004_InterleaveStatement_001.ttcn | 63 + .../NegSem_2004_InterleaveStatement_002.ttcn | 49 + .../NegSem_2004_InterleaveStatement_003.ttcn | 48 + .../NegSem_2004_InterleaveStatement_004.ttcn | 45 + .../NegSem_2004_InterleaveStatement_005.ttcn | 46 + .../NegSem_2004_InterleaveStatement_006.ttcn | 41 + .../NegSem_2004_InterleaveStatement_008.ttcn | 41 + .../NegSem_2004_InterleaveStatement_010.ttcn | 47 + .../NegSem_2004_InterleaveStatement_011.ttcn | 46 + .../NegSem_2004_InterleaveStatement_012.ttcn | 52 + .../NegSem_2004_InterleaveStatement_013.ttcn | 46 + .../NegSyn_2004_InterleaveStatement_001.ttcn | 62 + .../NegSyn_2004_InterleaveStatement_002.ttcn | 61 + .../Sem_2004_InterleaveStatement_001.ttcn | 66 + .../Sem_2004_InterleaveStatement_002.ttcn | 67 + .../Sem_2004_InterleaveStatement_003.ttcn | 50 + .../Sem_2004_InterleaveStatement_004.ttcn | 65 + .../Sem_2004_InterleaveStatement_005.ttcn | 45 + .../Sem_2004_InterleaveStatement_006.ttcn | 45 + .../Sem_2004_InterleaveStatement_007.ttcn | 43 + .../Sem_2004_InterleaveStatement_008.ttcn | 44 + .../Sem_2004_InterleaveStatement_009.ttcn | 38 + .../Sem_2004_InterleaveStatement_010.ttcn | 41 + .../Syn_2004_InterleaveStatement_001.ttcn | 53 + ...gSem_200501_the_default_mechanism_001.ttcn | 63 + .../Sem_200501_the_default_mechanism_001.ttcn | 44 + .../Sem_200501_the_default_mechanism_002.ttcn | 55 + .../Sem_200501_the_default_mechanism_003.ttcn | 55 + .../Sem_200501_the_default_mechanism_004.ttcn | 64 + .../Sem_200501_the_default_mechanism_005.ttcn | 66 + .../Sem_200501_the_default_mechanism_006.ttcn | 50 + .../Sem_200501_the_default_mechanism_007.ttcn | 54 + .../Sem_200501_the_default_mechanism_008.ttcn | 43 + ...Sem_200502_the_activate_operation_001.ttcn | 38 + ...Sem_200502_the_activate_operation_002.ttcn | 33 + ...Sem_200502_the_activate_operation_003.ttcn | 28 + ...Sem_200502_the_activate_operation_004.ttcn | 28 + ...Sem_200502_the_activate_operation_005.ttcn | 31 + ...Sem_200502_the_activate_operation_006.ttcn | 47 + ...Sem_200502_the_activate_operation_007.ttcn | 52 + ...Sem_200502_the_activate_operation_001.ttcn | 36 + ...Sem_200502_the_activate_operation_002.ttcn | 48 + ...Sem_200502_the_activate_operation_003.ttcn | 31 + ...Sem_200502_the_activate_operation_004.ttcn | 36 + ...Sem_200502_the_activate_operation_005.ttcn | 43 + ...Sem_200502_the_activate_operation_006.ttcn | 48 + ...m_200503_the_deactivate_operation_001.ttcn | 43 + ...m_200503_the_deactivate_operation_002.ttcn | 47 + ...m_200503_the_deactivate_operation_003.ttcn | 41 + ...m_200503_the_deactivate_operation_001.ttcn | 49 + ...m_200503_the_deactivate_operation_002.ttcn | 57 + ...m_200503_the_deactivate_operation_003.ttcn | 53 + ...m_200503_the_deactivate_operation_004.ttcn | 42 + .../20_toplevel/Syn_20_TopLevel_001.ttcn | 36 + .../20_toplevel/Syn_20_TopLevel_002.ttcn | 34 + .../20_toplevel/Syn_20_TopLevel_003.ttcn | 33 + .../20_toplevel/Syn_20_TopLevel_004.ttcn | 36 + .../20_toplevel/Syn_20_TopLevel_005.ttcn | 37 + .../210101_connect_and_map_operations/NOTES | 1 + ...210101_connect_and_map_operations_001.ttcn | 58 + ...210101_connect_and_map_operations_002.ttcn | 65 + ...210101_connect_and_map_operations_003.ttcn | 54 + ...210101_connect_and_map_operations_004.ttcn | 61 + ...210101_connect_and_map_operations_005.ttcn | 31 + ...210101_connect_and_map_operations_006.ttcn | 32 + ...210101_connect_and_map_operations_007.ttcn | 32 + ...210101_connect_and_map_operations_008.ttcn | 42 + ...210101_connect_and_map_operations_009.ttcn | 42 + ...210101_connect_and_map_operations_010.ttcn | 39 + ...210101_connect_and_map_operations_011.ttcn | 42 + ...210101_connect_and_map_operations_012.ttcn | 42 + ...210101_connect_and_map_operations_013.ttcn | 40 + ...210101_connect_and_map_operations_014.ttcn | 42 + .../NegSem_210101_connect_operation_001.ttcn | 33 + .../NegSem_210101_map_operation_002.ttcn | 37 + ...210101_connect_and_map_operations_001.ttcn | 84 + ...210101_connect_and_map_operations_002.ttcn | 86 + ...210101_connect_and_map_operations_003.ttcn | 86 + ...210101_connect_and_map_operations_004.ttcn | 86 + ...210101_connect_and_map_operations_005.ttcn | 58 + ...210101_connect_and_map_operations_006.ttcn | 59 + ...210101_connect_and_map_operations_007.ttcn | 61 + ...210101_connect_and_map_operations_008.ttcn | 61 + ...210101_connect_and_map_operations_009.ttcn | 53 + ...210101_connect_and_map_operations_010.ttcn | 36 + ...210101_connect_and_map_operations_011.ttcn | 34 + ...210101_connect_and_map_operations_012.ttcn | 40 + ...2_disconnect_and_unmap_operations_001.ttcn | 35 + ...2_disconnect_and_unmap_operations_002.ttcn | 37 + ...2_disconnect_and_unmap_operations_003.ttcn | 38 + ...2_disconnect_and_unmap_operations_004.ttcn | 32 + ...2_disconnect_and_unmap_operations_005.ttcn | 33 + ...2_disconnect_and_unmap_operations_006.ttcn | 33 + ...2_disconnect_and_unmap_operations_007.ttcn | 38 + ...2_disconnect_and_unmap_operations_008.ttcn | 43 + ...2_disconnect_and_unmap_operations_009.ttcn | 43 + ...2_disconnect_and_unmap_operations_010.ttcn | 41 + ...2_disconnect_and_unmap_operations_011.ttcn | 43 + ...2_disconnect_and_unmap_operations_012.ttcn | 43 + ...2_disconnect_and_unmap_operations_013.ttcn | 41 + ...2_disconnect_and_unmap_operations_014.ttcn | 43 + ...2_disconnect_and_unmap_operations_001.ttcn | 52 + ...2_disconnect_and_unmap_operations_002.ttcn | 53 + ...2_disconnect_and_unmap_operations_003.ttcn | 68 + ...2_disconnect_and_unmap_operations_004.ttcn | 58 + ...2_disconnect_and_unmap_operations_005.ttcn | 50 + ...2_disconnect_and_unmap_operations_006.ttcn | 50 + ...2_disconnect_and_unmap_operations_007.ttcn | 58 + ...2_disconnect_and_unmap_operations_008.ttcn | 57 + ...2_disconnect_and_unmap_operations_009.ttcn | 54 + ...2_disconnect_and_unmap_operations_010.ttcn | 34 + ...2_disconnect_and_unmap_operations_011.ttcn | 60 + ...2_disconnect_and_unmap_operations_012.ttcn | 37 + ...2_disconnect_and_unmap_operations_013.ttcn | 38 + .../Sem_210102_disconnect_operation_001.ttcn | 59 + .../Sem_210102_disconnect_operation_002.ttcn | 43 + .../Sem_210102_disconnect_operation_003.ttcn | 37 + .../Sem_210102_unmap_operation_001.ttcn | 50 + .../Sem_210102_unmap_operation_002.ttcn | 50 + .../NegSem_2101_TopLevel_001.ttcn | 28 + .../NegSem_2101_TopLevel_002.ttcn | 29 + .../NegSem_2102_testcase_stop_001.ttcn | 22 + .../NegSem_210301_CreateOperation_001.ttcn | 19 + .../NegSem_210301_CreateOperation_002.ttcn | 19 + .../NegSem_210301_CreateOperation_003.ttcn | 19 + .../Sem_210301_CreateOperation_001.ttcn | 43 + .../Sem_210301_CreateOperation_002.ttcn | 45 + .../Sem_210301_CreateOperation_003.ttcn | 44 + .../Sem_210301_CreateOperation_004.ttcn | 46 + .../Syn_210301_CreateOperation_001.ttcn | 45 + ...egSem_210302_Start_test_component_001.ttcn | 28 + ...egSem_210302_Start_test_component_002.ttcn | 25 + ...egSem_210302_Start_test_component_004.ttcn | 33 + ...egSem_210302_Start_test_component_005.ttcn | 33 + ...egSem_210302_Start_test_component_006.ttcn | 38 + ...egSem_210302_Start_test_component_007.ttcn | 38 + ...egSem_210302_Start_test_component_008.ttcn | 39 + ...egSem_210302_Start_test_component_009.ttcn | 36 + ...egSem_210302_Start_test_component_010.ttcn | 34 + ...egSem_210302_Start_test_component_011.ttcn | 41 + ...egSem_210302_Start_test_component_012.ttcn | 40 + .../Sem_210302_Start_test_component_001.ttcn | 28 + .../Sem_210302_Start_test_component_002.ttcn | 31 + .../Sem_210302_Start_test_component_003.ttcn | 34 + .../Sem_210302_Start_test_component_004.ttcn | 41 + .../Sem_210302_Start_test_component_005.ttcn | 41 + .../Sem_210302_Start_test_component_006.ttcn | 45 + .../Sem_210302_Start_test_component_007.ttcn | 39 + .../Sem_210302_Start_test_component_008.ttcn | 42 + .../Sem_210302_Start_test_component_009.ttcn | 54 + .../Sem_210302_Start_test_component_010.ttcn | 37 + .../Sem_210302_Start_test_component_011.ttcn | 41 + .../Sem_210302_Start_test_component_012.ttcn | 46 + .../Sem_210302_Start_test_component_013.ttcn | 28 + .../Sem_210302_Start_test_component_014.ttcn | 39 + ...NegSem_210303_Stop_test_component_001.ttcn | 37 + ...NegSem_210303_Stop_test_component_002.ttcn | 36 + ...NegSem_210303_Stop_test_component_003.ttcn | 40 + ...NegSem_210303_Stop_test_component_004.ttcn | 46 + .../Sem_210303_Stop_test_component_001.ttcn | 46 + .../Sem_210303_Stop_test_component_002.ttcn | 35 + .../Sem_210303_Stop_test_component_003.ttcn | 43 + .../Sem_210303_Stop_test_component_004.ttcn | 52 + .../Sem_210303_Stop_test_component_005.ttcn | 40 + .../Sem_210303_Stop_test_component_006.ttcn | 52 + .../Sem_210303_Stop_test_component_007.ttcn | 51 + .../Sem_210303_Stop_test_component_008.ttcn | 50 + .../Sem_210303_Stop_test_component_009.ttcn | 46 + .../Sem_210303_Stop_test_component_010.ttcn | 57 + .../Sem_210303_Stop_test_component_011.ttcn | 41 + ...NegSem_210304_kill_test_component_001.ttcn | 39 + ...NegSem_210304_kill_test_component_002.ttcn | 39 + ...NegSem_210304_kill_test_component_003.ttcn | 36 + ...NegSem_210304_kill_test_component_004.ttcn | 40 + ...NegSem_210304_kill_test_component_005.ttcn | 46 + .../Sem_210304_kill_test_component_001.ttcn | 44 + .../Sem_210304_kill_test_component_002.ttcn | 39 + .../Sem_210304_kill_test_component_003.ttcn | 39 + .../Sem_210304_kill_test_component_004.ttcn | 34 + .../Sem_210304_kill_test_component_005.ttcn | 40 + .../Sem_210304_kill_test_component_006.ttcn | 39 + .../NegSem_210305_alive_operation_001.ttcn | 35 + .../NegSem_210305_alive_operation_002.ttcn | 42 + .../NegSem_210305_alive_operation_003.ttcn | 42 + .../NegSem_210305_alive_operation_004.ttcn | 46 + .../NegSem_210305_alive_operation_005.ttcn | 46 + .../NegSem_210305_alive_operation_006.ttcn | 37 + .../NegSyn_210305_alive_operation_001.ttcn | 37 + .../NegSyn_210305_alive_operation_002.ttcn | 37 + .../NegSyn_210305_alive_operation_003.ttcn | 37 + .../NegSyn_210305_alive_operation_004.ttcn | 41 + .../Sem_210305_alive_operation_001.ttcn | 47 + .../Sem_210305_alive_operation_002.ttcn | 39 + .../Sem_210305_alive_operation_003.ttcn | 38 + .../Sem_210305_alive_operation_004.ttcn | 39 + .../Sem_210305_alive_operation_005.ttcn | 36 + .../Sem_210305_alive_operation_006.ttcn | 36 + .../Sem_210305_alive_operation_007.ttcn | 43 + .../Sem_210305_alive_operation_008.ttcn | 34 + .../Sem_210305_alive_operation_009.ttcn | 41 + .../Sem_210305_alive_operation_010.ttcn | 41 + .../Sem_210305_alive_operation_011.ttcn | 46 + .../Sem_210305_alive_operation_012.ttcn | 34 + .../Sem_210305_alive_operation_013.ttcn | 45 + .../Sem_210305_alive_operation_014.ttcn | 45 + .../Sem_210305_alive_operation_015.ttcn | 28 + .../NegSem_210306_running_operation_001.ttcn | 35 + .../NegSem_210306_running_operation_002.ttcn | 42 + .../NegSem_210306_running_operation_003.ttcn | 42 + .../NegSem_210306_running_operation_004.ttcn | 46 + .../NegSem_210306_running_operation_005.ttcn | 46 + .../NegSem_210306_running_operation_006.ttcn | 37 + .../NegSyn_210306_running_operation_001.ttcn | 37 + .../NegSyn_210306_running_operation_002.ttcn | 37 + .../NegSyn_210306_running_operation_003.ttcn | 37 + .../NegSyn_210306_running_operation_004.ttcn | 41 + .../Sem_210306_running_operation_001.ttcn | 36 + .../Sem_210306_running_operation_002.ttcn | 37 + .../Sem_210306_running_operation_003.ttcn | 35 + .../Sem_210306_running_operation_004.ttcn | 42 + .../Sem_210306_running_operation_005.ttcn | 34 + .../Sem_210306_running_operation_006.ttcn | 34 + .../Sem_210306_running_operation_007.ttcn | 41 + .../Sem_210306_running_operation_008.ttcn | 41 + .../Sem_210306_running_operation_009.ttcn | 46 + .../Sem_210306_running_operation_010.ttcn | 45 + .../Sem_210306_running_operation_011.ttcn | 45 + .../Sem_210306_running_operation_012.ttcn | 45 + .../Sem_210306_running_operation_013.ttcn | 33 + .../NegSem_210307_done_operation_001.ttcn | 29 + .../NegSem_210307_done_operation_002.ttcn | 33 + .../NegSem_210307_done_operation_003.ttcn | 48 + .../NegSem_210307_done_operation_004.ttcn | 48 + .../NegSem_210307_done_operation_005.ttcn | 52 + .../NegSem_210307_done_operation_006.ttcn | 52 + .../NegSem_210307_done_operation_007.ttcn | 34 + .../NegSem_210307_done_operation_008.ttcn | 34 + .../NegSem_210307_done_operation_009.ttcn | 34 + .../NegSem_210307_done_operation_010.ttcn | 34 + .../NegSyn_210307_done_operation_001.ttcn | 35 + .../NegSyn_210307_done_operation_002.ttcn | 35 + .../NegSyn_210307_done_operation_003.ttcn | 35 + .../NegSyn_210307_done_operation_004.ttcn | 38 + .../Sem_210307_done_operation_001.ttcn | 35 + .../Sem_210307_done_operation_002.ttcn | 32 + .../Sem_210307_done_operation_003.ttcn | 43 + .../Sem_210307_done_operation_004.ttcn | 43 + .../Sem_210307_done_operation_005.ttcn | 43 + .../Sem_210307_done_operation_006.ttcn | 48 + .../Sem_210307_done_operation_007.ttcn | 39 + .../Sem_210307_done_operation_008.ttcn | 54 + .../Sem_210307_done_operation_009.ttcn | 52 + .../Sem_210307_done_operation_010.ttcn | 52 + .../Sem_210307_done_operation_011.ttcn | 39 + .../Sem_210307_done_operation_012.ttcn | 36 + .../NegSem_210308_killed_operation_001.ttcn | 32 + .../NegSem_210308_killed_operation_002.ttcn | 33 + .../NegSem_210308_killed_operation_003.ttcn | 48 + .../NegSem_210308_killed_operation_004.ttcn | 48 + .../NegSem_210308_killed_operation_005.ttcn | 52 + .../NegSem_210308_killed_operation_006.ttcn | 52 + .../NegSem_210308_killed_operation_007.ttcn | 34 + .../NegSem_210308_killed_operation_008.ttcn | 34 + .../NegSem_210308_killed_operation_009.ttcn | 34 + .../NegSem_210308_killed_operation_010.ttcn | 34 + .../NegSyn_210308_killed_operation_001.ttcn | 35 + .../NegSyn_210308_killed_operation_002.ttcn | 35 + .../NegSyn_210308_killed_operation_003.ttcn | 35 + .../NegSyn_210308_killed_operation_004.ttcn | 38 + .../Sem_210308_killed_operation_001.ttcn | 35 + .../Sem_210308_killed_operation_002.ttcn | 34 + .../Sem_210308_killed_operation_003.ttcn | 35 + .../Sem_210308_killed_operation_004.ttcn | 32 + .../Sem_210308_killed_operation_005.ttcn | 43 + .../Sem_210308_killed_operation_006.ttcn | 43 + .../Sem_210308_killed_operation_007.ttcn | 43 + .../Sem_210308_killed_operation_008.ttcn | 49 + .../Sem_210308_killed_operation_009.ttcn | 39 + .../Sem_210308_killed_operation_010.ttcn | 55 + .../Sem_210308_killed_operation_011.ttcn | 52 + .../Sem_210308_killed_operation_012.ttcn | 52 + .../Sem_210308_killed_operation_013.ttcn | 42 + .../Sem_210308_killed_operation_014.ttcn | 36 + .../210309_any_and_all_components/NOTES | 1 + .../NegSem_220201_SendOperation_001.ttcn | 104 + .../NegSem_220201_SendOperation_002.ttcn | 104 + .../NegSem_220201_SendOperation_003.ttcn | 39 + .../NegSem_220201_SendOperation_004.ttcn | 63 + .../NegSem_220201_SendOperation_005.ttcn | 51 + .../NegSem_220201_SendOperation_006.ttcn | 35 + .../NegSem_220201_SendOperation_007.ttcn | 41 + .../NegSem_220201_SendOperation_008.ttcn | 34 + .../NegSem_220201_SendOperation_009.ttcn | 35 + .../NegSem_220201_SendOperation_010.ttcn | 34 + .../NegSem_220201_SendOperation_011.ttcn | 31 + .../Sem_220201_SendOperation_001.ttcn | 104 + .../Sem_220201_SendOperation_002.ttcn | 39 + .../Sem_220201_SendOperation_003.ttcn | 50 + .../Sem_220201_SendOperation_004.ttcn | 39 + .../Sem_220201_SendOperation_005.ttcn | 49 + .../Sem_220201_SendOperation_006.ttcn | 49 + .../Sem_220201_SendOperation_007.ttcn | 47 + .../NegSem_220202_ReceiveOperation_001.ttcn | 63 + .../NegSem_220202_ReceiveOperation_002.ttcn | 40 + .../NegSem_220202_ReceiveOperation_003.ttcn | 34 + .../NegSem_220202_ReceiveOperation_004.ttcn | 43 + .../NegSem_220202_ReceiveOperation_005.ttcn | 46 + .../NegSem_220202_ReceiveOperation_006.ttcn | 42 + .../NegSem_220202_ReceiveOperation_007.ttcn | 42 + .../NegSem_220202_ReceiveOperation_008.ttcn | 42 + .../NegSem_220202_ReceiveOperation_009.ttcn | 43 + .../NegSem_220202_ReceiveOperation_010.ttcn | 36 + .../NegSem_220202_ReceiveOperation_011.ttcn | 37 + .../NegSem_220202_ReceiveOperation_012.ttcn | 34 + .../NegSem_220202_ReceiveOperation_013.ttcn | 35 + .../NegSem_220202_ReceiveOperation_014.ttcn | 36 + .../NegSem_220202_ReceiveOperation_015.ttcn | 37 + .../NegSem_220202_ReceiveOperation_016.ttcn | 36 + .../NegSem_220202_ReceiveOperation_017.ttcn | 33 + .../NegSem_220202_ReceiveOperation_018.ttcn | 33 + .../NegSem_220202_ReceiveOperation_019.ttcn | 32 + .../NegSem_220202_ReceiveOperation_020.ttcn | 33 + .../NegSem_220202_ReceiveOperation_021.ttcn | 34 + .../NegSem_220202_ReceiveOperation_022.ttcn | 38 + .../NegSem_220202_ReceiveOperation_023.ttcn | 47 + .../NegSem_220202_ReceiveOperation_024.ttcn | 41 + .../Sem_220202_ReceiveOperation_001.ttcn | 41 + .../Sem_220202_ReceiveOperation_002.ttcn | 38 + .../Sem_220202_ReceiveOperation_003.ttcn | 44 + .../Sem_220202_ReceiveOperation_004.ttcn | 49 + .../Sem_220202_ReceiveOperation_005.ttcn | 38 + .../Sem_220202_ReceiveOperation_006.ttcn | 52 + .../Sem_220202_ReceiveOperation_007.ttcn | 53 + .../Sem_220202_ReceiveOperation_008.ttcn | 50 + .../Sem_220202_ReceiveOperation_009.ttcn | 48 + .../Sem_220202_ReceiveOperation_010.ttcn | 45 + .../Sem_220202_ReceiveOperation_011.ttcn | 48 + .../Sem_220202_ReceiveOperation_012.ttcn | 48 + .../Sem_220202_ReceiveOperation_013.ttcn | 48 + .../Sem_220202_ReceiveOperation_014.ttcn | 48 + .../Sem_220202_ReceiveOperation_015.ttcn | 48 + .../Sem_220202_ReceiveOperation_016.ttcn | 46 + .../Sem_220202_ReceiveOperation_017.ttcn | 35 + .../Sem_220202_ReceiveOperation_018.ttcn | 35 + .../Sem_220202_ReceiveOperation_019.ttcn | 35 + .../Sem_220202_ReceiveOperation_020.ttcn | 46 + .../Sem_220202_ReceiveOperation_021.ttcn | 48 + .../Sem_220202_ReceiveOperation_022.ttcn | 38 + .../Sem_220202_ReceiveOperation_023.ttcn | 35 + .../Sem_220202_ReceiveOperation_024.ttcn | 42 + .../Sem_220202_ReceiveOperation_025.ttcn | 44 + .../Sem_220202_ReceiveOperation_026.ttcn | 42 + .../Sem_220202_ReceiveOperation_027.ttcn | 42 + .../Sem_220202_ReceiveOperation_028.ttcn | 44 + .../Sem_220202_ReceiveOperation_029.ttcn | 42 + .../Sem_220202_ReceiveOperation_030.ttcn | 39 + .../NegSem_220203_TriggerOperation_001.ttcn | 63 + .../NegSem_220203_TriggerOperation_002.ttcn | 41 + .../NegSem_220203_TriggerOperation_003.ttcn | 34 + .../NegSem_220203_TriggerOperation_004.ttcn | 43 + .../NegSem_220203_TriggerOperation_005.ttcn | 46 + .../NegSem_220203_TriggerOperation_006.ttcn | 42 + .../NegSem_220203_TriggerOperation_007.ttcn | 42 + .../NegSem_220203_TriggerOperation_008.ttcn | 42 + .../NegSem_220203_TriggerOperation_009.ttcn | 43 + .../NegSem_220203_TriggerOperation_010.ttcn | 37 + .../NegSem_220203_TriggerOperation_011.ttcn | 37 + .../NegSem_220203_TriggerOperation_012.ttcn | 34 + .../NegSem_220203_TriggerOperation_013.ttcn | 35 + .../NegSem_220203_TriggerOperation_014.ttcn | 36 + .../NegSem_220203_TriggerOperation_015.ttcn | 37 + .../NegSem_220203_TriggerOperation_016.ttcn | 36 + .../NegSem_220203_TriggerOperation_017.ttcn | 33 + .../NegSem_220203_TriggerOperation_018.ttcn | 33 + .../NegSem_220203_TriggerOperation_019.ttcn | 32 + .../NegSem_220203_TriggerOperation_020.ttcn | 33 + .../NegSem_220203_TriggerOperation_021.ttcn | 34 + .../NegSem_220203_TriggerOperation_022.ttcn | 38 + .../NegSem_220203_TriggerOperation_023.ttcn | 49 + .../NegSem_220203_TriggerOperation_024.ttcn | 44 + .../Sem_220203_TriggerOperation_001.ttcn | 47 + .../Sem_220203_TriggerOperation_002.ttcn | 43 + .../Sem_220203_TriggerOperation_003.ttcn | 49 + .../Sem_220203_TriggerOperation_004.ttcn | 59 + .../Sem_220203_TriggerOperation_005.ttcn | 42 + .../Sem_220203_TriggerOperation_006.ttcn | 52 + .../Sem_220203_TriggerOperation_007.ttcn | 52 + .../Sem_220203_TriggerOperation_008.ttcn | 50 + .../Sem_220203_TriggerOperation_009.ttcn | 48 + .../Sem_220203_TriggerOperation_010.ttcn | 45 + .../Sem_220203_TriggerOperation_011.ttcn | 48 + .../Sem_220203_TriggerOperation_012.ttcn | 48 + .../Sem_220203_TriggerOperation_013.ttcn | 48 + .../Sem_220203_TriggerOperation_014.ttcn | 48 + .../Sem_220203_TriggerOperation_015.ttcn | 48 + .../Sem_220203_TriggerOperation_016.ttcn | 46 + .../Sem_220203_TriggerOperation_017.ttcn | 36 + .../Sem_220203_TriggerOperation_018.ttcn | 35 + .../Sem_220203_TriggerOperation_019.ttcn | 37 + .../Sem_220203_TriggerOperation_020.ttcn | 48 + .../Sem_220203_TriggerOperation_021.ttcn | 50 + .../Sem_220203_TriggerOperation_022.ttcn | 41 + .../Sem_220203_TriggerOperation_023.ttcn | 42 + .../Sem_220203_TriggerOperation_024.ttcn | 44 + .../Sem_220203_TriggerOperation_025.ttcn | 42 + .../Sem_220203_TriggerOperation_026.ttcn | 42 + .../Sem_220203_TriggerOperation_027.ttcn | 44 + .../Sem_220203_TriggerOperation_028.ttcn | 42 + .../NegSem_220301_CallOperation_001.ttcn | 38 + .../NegSem_220301_CallOperation_002.ttcn | 121 + .../NegSem_220301_CallOperation_003.ttcn | 36 + .../NegSem_220301_CallOperation_004.ttcn | 36 + .../NegSem_220301_CallOperation_005.ttcn | 36 + .../NegSem_220301_CallOperation_006.ttcn | 49 + .../NegSem_220301_CallOperation_007.ttcn | 37 + .../NegSem_220301_CallOperation_008.ttcn | 37 + .../NegSem_220301_CallOperation_009.ttcn | 37 + .../NegSem_220301_CallOperation_010.ttcn | 37 + .../NegSem_220301_CallOperation_011.ttcn | 37 + .../NegSem_220301_CallOperation_012.ttcn | 50 + .../NegSem_220301_CallOperation_013.ttcn | 42 + .../NegSem_220301_CallOperation_014.ttcn | 44 + .../NegSem_220301_CallOperation_015.ttcn | 44 + .../NegSem_220301_CallOperation_016.ttcn | 46 + .../NegSem_220301_CallOperation_017.ttcn | 49 + .../NegSem_220301_CallOperation_018.ttcn | 42 + .../NegSem_220301_CallOperation_019.ttcn | 42 + .../NegSem_220301_CallOperation_020.ttcn | 31 + .../NegSyn_220301_CallOperation_001.ttcn | 41 + .../NegSyn_220301_CallOperation_002.ttcn | 45 + .../Sem_220301_CallOperation_001.ttcn | 120 + .../Sem_220301_CallOperation_002.ttcn | 120 + .../Sem_220301_CallOperation_003.ttcn | 124 + .../Sem_220301_CallOperation_004.ttcn | 120 + .../Sem_220301_CallOperation_005.ttcn | 123 + .../Sem_220301_CallOperation_006.ttcn | 118 + .../Sem_220301_CallOperation_007.ttcn | 120 + .../Sem_220301_CallOperation_008.ttcn | 53 + .../Sem_220301_CallOperation_009.ttcn | 40 + .../Sem_220301_CallOperation_010.ttcn | 49 + .../Sem_220301_CallOperation_011.ttcn | 54 + .../Sem_220301_CallOperation_012.ttcn | 65 + .../Sem_220301_CallOperation_013.ttcn | 63 + .../Sem_220301_CallOperation_014.ttcn | 54 + .../Sem_220301_CallOperation_015.ttcn | 62 + .../Sem_220301_CallOperation_016.ttcn | 44 + .../Sem_220301_CallOperation_017.ttcn | 36 + .../Sem_220301_CallOperation_018.ttcn | 36 + .../Sem_220301_CallOperation_019.ttcn | 47 + .../Sem_220301_CallOperation_020.ttcn | 47 + .../NegSem_220302_GetcallOperation_001.ttcn | 38 + .../NegSem_220302_GetcallOperation_002.ttcn | 123 + .../NegSem_220302_GetcallOperation_003.ttcn | 122 + .../NegSem_220302_getcall_operation_004.ttcn | 44 + .../NegSem_220302_getcall_operation_005.ttcn | 54 + .../NegSem_220302_getcall_operation_006.ttcn | 54 + .../NegSem_220302_getcall_operation_007.ttcn | 60 + .../NegSem_220302_getcall_operation_008.ttcn | 59 + .../NegSem_220302_getcall_operation_009.ttcn | 46 + .../NegSem_220302_getcall_operation_010.ttcn | 45 + .../NegSem_220302_getcall_operation_011.ttcn | 51 + .../NegSem_220302_getcall_operation_012.ttcn | 46 + .../NegSem_220302_getcall_operation_013.ttcn | 46 + .../NegSem_220302_getcall_operation_014.ttcn | 46 + .../NegSem_220302_getcall_operation_015.ttcn | 47 + .../NegSem_220302_getcall_operation_016.ttcn | 52 + .../NegSem_220302_getcall_operation_017.ttcn | 54 + .../NegSem_220302_getcall_operation_018.ttcn | 44 + .../NegSem_220302_getcall_operation_019.ttcn | 51 + .../NegSyn_220302_getcall_operation_001.ttcn | 44 + .../NegSyn_220302_getcall_operation_002.ttcn | 45 + .../Sem_220302_GetcallOperation_001.ttcn | 126 + .../Sem_220302_GetcallOperation_002.ttcn | 132 + .../Sem_220302_GetcallOperation_003.ttcn | 134 + .../Sem_220302_GetcallOperation_004.ttcn | 128 + .../Sem_220302_GetcallOperation_005.ttcn | 117 + .../Sem_220302_getcall_operation_006.ttcn | 46 + .../Sem_220302_getcall_operation_007.ttcn | 47 + .../Sem_220302_getcall_operation_008.ttcn | 54 + .../Sem_220302_getcall_operation_009.ttcn | 56 + .../Sem_220302_getcall_operation_010.ttcn | 56 + .../Sem_220302_getcall_operation_011.ttcn | 59 + .../Sem_220302_getcall_operation_012.ttcn | 54 + .../Sem_220302_getcall_operation_013.ttcn | 54 + .../Sem_220302_getcall_operation_014.ttcn | 52 + .../Sem_220302_getcall_operation_015.ttcn | 52 + .../Sem_220302_getcall_operation_016.ttcn | 52 + .../Sem_220302_getcall_operation_017.ttcn | 52 + .../Sem_220302_getcall_operation_018.ttcn | 52 + .../Sem_220302_getcall_operation_019.ttcn | 50 + .../Sem_220302_getcall_operation_020.ttcn | 53 + .../Sem_220302_getcall_operation_021.ttcn | 54 + .../Sem_220302_getcall_operation_022.ttcn | 51 + .../NegSem_220303_ReplyOperation_001.ttcn | 39 + .../NegSem_220303_ReplyOperation_002.ttcn | 46 + .../NegSem_220303_ReplyOperation_003.ttcn | 46 + .../NegSem_220303_ReplyOperation_004.ttcn | 32 + .../NegSem_220303_ReplyOperation_005.ttcn | 46 + .../NegSem_220303_ReplyOperation_006.ttcn | 51 + .../NegSem_220303_ReplyOperation_007.ttcn | 51 + .../NegSem_220303_ReplyOperation_008.ttcn | 78 + .../NegSem_220303_ReplyOperation_009.ttcn | 47 + .../NegSem_220303_ReplyOperation_010.ttcn | 46 + .../Sem_220303_ReplyOperation_001.ttcn | 116 + .../Sem_220303_ReplyOperation_002.ttcn | 118 + .../Sem_220303_ReplyOperation_003.ttcn | 49 + .../Sem_220303_ReplyOperation_004.ttcn | 53 + .../Sem_220303_ReplyOperation_005.ttcn | 51 + .../NegSem_220304_getreply_operation_001.ttcn | 45 + .../NegSem_220304_getreply_operation_002.ttcn | 58 + .../NegSem_220304_getreply_operation_003.ttcn | 58 + .../NegSem_220304_getreply_operation_004.ttcn | 64 + .../NegSem_220304_getreply_operation_005.ttcn | 64 + .../NegSem_220304_getreply_operation_006.ttcn | 46 + .../NegSem_220304_getreply_operation_007.ttcn | 45 + .../NegSem_220304_getreply_operation_008.ttcn | 51 + .../NegSem_220304_getreply_operation_009.ttcn | 45 + .../NegSem_220304_getreply_operation_010.ttcn | 47 + .../NegSem_220304_getreply_operation_011.ttcn | 46 + .../NegSem_220304_getreply_operation_012.ttcn | 47 + .../NegSem_220304_getreply_operation_013.ttcn | 51 + .../NegSem_220304_getreply_operation_014.ttcn | 53 + .../NegSem_220304_getreply_operation_015.ttcn | 55 + .../NegSem_220304_getreply_operation_016.ttcn | 50 + .../NegSem_220304_getreply_operation_017.ttcn | 52 + .../NegSem_220304_getreply_operation_018.ttcn | 51 + .../NegSem_220304_getreply_operation_019.ttcn | 52 + .../NegSem_220304_getreply_operation_020.ttcn | 57 + .../NegSem_220304_getreply_operation_021.ttcn | 45 + .../NegSem_220304_getreply_operation_022.ttcn | 50 + .../NegSyn_220304_getreply_operation_001.ttcn | 46 + .../NegSyn_220304_getreply_operation_002.ttcn | 47 + .../Sem_220304_getreply_operation_001.ttcn | 40 + .../Sem_220304_getreply_operation_002.ttcn | 51 + .../Sem_220304_getreply_operation_003.ttcn | 59 + .../Sem_220304_getreply_operation_004.ttcn | 59 + .../Sem_220304_getreply_operation_005.ttcn | 60 + .../Sem_220304_getreply_operation_006.ttcn | 64 + .../Sem_220304_getreply_operation_007.ttcn | 58 + .../Sem_220304_getreply_operation_008.ttcn | 58 + .../Sem_220304_getreply_operation_009.ttcn | 51 + .../Sem_220304_getreply_operation_010.ttcn | 51 + .../Sem_220304_getreply_operation_011.ttcn | 52 + .../Sem_220304_getreply_operation_012.ttcn | 51 + .../Sem_220304_getreply_operation_013.ttcn | 53 + .../Sem_220304_getreply_operation_014.ttcn | 51 + .../Sem_220304_getreply_operation_015.ttcn | 57 + .../Sem_220304_getreply_operation_016.ttcn | 56 + .../Sem_220304_getreply_operation_017.ttcn | 57 + .../Sem_220304_getreply_operation_018.ttcn | 56 + .../Sem_220304_getreply_operation_019.ttcn | 58 + .../Sem_220304_getreply_operation_020.ttcn | 56 + .../Sem_220304_getreply_operation_021.ttcn | 55 + .../Sem_220304_getreply_operation_022.ttcn | 56 + .../Sem_220304_getreply_operation_023.ttcn | 53 + .../NegSem_220305_raise_operation_001.ttcn | 45 + .../NegSem_220305_raise_operation_002.ttcn | 45 + .../NegSem_220305_raise_operation_003.ttcn | 48 + .../NegSem_220305_raise_operation_004.ttcn | 47 + .../NegSem_220305_raise_operation_005.ttcn | 47 + .../NegSem_220305_raise_operation_006.ttcn | 42 + .../NegSem_220305_raise_operation_007.ttcn | 44 + .../NegSem_220305_raise_operation_008.ttcn | 42 + .../NegSem_220305_raise_operation_009.ttcn | 42 + .../NegSem_220305_raise_operation_010.ttcn | 39 + .../Sem_220305_raise_operation_001.ttcn | 41 + .../Sem_220305_raise_operation_002.ttcn | 52 + .../Sem_220305_raise_operation_003.ttcn | 49 + .../Sem_220305_raise_operation_004.ttcn | 56 + .../NegSem_220306_catch_operation_001.ttcn | 45 + .../NegSem_220306_catch_operation_002.ttcn | 58 + .../NegSem_220306_catch_operation_003.ttcn | 58 + .../NegSem_220306_catch_operation_004.ttcn | 64 + .../NegSem_220306_catch_operation_005.ttcn | 64 + .../NegSem_220306_catch_operation_006.ttcn | 46 + .../NegSem_220306_catch_operation_007.ttcn | 45 + .../NegSem_220306_catch_operation_008.ttcn | 55 + .../NegSem_220306_catch_operation_009.ttcn | 50 + .../NegSem_220306_catch_operation_010.ttcn | 52 + .../NegSem_220306_catch_operation_011.ttcn | 51 + .../NegSem_220306_catch_operation_012.ttcn | 52 + .../NegSem_220306_catch_operation_013.ttcn | 51 + .../NegSem_220306_catch_operation_014.ttcn | 57 + .../NegSem_220306_catch_operation_015.ttcn | 47 + .../NegSem_220306_catch_operation_016.ttcn | 50 + .../NegSyn_220306_catch_operation_001.ttcn | 46 + .../NegSyn_220306_catch_operation_002.ttcn | 47 + .../NegSyn_220306_catch_operation_003.ttcn | 46 + .../Sem_220306_catch_operation_001.ttcn | 40 + .../Sem_220306_catch_operation_002.ttcn | 51 + .../Sem_220306_catch_operation_003.ttcn | 59 + .../Sem_220306_catch_operation_004.ttcn | 59 + .../Sem_220306_catch_operation_005.ttcn | 60 + .../Sem_220306_catch_operation_006.ttcn | 64 + .../Sem_220306_catch_operation_007.ttcn | 58 + .../Sem_220306_catch_operation_008.ttcn | 58 + .../Sem_220306_catch_operation_009.ttcn | 57 + .../Sem_220306_catch_operation_010.ttcn | 56 + .../Sem_220306_catch_operation_011.ttcn | 57 + .../Sem_220306_catch_operation_012.ttcn | 56 + .../Sem_220306_catch_operation_013.ttcn | 58 + .../Sem_220306_catch_operation_014.ttcn | 56 + .../Sem_220306_catch_operation_015.ttcn | 57 + .../Sem_220306_catch_operation_016.ttcn | 58 + .../Sem_220306_catch_operation_017.ttcn | 55 + .../NegSem_2204_the_check_operation_001.ttcn | 37 + .../NegSem_2204_the_check_operation_002.ttcn | 36 + .../NegSem_2204_the_check_operation_003.ttcn | 38 + .../NegSem_2204_the_check_operation_004.ttcn | 39 + .../NegSem_2204_the_check_operation_005.ttcn | 38 + .../Sem_2204_the_check_operation_001.ttcn | 30 + .../Sem_2204_the_check_operation_002.ttcn | 35 + .../Sem_2204_the_check_operation_003.ttcn | 28 + .../Sem_2204_the_check_operation_004.ttcn | 31 + .../Sem_2204_the_check_operation_005.ttcn | 30 + .../Sem_2204_the_check_operation_006.ttcn | 36 + .../Sem_2204_the_check_operation_007.ttcn | 28 + .../Sem_2204_the_check_operation_008.ttcn | 31 + .../Sem_2204_the_check_operation_009.ttcn | 29 + .../Sem_2204_the_check_operation_010.ttcn | 36 + .../Sem_2204_the_check_operation_011.ttcn | 33 + .../Sem_2204_the_check_operation_012.ttcn | 36 + .../Sem_2204_the_check_operation_013.ttcn | 29 + .../Sem_2204_the_check_operation_014.ttcn | 37 + .../Sem_2204_the_check_operation_015.ttcn | 33 + .../Sem_2204_the_check_operation_016.ttcn | 37 + .../Sem_2204_the_check_operation_017.ttcn | 30 + .../Sem_2204_the_check_operation_018.ttcn | 35 + .../Sem_2204_the_check_operation_019.ttcn | 28 + .../Sem_2204_the_check_operation_020.ttcn | 30 + .../Sem_2204_the_check_operation_021.ttcn | 30 + .../Sem_2204_the_check_operation_022.ttcn | 36 + .../Sem_2204_the_check_operation_023.ttcn | 28 + .../Sem_2204_the_check_operation_024.ttcn | 30 + .../Sem_2204_the_check_operation_025.ttcn | 38 + .../Sem_2204_the_check_operation_026.ttcn | 42 + .../Sem_2204_the_check_operation_027.ttcn | 36 + .../Sem_2204_the_check_operation_028.ttcn | 38 + .../Sem_2204_the_check_operation_029.ttcn | 39 + .../Sem_2204_the_check_operation_030.ttcn | 43 + .../Sem_2204_the_check_operation_031.ttcn | 37 + .../Sem_2204_the_check_operation_032.ttcn | 39 + .../Sem_2204_the_check_operation_033.ttcn | 37 + .../Sem_2204_the_check_operation_034.ttcn | 43 + .../Sem_2204_the_check_operation_035.ttcn | 42 + .../Sem_2204_the_check_operation_036.ttcn | 44 + .../Sem_2204_the_check_operation_037.ttcn | 38 + .../Sem_2204_the_check_operation_038.ttcn | 44 + .../Sem_2204_the_check_operation_039.ttcn | 43 + .../Sem_2204_the_check_operation_040.ttcn | 45 + .../Sem_2204_the_check_operation_041.ttcn | 38 + .../Sem_2204_the_check_operation_042.ttcn | 43 + .../Sem_2204_the_check_operation_043.ttcn | 36 + .../Sem_2204_the_check_operation_044.ttcn | 38 + .../Sem_2204_the_check_operation_045.ttcn | 39 + .../Sem_2204_the_check_operation_046.ttcn | 44 + .../Sem_2204_the_check_operation_047.ttcn | 37 + .../Sem_2204_the_check_operation_048.ttcn | 39 + .../Sem_2204_the_check_operation_049.ttcn | 40 + .../Sem_2204_the_check_operation_050.ttcn | 43 + .../Sem_2204_the_check_operation_051.ttcn | 38 + .../Sem_2204_the_check_operation_052.ttcn | 39 + .../Sem_2204_the_check_operation_053.ttcn | 41 + .../Sem_2204_the_check_operation_054.ttcn | 44 + .../Sem_2204_the_check_operation_055.ttcn | 39 + .../Sem_2204_the_check_operation_056.ttcn | 40 + .../Sem_2204_the_check_operation_057.ttcn | 39 + .../Sem_2204_the_check_operation_058.ttcn | 47 + .../Sem_2204_the_check_operation_059.ttcn | 44 + .../Sem_2204_the_check_operation_060.ttcn | 49 + .../Sem_2204_the_check_operation_061.ttcn | 40 + .../Sem_2204_the_check_operation_062.ttcn | 48 + .../Sem_2204_the_check_operation_063.ttcn | 45 + .../Sem_2204_the_check_operation_064.ttcn | 50 + .../Sem_2204_the_check_operation_065.ttcn | 42 + .../Sem_2204_the_check_operation_066.ttcn | 44 + .../Sem_2204_the_check_operation_067.ttcn | 38 + .../Sem_2204_the_check_operation_068.ttcn | 44 + .../Sem_2204_the_check_operation_069.ttcn | 43 + .../Sem_2204_the_check_operation_070.ttcn | 45 + .../Sem_2204_the_check_operation_071.ttcn | 39 + .../Sem_2204_the_check_operation_072.ttcn | 45 + .../Sem_2204_the_check_operation_073.ttcn | 40 + .../Sem_2204_the_check_operation_074.ttcn | 43 + .../Sem_2204_the_check_operation_075.ttcn | 38 + .../Sem_2204_the_check_operation_076.ttcn | 39 + .../Sem_2204_the_check_operation_077.ttcn | 41 + .../Sem_2204_the_check_operation_078.ttcn | 44 + .../Sem_2204_the_check_operation_079.ttcn | 39 + .../Sem_2204_the_check_operation_080.ttcn | 40 + .../Sem_2204_the_check_operation_081.ttcn | 39 + .../Sem_2204_the_check_operation_082.ttcn | 47 + .../Sem_2204_the_check_operation_083.ttcn | 44 + .../Sem_2204_the_check_operation_084.ttcn | 49 + .../Sem_2204_the_check_operation_085.ttcn | 40 + .../Sem_2204_the_check_operation_086.ttcn | 48 + .../Sem_2204_the_check_operation_087.ttcn | 45 + .../Sem_2204_the_check_operation_088.ttcn | 50 + .../Sem_2204_the_check_operation_089.ttcn | 42 + .../Sem_2204_the_check_operation_090.ttcn | 44 + .../Sem_2204_the_check_operation_091.ttcn | 38 + .../Sem_2204_the_check_operation_092.ttcn | 44 + .../Sem_2204_the_check_operation_093.ttcn | 43 + .../Sem_2204_the_check_operation_094.ttcn | 45 + .../Sem_2204_the_check_operation_095.ttcn | 39 + .../Sem_2204_the_check_operation_096.ttcn | 45 + .../Sem_2204_the_check_operation_097.ttcn | 30 + .../Sem_2204_the_check_operation_098.ttcn | 42 + .../Sem_2204_the_check_operation_099.ttcn | 38 + .../Sem_2204_the_check_operation_100.ttcn | 39 + .../Sem_2204_the_check_operation_101.ttcn | 30 + .../Sem_2204_the_check_operation_102.ttcn | 43 + .../Sem_2204_the_check_operation_103.ttcn | 39 + .../Sem_2204_the_check_operation_104.ttcn | 40 + .../Sem_2204_the_check_operation_105.ttcn | 30 + .../Sem_2204_the_check_operation_106.ttcn | 43 + .../Sem_2204_the_check_operation_107.ttcn | 44 + .../Sem_2204_the_check_operation_108.ttcn | 48 + .../Sem_2204_the_check_operation_109.ttcn | 31 + .../Sem_2204_the_check_operation_110.ttcn | 44 + .../Sem_2204_the_check_operation_111.ttcn | 45 + .../Sem_2204_the_check_operation_112.ttcn | 49 + .../Sem_2204_the_check_operation_113.ttcn | 31 + .../Sem_2204_the_check_operation_114.ttcn | 42 + .../Sem_2204_the_check_operation_115.ttcn | 38 + .../Sem_2204_the_check_operation_116.ttcn | 43 + .../Sem_2204_the_check_operation_117.ttcn | 30 + .../Sem_2204_the_check_operation_118.ttcn | 43 + .../Sem_2204_the_check_operation_119.ttcn | 39 + .../Sem_2204_the_check_operation_120.ttcn | 44 + .../22_communication_operations/NOTES | 5 + .../NegSem_2302_timer_start_001.ttcn | 25 + .../NegSem_2302_timer_start_002.ttcn | 25 + .../NegSem_2302_timer_start_003.ttcn | 25 + .../NegSem_2302_timer_start_004.ttcn | 25 + .../NegSyn_2302_timer_start_001.ttcn | 24 + .../NegSyn_2302_timer_start_002.ttcn | 26 + .../NegSyn_2302_timer_start_003.ttcn | 25 + .../NegSyn_2302_timer_start_004.ttcn | 26 + .../NegSyn_2302_timer_start_005.ttcn | 26 + .../NegSyn_2302_timer_start_006.ttcn | 26 + .../NegSyn_2302_timer_start_007.ttcn | 26 + .../NegSyn_2302_timer_start_008.ttcn | 26 + .../NegSyn_2302_timer_start_009.ttcn | 26 + .../NegSyn_2302_timer_start_010.ttcn | 26 + .../NegSyn_2302_timer_start_011.ttcn | 26 + .../NegSyn_2302_timer_start_012.ttcn | 26 + .../NegSyn_2302_timer_start_013.ttcn | 27 + .../Sem_2302_timer_start_001.ttcn | 44 + .../Sem_2302_timer_start_002.ttcn | 53 + .../Sem_2302_timer_start_003.ttcn | 74 + .../Sem_2302_timer_start_004.ttcn | 45 + .../NegSyn_2303_timer_stop_001.ttcn | 25 + .../NegSyn_2303_timer_stop_002.ttcn | 26 + .../NegSyn_2303_timer_stop_003.ttcn | 26 + .../NegSyn_2303_timer_stop_004.ttcn | 26 + .../NegSyn_2303_timer_stop_005.ttcn | 26 + .../NegSyn_2303_timer_stop_006.ttcn | 26 + .../Sem_2303_timer_stop_002.ttcn | 30 + .../Sem_2303_timer_stop_003.ttcn | 30 + .../Sem_2303_timer_stop_004.ttcn | 30 + .../Syn_2303_timer_stop_006.ttcn | 24 + .../Syn_2303_timer_stop_007.ttcn | 26 + .../NegSyn_2304_timer_read_001.ttcn | 26 + .../NegSyn_2304_timer_read_002.ttcn | 25 + .../NegSyn_2304_timer_read_003.ttcn | 25 + .../NegSyn_2304_timer_read_004.ttcn | 25 + .../NegSyn_2304_timer_read_005.ttcn | 24 + .../Sem_2304_timer_read_001.ttcn | 31 + .../Sem_2304_timer_read_002.ttcn | 30 + .../Sem_2304_timer_read_003.ttcn | 47 + .../NegSyn_2305_timer_running_001.ttcn | 24 + .../NegSyn_2305_timer_running_002.ttcn | 25 + .../NegSyn_2305_timer_running_003.ttcn | 25 + .../NegSyn_2305_timer_running_004.ttcn | 25 + .../NegSyn_2305_timer_running_005.ttcn | 25 + .../NegSyn_2305_timer_running_006.ttcn | 25 + .../Sem_2305_timer_running_001.ttcn | 31 + .../Sem_2305_timer_running_002.ttcn | 25 + .../Sem_2305_timer_running_003.ttcn | 26 + .../Sem_2305_timer_running_004.ttcn | 26 + .../Sem_2305_timer_running_005.ttcn | 31 + .../NegSyn_2306_timer_timeout_001.ttcn | 26 + .../NegSyn_2306_timer_timeout_002.ttcn | 30 + .../NegSyn_2306_timer_timeout_003.ttcn | 25 + .../NegSyn_2306_timer_timeout_004.ttcn | 24 + .../NegSyn_2306_timer_timeout_005.ttcn | 25 + .../NegSyn_2306_timer_timeout_006.ttcn | 25 + .../NegSyn_2306_timer_timeout_007.ttcn | 25 + .../Sem_2306_timer_timeout_001.ttcn | 33 + .../Sem_2306_timer_timeout_002.ttcn | 36 + .../Sem_2306_timer_timeout_003.ttcn | 54 + .../Sem_2306_timer_timeout_004.ttcn | 37 + .../Sem_2306_timer_timeout_005.ttcn | 65 + .../Sem_2306_timer_timeout_006.ttcn | 61 + .../Sem_2306_timer_timeout_007.ttcn | 37 + .../Sem_2306_timer_timeout_008.ttcn | 35 + .../Sem_2306_timer_timeout_009.ttcn | 26 + .../Syn_2306_timer_timeout_001.ttcn | 42 + .../23_toplevel/NegSem_23_toplevel_001.ttcn | 25 + .../23_toplevel/NegSem_23_toplevel_002.ttcn | 25 + .../23_toplevel/NegSyn_23_toplevel_001.ttcn | 12 + .../23_toplevel/NegSyn_23_toplevel_002.ttcn | 12 + .../23_toplevel/Syn_23_toplevel_001.ttcn | 78 + .../23_toplevel/Syn_23_toplevel_002.ttcn | 78 + .../2401_the_verdict_mechanism/NOTES | 11 + .../NegSem_2401_SetverdictError.ttcn | 35 + .../Sem_2401_GlobalVerdict_001.ttcn | 37 + .../Sem_2401_GlobalVerdict_002.ttcn | 37 + .../Sem_2401_GlobalVerdict_003.ttcn | 37 + .../Sem_2401_GlobalVerdict_004.ttcn | 37 + .../Sem_2401_GlobalVerdict_005.ttcn | 37 + .../Sem_2401_GlobalVerdict_006.ttcn | 37 + .../Sem_2401_GlobalVerdict_007.ttcn | 37 + .../Sem_2401_GlobalVerdict_008.ttcn | 37 + .../Sem_2401_GlobalVerdict_009.ttcn | 37 + .../Sem_2401_GlobalVerdict_010.ttcn | 37 + .../Sem_2401_GlobalVerdict_011.ttcn | 37 + .../Sem_2401_GlobalVerdict_012.ttcn | 37 + .../Sem_2401_InitiallyNone_001.ttcn | 27 + .../Sem_2401_LocalVerdict_001.ttcn | 28 + .../Sem_2401_LocalVerdict_002.ttcn | 28 + .../Sem_2401_LocalVerdict_003.ttcn | 28 + .../Sem_2401_LocalVerdict_004.ttcn | 28 + .../Sem_2401_LocalVerdict_005.ttcn | 28 + .../Sem_2401_LocalVerdict_006.ttcn | 28 + .../Sem_2401_LocalVerdict_007.ttcn | 28 + .../Sem_2401_LocalVerdict_008.ttcn | 28 + .../Sem_2401_LocalVerdict_009.ttcn | 28 + .../Sem_2401_LocalVerdict_010.ttcn | 28 + .../Sem_2401_LocalVerdict_011.ttcn | 28 + .../Sem_2401_LocalVerdict_012.ttcn | 28 + .../Syn_2401_FiveValues_001.ttcn | 22 + .../NegSem_2402_setverdict_params_001.ttcn | 22 + .../NegSem_2402_setverdict_params_002.ttcn | 24 + .../NegSem_2402_setverdict_params_003.ttcn | 22 + .../NegSem_2402_setverdict_params_004.ttcn | 22 + .../NegSem_2402_setverdict_params_005.ttcn | 22 + .../Sem_2402_setverdict_logging_001.ttcn | 22 + .../Sem_2402_setverdict_params_001.ttcn | 22 + .../Sem_2402_setverdict_params_002.ttcn | 22 + .../Sem_2402_setverdict_params_003.ttcn | 22 + .../Sem_2403_getverdict_001.ttcn | 30 + .../Sem_2403_getverdict_002.ttcn | 28 + .../Sem_2403_getverdict_003.ttcn | 31 + .../Sem_2403_getverdict_004.ttcn | 28 + .../Sem_2403_getverdict_005.ttcn | 31 + .../24_toplevel/NegSem_24_toplevel_001.ttcn | 24 + .../24_toplevel/NegSem_24_toplevel_002.ttcn | 22 + .../24_toplevel/NegSem_24_toplevel_003.ttcn | 22 + .../24_toplevel/NegSem_24_toplevel_004.ttcn | 26 + .../24_toplevel/NegSem_24_toplevel_005.ttcn | 25 + .../24_toplevel/Syn_24_toplevel_001.ttcn | 32 + .../24_toplevel/Syn_24_toplevel_002.ttcn | 30 + .../24_toplevel/Syn_24_toplevel_003.ttcn | 39 + .../NegSem_2601_ExecuteStatement_001.ttcn | 20 + .../NegSem_2601_ExecuteStatement_002.ttcn | 20 + .../NegSem_2601_ExecuteStatement_003.ttcn | 22 + .../NegSem_2601_ExecuteStatement_004.ttcn | 21 + .../Sem_2601_ExecuteStatement_001.ttcn | 25 + .../Sem_2601_ExecuteStatement_002.ttcn | 28 + .../Sem_2601_ExecuteStatement_003.ttcn | 26 + .../Sem_2601_ExecuteStatement_004.ttcn | 31 + .../Sem_2601_ExecuteStatement_005.ttcn | 31 + .../Sem_2601_ExecuteStatement_006.ttcn | 31 + .../Sem_2601_ExecuteStatement_007.ttcn | 23 + .../Sem_2601_ExecuteStatement_008.ttcn | 22 + .../Sem_2601_ExecuteStatement_009.ttcn | 21 + .../Sem_2601_ExecuteStatement_010.ttcn | 39 + .../NegSem_2602_TheControlPart_001.ttcn | 16 + .../NegSem_2602_TheControlPart_002.ttcn | 22 + .../NegSem_2602_TheControlPart_003.ttcn | 22 + .../NegSem_2602_TheControlPart_004.ttcn | 31 + .../NegSem_2602_TheControlPart_005.ttcn | 32 + .../NegSem_2602_TheControlPart_006.ttcn | 32 + .../NegSem_2602_TheControlPart_007.ttcn | 33 + .../NegSem_2602_TheControlPart_008.ttcn | 33 + .../NegSem_2602_TheControlPart_009.ttcn | 32 + .../NegSem_2602_TheControlPart_010.ttcn | 33 + .../NegSem_2602_TheControlPart_011.ttcn | 34 + .../NegSem_2602_TheControlPart_012.ttcn | 34 + .../NegSem_2602_TheControlPart_013.ttcn | 34 + .../NegSem_2602_TheControlPart_014.ttcn | 34 + .../NegSem_2602_TheControlPart_015.ttcn | 29 + .../NegSem_2602_TheControlPart_016.ttcn | 29 + .../NegSem_2602_TheControlPart_017.ttcn | 33 + .../NegSem_2602_TheControlPart_018.ttcn | 32 + .../NegSem_2602_TheControlPart_019.ttcn | 34 + .../NegSem_2602_TheControlPart_020.ttcn | 30 + .../NegSem_2602_TheControlPart_021.ttcn | 31 + .../NegSem_2602_TheControlPart_022.ttcn | 30 + .../NegSem_2602_TheControlPart_023.ttcn | 30 + .../NegSem_2602_TheControlPart_024.ttcn | 30 + .../NegSem_2602_TheControlPart_025.ttcn | 30 + .../NegSem_2602_TheControlPart_026.ttcn | 30 + .../NegSem_2602_TheControlPart_027.ttcn | 30 + .../NegSem_2602_TheControlPart_028.ttcn | 30 + .../NegSem_2602_TheControlPart_029.ttcn | 30 + .../NegSem_2602_TheControlPart_030.ttcn | 17 + .../NegSem_2602_TheControlPart_031.ttcn | 26 + .../NegSem_2602_TheControlPart_032.ttcn | 22 + .../NegSem_2602_TheControlPart_033.ttcn | 22 + .../NegSem_2602_TheControlPart_034.ttcn | 21 + .../NegSem_2602_TheControlPart_035.ttcn | 16 + .../Sem_2602_TheControlPart_001.ttcn | 34 + .../Sem_2602_TheControlPart_002.ttcn | 24 + .../Sem_2602_TheControlPart_003.ttcn | 29 + .../26_toplevel/Syn_26_ModuleControl_001.ttcn | 14 + .../26_toplevel/Syn_26_ModuleControl_002.ttcn | 18 + .../26_toplevel/Syn_26_ModuleControl_003.ttcn | 25 + .../26_toplevel/Syn_26_ModuleControl_004.ttcn | 16 + .../26_toplevel/Syn_26_ModuleControl_005.ttcn | 17 + .../26_toplevel/Syn_26_ModuleControl_006.ttcn | 21 + .../26_toplevel/Syn_26_ModuleControl_007.ttcn | 14 + .../26_toplevel/Syn_26_ModuleControl_008.ttcn | 16 + .../26_toplevel/Syn_26_ModuleControl_009.ttcn | 16 + .../26_toplevel/Syn_26_ModuleControl_010.ttcn | 14 + .../26_toplevel/Syn_26_ModuleControl_011.ttcn | 20 + .../26_toplevel/Syn_26_ModuleControl_012.ttcn | 20 + .../26_toplevel/Syn_26_ModuleControl_013.ttcn | 23 + .../26_toplevel/Syn_26_ModuleControl_015.ttcn | 29 + .../26_toplevel/Syn_26_ModuleControl_016.ttcn | 14 + .../26_toplevel/Syn_26_ModuleControl_017.ttcn | 19 + .../Syn_270101_ScopeOfAttributes_001.ttcn | 16 + .../Syn_270101_ScopeOfAttributes_002.ttcn | 22 + .../Syn_270101_ScopeOfAttributes_003.ttcn | 26 + .../Syn_270101_ScopeOfAttributes_004.ttcn | 28 + .../Syn_270101_ScopeOfAttributes_005.ttcn | 27 + .../Sem_27010200_general_001.ttcn | 36 + .../Sem_27010200_general_002.ttcn | 39 + .../Sem_27010200_general_003.ttcn | 41 + .../Sem_27010200_general_004.ttcn | 33 + .../Sem_27010200_general_005.ttcn | 43 + .../Sem_27010200_general_006.ttcn | 43 + .../Sem_27010200_general_007.ttcn | 42 + .../Sem_27010200_general_008.ttcn | 42 + .../Sem_27010200_general_009.ttcn | 43 + .../Sem_27010200_general_010.ttcn | 42 + .../Sem_27010200_general_011.ttcn | 40 + .../Sem_27010200_general_012.ttcn | 41 + .../Sem_27010200_general_013.ttcn | 44 + .../Sem_27010200_general_014.ttcn | 44 + .../Sem_27010200_general_015.ttcn | 43 + .../Sem_27010200_general_016.ttcn | 49 + ...0201_rules_for_variant_attributes_001.ttcn | 43 + ...0201_rules_for_variant_attributes_002.ttcn | 38 + ...0201_rules_for_variant_attributes_003.ttcn | 38 + ...0202_rules_for_multiple_encodings_001.ttcn | 48 + ...0202_rules_for_multiple_encodings_002.ttcn | 47 + ...3_attributes_of_imported_elements_001.ttcn | 43 + .../NegSem_2702_the_with_statement_001.ttcn | 37 + .../NegSem_2702_the_with_statement_002.ttcn | 38 + .../NegSem_2702_the_with_statement_003.ttcn | 39 + .../NegSem_2702_the_with_statement_004.ttcn | 40 + .../NegSem_2702_the_with_statement_005.ttcn | 46 + .../NegSem_2702_the_with_statement_006.ttcn | 42 + .../NegSem_2702_the_with_statement_007.ttcn | 42 + .../NegSem_2702_the_with_statement_008.ttcn | 32 + .../NegSem_2702_the_with_statement_009.ttcn | 30 + .../NegSem_2702_the_with_statement_010.ttcn | 34 + .../NegSem_2702_the_with_statement_011.ttcn | 32 + .../NegSyn_2702_the_with_statement_001.ttcn | 37 + .../Sem_2702_the_with_statement_001.ttcn | 36 + .../Sem_2702_the_with_statement_002.ttcn | 37 + .../Sem_2702_the_with_statement_003.ttcn | 38 + .../Sem_2702_the_with_statement_004.ttcn | 38 + .../Sem_2702_the_with_statement_005.ttcn | 43 + .../Sem_2702_the_with_statement_006.ttcn | 39 + .../Sem_2702_the_with_statement_007.ttcn | 44 + .../Sem_2702_the_with_statement_008.ttcn | 43 + .../NegSem_2703_display_attributes_001.ttcn | 36 + .../NegSem_2703_display_attributes_002.ttcn | 36 + .../NegSem_2703_display_attributes_003.ttcn | 36 + .../Sem_2703_display_attributes_001.ttcn | 35 + .../Sem_2704_encoding_attributes_001.ttcn | 45 + .../Sem_2704_encoding_attributes_002.ttcn | 37 + .../NegSem_2705_variant_attributes_001.ttcn | 38 + .../NegSem_2705_variant_attributes_002.ttcn | 34 + .../NegSem_2705_variant_attributes_003.ttcn | 34 + .../Sem_2705_variant_attributes_001.ttcn | 39 + .../Sem_2705_variant_attributes_002.ttcn | 36 + .../Sem_2705_variant_attributes_003.ttcn | 44 + .../Sem_2705_variant_attributes_004.ttcn | 42 + .../Sem_2706_extension_attributes_001.ttcn | 34 + .../Sem_2706_extension_attributes_002.ttcn | 38 + .../NegSem_2707_OptionalAttributes_001.ttcn | 95 + .../NegSem_2707_OptionalAttributes_002.ttcn | 94 + .../NegSem_2707_OptionalAttributes_003.ttcn | 103 + .../Sem_2707_OptionalAttributes_001.ttcn | 104 + .../Sem_2707_OptionalAttributes_002.ttcn | 103 + .../Sem_2707_OptionalAttributes_003.ttcn | 103 + .../Sem_2707_OptionalAttributes_004.ttcn | 103 + .../Sem_2707_OptionalAttributes_005.ttcn | 104 + .../Sem_2707_OptionalAttributes_006.ttcn | 103 + .../Sem_2707_OptionalAttributes_007.ttcn | 103 + .../Syn_2707_OptionalAttributes_001.ttcn | 93 + ...NegSem_2709_dynamic_configuration_001.ttcn | 56 + ...NegSem_2709_dynamic_configuration_002.ttcn | 56 + ...NegSem_2709_dynamic_configuration_003.ttcn | 50 + ...NegSem_2709_dynamic_configuration_004.ttcn | 45 + .../Sem_2709_dynamic_configuration_001.ttcn | 46 + .../Sem_2709_dynamic_configuration_002.ttcn | 47 + .../Sem_2709_dynamic_configuration_003.ttcn | 46 + .../Sem_2709_dynamic_configuration_004.ttcn | 44 + core_language/27_specifying_attributes/NOTES | 4 + .../NegSem_B010101_omitting_values_001.ttcn | 59 + .../Sem_B010101_omitting_values_001.ttcn | 67 + .../Sem_B010101_omitting_values_002.ttcn | 67 + ...Sem_B0101_matching_specific_value_001.ttcn | 103 + ...Sem_B0101_matching_specific_value_002.ttcn | 103 + ...Sem_B0101_matching_specific_value_003.ttcn | 103 + ...Sem_B0101_matching_specific_value_004.ttcn | 103 + ...Sem_B0101_matching_specific_value_005.ttcn | 103 + ...Sem_B0101_matching_specific_value_006.ttcn | 103 + ...Sem_B0101_matching_specific_value_007.ttcn | 103 + ...Sem_B0101_matching_specific_value_008.ttcn | 103 + ...Sem_B0101_matching_specific_value_009.ttcn | 103 + ...Sem_B0101_matching_specific_value_010.ttcn | 103 + ...Sem_B0101_matching_specific_value_011.ttcn | 103 + .../NegSem_B010201_value_list_001.ttcn | 54 + .../NegSem_B010201_value_list_002.ttcn | 53 + .../NegSem_B010201_value_list_003.ttcn | 53 + .../NegSem_B010201_value_list_004.ttcn | 57 + .../Sem_B010201_value_list_001.ttcn | 79 + .../Sem_B010201_value_list_002.ttcn | 53 + .../Sem_B010201_value_list_003.ttcn | 52 + .../Sem_B010201_value_list_004.ttcn | 54 + ...m_B010202_complemented_value_list_001.ttcn | 60 + ...m_B010202_complemented_value_list_002.ttcn | 62 + ...m_B010202_complemented_value_list_003.ttcn | 74 + ...m_B010202_complemented_value_list_004.ttcn | 47 + ...m_B010202_complemented_value_list_001.ttcn | 79 + ...m_B010202_complemented_value_list_002.ttcn | 79 + ...m_B010202_complemented_value_list_003.ttcn | 79 + ...m_B010202_complemented_value_list_004.ttcn | 79 + ...m_B010202_complemented_value_list_005.ttcn | 79 + ...m_B010202_complemented_value_list_006.ttcn | 79 + ...m_B010202_complemented_value_list_007.ttcn | 82 + ...m_B010202_complemented_value_list_008.ttcn | 55 + .../Sem_B010203_any_value_001.ttcn | 83 + .../Sem_B010203_any_value_002.ttcn | 85 + .../NegSem_B010204_any_value_or_none_001.ttcn | 74 + .../NegSem_B010204_any_value_or_none_002.ttcn | 77 + .../Sem_B010204_any_value_or_none_001.ttcn | 82 + .../Sem_B010204_any_value_or_none_002.ttcn | 34 + .../Sem_B010204_any_value_or_none_003.ttcn | 37 + .../Sem_B010204_any_value_or_none_004.ttcn | 39 + .../Sem_B010204_any_value_or_none_005.ttcn | 39 + .../NegSem_B010205_value_range_001.ttcn | 68 + .../NegSem_B010205_value_range_002.ttcn | 68 + .../NegSem_B010205_value_range_003.ttcn | 68 + .../Sem_B010205_value_range_001.ttcn | 76 + .../Sem_B010205_value_range_002.ttcn | 76 + .../Sem_B010205_value_range_003.ttcn | 76 + .../Sem_B010205_value_range_004.ttcn | 76 + .../Sem_B010205_value_range_005.ttcn | 76 + .../Sem_B010205_value_range_006.ttcn | 76 + .../Sem_B010205_value_range_007.ttcn | 76 + .../Sem_B010205_value_range_008.ttcn | 76 + .../NegSem_B010206_superset_001.ttcn | 37 + .../NegSem_B010206_superset_002.ttcn | 41 + .../NegSem_B010206_superset_003.ttcn | 46 + .../NegSem_B010206_superset_004.ttcn | 46 + .../NegSem_B010206_superset_005.ttcn | 55 + .../NegSem_B010206_superset_006.ttcn | 54 + .../NegSem_B010206_superset_007.ttcn | 54 + .../NegSem_B010206_superset_008.ttcn | 54 + .../NegSem_B010206_superset_009.ttcn | 54 + .../Sem_B010206_superset_001.ttcn | 54 + .../Sem_B010206_superset_002.ttcn | 54 + .../Sem_B010206_superset_003.ttcn | 54 + .../Sem_B010206_superset_004.ttcn | 52 + .../Sem_B010206_superset_005.ttcn | 54 + .../Sem_B010206_superset_006.ttcn | 55 + .../Sem_B010206_superset_007.ttcn | 54 + .../Sem_B010206_superset_008.ttcn | 53 + .../NegSem_B010207_subset_001.ttcn | 37 + .../NegSem_B010207_subset_002.ttcn | 51 + .../NegSem_B010207_subset_003.ttcn | 50 + .../NegSem_B010207_subset_004.ttcn | 54 + .../NegSem_B010207_subset_005.ttcn | 54 + .../NegSem_B010207_subset_006.ttcn | 54 + .../NegSem_B010207_subset_007.ttcn | 54 + .../NegSem_B010207_subset_008.ttcn | 55 + .../Sem_B010207_subset_001.ttcn | 54 + .../Sem_B010207_subset_002.ttcn | 54 + .../Sem_B010207_subset_003.ttcn | 54 + .../Sem_B010207_subset_004.ttcn | 50 + .../Sem_B010207_subset_005.ttcn | 53 + .../Sem_B010207_subset_006.ttcn | 54 + .../Sem_B010207_subset_007.ttcn | 51 + .../Sem_B010207_subset_008.ttcn | 51 + .../NegSem_B010208_omit_value_001.ttcn | 83 + .../NegSem_B010208_omit_value_002.ttcn | 83 + .../NegSyn_B010208_omit_value_001.ttcn | 20 + .../Sem_B010208_omit_value_001.ttcn | 83 + .../Sem_B010208_omit_value_002.ttcn | 85 + .../Sem_B010208_omit_value_003.ttcn | 65 + .../Sem_B010208_omit_value_004.ttcn | 66 + .../Sem_B010208_omit_value_005.ttcn | 71 + .../Sem_B010209_decoded_content_001.ttcn | 68 + .../Sem_B010209_decoded_content_002.ttcn | 64 + .../Sem_B010209_decoded_content_003.ttcn | 69 + .../Sem_B010209_decoded_content_004.ttcn | 56 + .../Sem_B010209_decoded_content_005.ttcn | 56 + ...Sem_B010210_enumerated_value_list_001.ttcn | 54 + .../Sem_B010301_any_element_001.ttcn | 60 + .../Sem_B010301_any_element_002.ttcn | 60 + .../Sem_B010301_any_element_003.ttcn | 60 + .../Sem_B010301_any_element_004.ttcn | 60 + .../Sem_B010301_any_element_005.ttcn | 60 + .../Sem_B010301_any_element_006.ttcn | 54 + .../Sem_B010301_any_element_007.ttcn | 54 + .../Sem_B010301_any_element_008.ttcn | 54 + ...02_any_number_of_elements_or_none_001.ttcn | 60 + ...02_any_number_of_elements_or_none_002.ttcn | 60 + ...02_any_number_of_elements_or_none_003.ttcn | 60 + .../NegSem_B010303_permutation_001.ttcn | 60 + .../NegSem_B010303_permutation_002.ttcn | 36 + .../NegSem_B010303_permutation_003.ttcn | 35 + .../NegSem_B010303_permutation_004.ttcn | 39 + .../NegSem_B010303_permutation_005.ttcn | 37 + .../NegSem_B010303_permutation_006.ttcn | 40 + .../Sem_B010303_permutation_001.ttcn | 63 + .../Sem_B010303_permutation_002.ttcn | 63 + .../Sem_B010303_permutation_003.ttcn | 63 + .../Sem_B010303_permutation_004.ttcn | 63 + .../Sem_B010303_permutation_005.ttcn | 63 + .../Sem_B010303_permutation_006.ttcn | 67 + .../Sem_B010303_permutation_007.ttcn | 37 + .../Sem_B010303_permutation_008.ttcn | 39 + .../Sem_B010303_permutation_009.ttcn | 63 + ...egSem_B010401_length_restrictions_003.ttcn | 65 + ...egSem_B010401_length_restrictions_004.ttcn | 65 + .../Sem_B010401_length_restrictions_001.ttcn | 69 + .../Sem_B010401_length_restrictions_002.ttcn | 63 + .../Sem_B010401_length_restrictions_003.ttcn | 69 + .../Sem_B010401_length_restrictions_004.ttcn | 69 + ...egSem_B010402_ifPresent_indicator_001.ttcn | 67 + .../Sem_B010402_ifPresent_indicator_001.ttcn | 76 + .../Sem_B010402_ifPresent_indicator_002.ttcn | 76 + .../Sem_B010501_set_expression_001.ttcn | 60 + .../Sem_B010501_set_expression_002.ttcn | 60 + .../Sem_B010501_set_expression_003.ttcn | 60 + .../Sem_B010501_set_expression_004.ttcn | 60 + .../Sem_B010501_set_expression_005.ttcn | 60 + .../Sem_B010501_set_expression_006.ttcn | 57 + .../Sem_B010502_reference_expression_001.ttcn | 78 + .../Sem_B010502_reference_expression_002.ttcn | 78 + .../Sem_B010502_reference_expression_003.ttcn | 78 + .../Sem_B010502_reference_expression_004.ttcn | 78 + .../Sem_B010502_reference_expression_005.ttcn | 80 + .../Sem_B010502_reference_expression_006.ttcn | 78 + .../Sem_B010502_reference_expression_007.ttcn | 78 + .../Sem_B010502_reference_expression_008.ttcn | 78 + .../Sem_B010502_reference_expression_009.ttcn | 55 + .../Sem_B010502_reference_expression_010.ttcn | 61 + .../Sem_B010502_reference_expression_011.ttcn | 61 + .../Sem_B010503_match_n_times_001.ttcn | 66 + .../Sem_B010503_match_n_times_002.ttcn | 66 + .../Sem_B010503_match_n_times_003.ttcn | 66 + .../Sem_B010503_match_n_times_004.ttcn | 66 + .../Sem_B010503_match_n_times_005.ttcn | 66 + ...10504_match_referenced_characters_001.ttcn | 69 + ...10504_match_referenced_characters_001.ttcn | 77 + ...10504_match_referenced_characters_002.ttcn | 77 + ...10504_match_referenced_characters_003.ttcn | 77 + ...10504_match_referenced_characters_004.ttcn | 77 + ...10504_match_referenced_characters_005.ttcn | 75 + ...10504_match_referenced_characters_006.ttcn | 75 + ...10504_match_referenced_characters_007.ttcn | 77 + ...Syn_B010505_pattern_compatibility_001.ttcn | 24 + ...Sem_B010505_pattern_compatibility_001.ttcn | 81 + ...Sem_B010505_pattern_compatibility_002.ttcn | 81 + ...6_case_sensitive_pattern_matching_001.ttcn | 88 + ...6_case_sensitive_pattern_matching_002.ttcn | 63 + .../Sem_B0105_toplevel_001.ttcn | 66 + .../Sem_B0105_toplevel_002.ttcn | 60 + .../Sem_C0602_The_hostid_function_001.ttcn | 46 + ...m_C0602_The_testcasename_function_001.ttcn | 29 + core_language/C_predefined_functions/NOTES | 1 + .../Sem_D01_macro_module_001.ttcn | 26 + .../Sem_D02_macro_file_001.ttcn | 28 + .../Sem_D03_macro_bfile_001.ttcn | 26 + .../Sem_D04_macro_line_001.ttcn | 27 + .../NegSem_D05_macro_scope_001.ttcn | 31 + .../Sem_D05_macro_scope_001.ttcn | 26 + .../Sem_D05_macro_scope_002.ttcn | 35 + core_language/NOTES | 11 + core_language/PROGRESS_FILE.txt | 105 + dist/.project | 11 + dist/15102010/15102010-t3ats-tps.pdf | Bin 0 -> 1390166 bytes dist/15102010/15102010-t3ats.zip | Bin 0 -> 567773 bytes dist/15102010/README | 80 + dist/MTS#52/MTS-00132-1-T3Conf_ICS-v0.0.1.doc | Bin 0 -> 431616 bytes dist/MTS#52/MTS-00132-2-T3Conf_TPs-v0.0.1.doc | Bin 0 -> 4732416 bytes dist/MTS#52/MTS-00132-3-T3Conf_ATS-v0.0.1.doc | Bin 0 -> 209408 bytes dist/MTS#52/t3ref-MTS#52-draft.zip | Bin 0 -> 657024 bytes dist/MTS#52/ts_xxxxxxxx.zip | Bin 0 -> 858961 bytes docs/.project | 2 +- docs/drafts/15102010-t3ats-tps.docx | Bin 0 -> 317557 bytes docs/drafts/15102010-t3ats-tps.pdf | Bin 0 -> 1390166 bytes docs/final-report/STF409StatusReport_FR.xls | Bin 0 -> 301056 bytes docs/final-report/STF409_A_FinRep.doc | Bin 0 -> 147968 bytes .../final-report/STF409_A_FinRep_template.doc | Bin 0 -> 82432 bytes docs/final-report/STF433_A_FinRep.doc | Bin 0 -> 883200 bytes docs/final-report/STF433_A_FinRep2.doc | Bin 0 -> 308224 bytes docs/final-report/STF433_Requirements.docx | Bin 0 -> 458813 bytes docs/final-report/STF451_A_ProgRep.doc | Bin 0 -> 144384 bytes ...mance Test Suite STF 451 Status Report.ppt | Bin 0 -> 244736 bytes docs/final-report/template/433_A_FinRep.doc | Bin 0 -> 267264 bytes .../final-report/template/451_A_ProgRep_1.doc | Bin 0 -> 133120 bytes docs/final-report/tps.csv | 1185 ++++ .../MTS-00132-1ed131-T3Conf_ICS-v0.0.3.doc | Bin 0 -> 2446336 bytes .../MTS-00132-2ed131-T3Conf_TPs-v0.0.2.doc | Bin 0 -> 8096256 bytes .../MTS-00132-3ed131-T3Conf_ATS-v0.0.3.doc | Bin 0 -> 289792 bytes ...MTS-00132-3ed131-T3Conf_ATS-v0.0.3_ats.zip | Bin 0 -> 1468968 bytes .../MTS-00132-1ed121-T3Conf_ICS-v0.0.1.doc | Bin 0 -> 450560 bytes .../MTS-00132-2ed121-T3Conf_TPs-v0.0.1.doc | Bin 0 -> 7107584 bytes .../MTS-00132-3ed121-T3Conf_ATS-v0.0.1.doc | Bin 0 -> 225280 bytes ...MTS-00132-3ed121-T3Conf_ATS-v0.0.2_ats.zip | Bin 0 -> 1511058 bytes .../stable_draft/STF433FinalDelivery.zip | Bin 0 -> 1175032 bytes .../stable_draft/STF433MTS_Delivery.zip | Bin 0 -> 2012270 bytes ...STF433_report_reqstracer_1336980630407.zip | Bin 0 -> 19162 bytes ...066_Report_MTS#51_Draft_Meeting_Report.doc | Bin 0 -> 159232 bytes docs/stf409/PM_409_Minutes_v01.doc | Bin 0 -> 167936 bytes docs/stf409/STF_409_SessionPlan.xls | Bin 0 -> 44032 bytes .../ToR409v08_MTS_Test_TTCN-3_tools.doc | Bin 0 -> 109568 bytes .../TTCN-3-conformance-test-suite.ppt | Bin 0 -> 301056 bytes .../TemplatePresentationT3UC2011-rev1.doc | Bin 0 -> 45056 bytes docs/templates/part1-ics/CAM_PICS_v005.doc | Bin 0 -> 428032 bytes .../part2-tss_and_tps/ts_102595v010200p.doc | Bin 0 -> 1751040 bytes .../part3-ats_and_ixit/ts_102596v010200p.doc | Bin 0 -> 668672 bytes misc/.gitignore | 1 + misc/.project | 17 + .../Sem_1508_TemplateRestrictions_031.ttcn | 43 + .../Sem_1508_TemplateRestrictions_032.ttcn | 44 + .../Sem_1508_TemplateRestrictions_033.ttcn | 43 + .../Sem_1508_TemplateRestrictions_034.ttcn | 43 + .../Sem_1508_TemplateRestrictions_035.ttcn | 43 + .../Sem_1508_TemplateRestrictions_036.ttcn | 43 + misc/ATS-on_hold/NOTES | 5 + misc/STF409Tools/.classpath | 6 + misc/STF409Tools/.project | 17 + .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 12 + misc/STF409Tools/README.txt | 12 + misc/STF409Tools/deliver.jar | Bin 0 -> 33854 bytes misc/STF409Tools/deliver.jardesc | 16 + .../STF409Tools/resources/ICSTable-sample.htm | 875 +++ .../resources/STF409Tools.properties | 4 + misc/STF409Tools/resources/ics-file-foot.html | 4 + misc/STF409Tools/resources/ics-file-head.html | 599 ++ .../resources/ics-section-foot.html | 7 + .../resources/ics-section-head.html | 45 + .../STF409Tools/resources/ics-table-line.html | 39 + .../resources/references.properties | 348 ++ misc/STF409Tools/resources/tp-file-foot.html | 8 + misc/STF409Tools/resources/tp-file-head.html | 534 ++ misc/STF409Tools/resources/tp-sample.htm | 734 +++ .../resources/tp-section-foot.html | 2 + .../resources/tp-section-head.html | 9 + misc/STF409Tools/resources/tp-table.html | 172 + misc/STF409Tools/resources/tss-file-foot.html | 9 + misc/STF409Tools/resources/tss-file-head.html | 464 ++ misc/STF409Tools/resources/tss-sample.htm | 673 +++ .../resources/tss-section-foot.html | 4 + .../resources/tss-section-head.html | 8 + misc/STF409Tools/src/Clause.java | 276 + misc/STF409Tools/src/ClauseEntry.java | 32 + .../STF409Tools/src/Clipboard2JavaString.java | 33 + misc/STF409Tools/src/CoverageLister.java | 116 + .../STF409Tools/src/DeliverableGenerator.java | 107 + misc/STF409Tools/src/FileUtils.java | 251 + .../src/ICSProformaTableGenerator.java | 160 + misc/STF409Tools/src/Logger.java | 88 + misc/STF409Tools/src/Main.java | 14 + misc/STF409Tools/src/T3ExpectedOutput.java | 27 + misc/STF409Tools/src/T3Purpose.java | 46 + misc/STF409Tools/src/TSSClause.java | 34 + misc/STF409Tools/src/TSSRow.java | 110 + misc/STF409Tools/src/TSSTable.java | 33 + .../STF409Tools/src/TestPurposeGenerator.java | 325 ++ .../src/TestSuiteStructureGenerator.java | 194 + ...mance Test Suite STF 409 Status Report.pdf | Bin 0 -> 93683 bytes ...mance Test Suite STF 409 Status Report.ppt | Bin 0 -> 328192 bytes ...mance Test Suite STF 433 Status Report.pdf | Bin 0 -> 62177 bytes ...mance Test Suite STF 433 Status Report.ppt | Bin 0 -> 84992 bytes misc/TestCastTester/.classpath | 6 + misc/TestCastTester/.project | 17 + .../.settings/org.eclipse.jdt.core.prefs | 12 + misc/TestCastTester/README.txt | 11 + misc/TestCastTester/TestCastTester.launch | 14 + misc/TestCastTester/build.xml | 20 + .../resources/TestCastTester.properties | 5 + misc/TestCastTester/resources/skipList.txt | 27 + .../src/Clipboard2JavaString.java | 33 + misc/TestCastTester/src/FileUtils.java | 201 + misc/TestCastTester/src/Logger.java | 88 + misc/TestCastTester/src/T3ExpectedOutput.java | 40 + .../src/TestCastProjectBuilder.java | 119 + misc/TestCastTester/src/TestCastRunner.java | 188 + misc/TestCastTester/src/TestCastTester.java | 158 + misc/TestCastTester_GUI/Auto_execution.php | 202 + misc/TestCastTester_GUI/Comm.java | 283 + .../Compilation_results_check.php | 72 + .../Converter_to_TestCast_project.php | 235 + misc/TestCastTester_GUI/README.txt | 16 + ...s_where_execution_result_is_unexpected.txt | 24 + misc/TestCastTester_GUI/exec_script.ahk | 5 + .../loopback/Etsi.Ttcn3.Tci.dll | Bin 0 -> 31232 bytes .../loopback/Etsi.Ttcn3.Tri.dll | Bin 0 -> 11776 bytes .../loopback/Etsi.Ttcn3.XTri.dll | Bin 0 -> 6144 bytes .../loopback/LoopbackSUT_NC.exe | Bin 0 -> 9216 bytes .../loopback/TestCast.Ttcn3.TriTci.dll | Bin 0 -> 221184 bytes misc/TestCastTester_GUI/quit_script.ahk | 5 + .../TestCast/broadcast/Etsi.Ttcn3.Tci.dll | Bin 0 -> 29184 bytes .../TestCast/broadcast/Etsi.Ttcn3.Tri.dll | Bin 0 -> 11264 bytes .../broadcast/InterLoopbackAdapter.exe | Bin 0 -> 10240 bytes .../broadcast/TestCast.Ttcn3.TriTci.dll | Bin 0 -> 125952 bytes .../TestCast/external_functions/external.jar | Bin 0 -> 284339 bytes .../TestCast/loopback/Etsi.Ttcn3.Tci.dll | Bin 0 -> 31232 bytes .../TestCast/loopback/Etsi.Ttcn3.Tri.dll | Bin 0 -> 12288 bytes .../TestCast/loopback/Etsi.Ttcn3.XTri.dll | Bin 0 -> 6144 bytes .../TestCast/loopback/LoopbackSUT_NC.exe | Bin 0 -> 8704 bytes .../loopback/TestCast.Ttcn3.TriTci.dll | Bin 0 -> 239104 bytes misc/config/references.properties | 349 ++ misc/config/t3q_stf409.xml | 126 + misc/reports/mts-open_issues.txt | 53 + misc/reports/testcast-19112010/all.log.txt | 5024 +++++++++++++++++ .../testcast-19112010/critical.log.txt | 4510 +++++++++++++++ misc/reports/testcast-19112010/trierror.txt | 73 + misc/reports/testcast-25112010/all.log.txt | 3173 +++++++++++ .../testcast-25112010/critical.log.txt | 2553 +++++++++ misc/scripts/check_module_names | 21 + misc/scripts/correct_sections | 41 + misc/scripts/dumps/verdict_checker.txt | 15 + misc/scripts/files.txt | 723 +++ misc/scripts/fix-ttcn3-extensions.sh | 3 + misc/scripts/metrics | 28 + misc/scripts/replace_version | 14 + misc/scripts/run_t3q | 27 + misc/scripts/testcast.tcproj | 61 + misc/scripts/testcast_tester | 57 + misc/scripts/verdict_checker | 26 + misc/tpgen-documents/Test Purposes.docx | Bin 0 -> 46703 bytes misc/tpgen-documents/tpgen-sample.pdf | Bin 0 -> 1358882 bytes misc/tpgen-documents/tps.xls | Bin 0 -> 285184 bytes misc/tpgen/tpGenSTF409.jar | Bin 0 -> 8009 bytes misc/tpgen/tpgen.sh | 2 + misc/ttcn3-snippets/mtc-ptc-sync.ttcn | 52 + misc/txt/IDEAS | 11 + misc/txt/README | 92 + misc/txt/roadmap.txt | 45 + misc/txt/standard-issues.txt | 32 + .../Elvior/09-11-2010-discussion.doc | Bin 0 -> 36864 bytes .../Elvior/09-11-2010-response.doc | Bin 0 -> 91136 bytes misc/vendor-feedback/Elvior/09-11-2010.doc | Bin 0 -> 75776 bytes standards/4.5.1/es_20187309v040501p.doc | Bin 1101312 -> 0 bytes 3927 files changed, 176334 insertions(+), 1 deletion(-) create mode 100644 core_language/.classpath create mode 100644 core_language/.externalToolBuilders/de.ugoe.cs.swe.trex.ui.rulebuilder.launch create mode 100644 core_language/.gitignore create mode 100644 core_language/.project create mode 100644 core_language/.settings/com.testingtech.ttworkbench.core.prefs create mode 100755 core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSem_0501_Identifier_001.ttcn create mode 100755 core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSyn_0501_Identifier_001.ttcn create mode 100755 core_language/05_basic_language_elements/0501_identifiers_and_keywords/Syn_0501_Identifier_001.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_001.ttcn create mode 100644 core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_002.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_001.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_004.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_005.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_006.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_007.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_008.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_009.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_010.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_011.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_012.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn create mode 100644 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn create mode 100644 core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn create mode 100644 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_001.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_002.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_003.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_004.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_008.ttcn create mode 100755 core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Syn_0502_Scope_001.ttcn create mode 100755 core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_001.ttcn create mode 100755 core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_002.ttcn create mode 100755 core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_003.ttcn create mode 100755 core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_001.ttcn create mode 100644 core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_002.ttcn create mode 100755 core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_019.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_020.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_021.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_022.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_023.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_024.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_025.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn create mode 100644 core_language/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 core_language/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 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_019.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_020.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_021.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_022.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_023.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_024.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_025.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_026.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_027.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_028.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_029.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_030.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_031.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_032.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_033.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_034.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_035.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_039.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_040.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_041.ttcn create mode 100644 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn create mode 100644 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/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 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn create mode 100644 core_language/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 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NOTES create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_019.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_020.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_021.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_022.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_023.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_024.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_025.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_026.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_027.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_028.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_029.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_019.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_020.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_021.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_022.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_023.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_024.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_025.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_026.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_027.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_028.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_029.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_030.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_031.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_032.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_033.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_034.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_035.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_036.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_037.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_038.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_039.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_040.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_041.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_042.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_043.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_044.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_045.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_046.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_047.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_048.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_049.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_050.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_051.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_052.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_053.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_054.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_055.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_056.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_075.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_076.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_077.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_078.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_079.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_080.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_081.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_082.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_083.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_084.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_085.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_086.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_087.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_088.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_089.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_090.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_091.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_092.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_093.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_094.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_095.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_096.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_097.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_098.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_099.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_100.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_101.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_102.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_103.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_104.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_105.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_106.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_107.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_108.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_109.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_110.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_111.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_112.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_113.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_114.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_115.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_116.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_117.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_118.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_119.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_120.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_121.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_122.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_123.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_124.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_125.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_126.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_127.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_128.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_129.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_130.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_131.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_132.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_133.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_134.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_135.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_136.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_137.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_138.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_139.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_140.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_141.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_142.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_183.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSyn_050402_actual_parameters_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_004.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_005.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_006.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_007.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_008.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_009.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_010.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_011.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_012.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_013.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_014.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_015.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_016.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_017.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_018.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_019.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_020.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_021.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_022.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_023.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_024.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_025.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_026.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_027.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_028.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_029.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_030.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_031.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_032.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_033.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_034.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_035.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_036.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_037.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_038.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_039.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_040.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_041.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_042.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_043.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_044.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_045.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_046.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_047.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_048.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_049.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_050.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_051.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_052.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_053.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_054.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_055.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_056.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_057.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_058.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_059.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_060.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_061.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_062.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_063.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_064.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_065.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_066.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_067.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_068.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_069.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_070.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_071.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_072.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_073.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_074.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_075.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_076.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_077.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_078.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_079.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_080.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_081.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_082.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_083.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_084.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_085.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_086.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_087.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_088.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_089.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_090.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_091.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_092.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_093.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_094.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_095.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_096.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_097.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_098.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_099.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_100.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_101.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_102.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_103.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_104.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_105.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_106.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_107.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_108.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_109.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_110.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_111.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_112.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_131.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_132.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_133.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_134.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_137.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_138.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_139.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_140.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_143.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_144.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_145.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_146.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_149.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_150.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_151.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_152.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_153.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_155.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_156.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_157.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_158.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_159.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_160.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_161.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_162.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_163.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_164.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_165.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_166.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_167.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_168.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_169.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_170.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_171.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_172.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_173.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_174.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_175.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_176.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_177.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_178.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_179.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_180.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_181.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_182.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_183.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_184.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_185.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_186.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_187.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_188.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_189.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_190.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_191.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_192.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_193.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_194.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_195.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_196.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_197.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_198.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_199.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_227.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn create mode 100644 core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_001.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_002.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_001.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_002.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_003.ttcn create mode 100644 core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn create mode 100755 core_language/05_basic_language_elements/05_toplevel/NegSyn_05_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn create mode 100644 core_language/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 core_language/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 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_002.ttcn create mode 100644 core_language/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 create mode 100644 core_language/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 create mode 100644 core_language/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 create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_010.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_010.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn create mode 100755 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn create mode 100644 core_language/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 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NOTES create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/Sem_06010201_ListOfValues_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NOTES create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_009.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_010.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_011.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_012.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_013.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_014.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_015.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_016.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_017.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NOTES create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_007.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_008.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NOTES create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSem_06010205_StringPattern_001.ttcn create mode 100755 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_001.ttcn create mode 100755 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_002.ttcn create mode 100755 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NOTES create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_006.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_001.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_002.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_003.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_004.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_005.ttcn create mode 100644 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_006.ttcn create mode 100755 core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSem_060201_RecordTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_018.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_019.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_020.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_021.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_022.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_023.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSyn_060203_records_and_sets_of_single_types_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_019.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_020.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_021.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_022.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_023.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_024.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_025.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_026.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_027.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_028.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_029.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_030.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_031.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_032.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_033.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_034.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_035.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_036.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_037.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_038.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_013.ttcn create mode 100644 core_language/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 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn create mode 100644 core_language/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 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_003.ttcn create mode 100644 core_language/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 create mode 100644 core_language/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 create mode 100644 core_language/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 create mode 100644 core_language/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 core_language/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 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn create mode 100644 core_language/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 create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSyn_060205_top_level_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Sem_060205_top_level_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_018.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_019.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_018.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_019.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_020.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_021.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_022.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_023.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_024.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_025.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_026.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_027.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_028.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_015.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_016.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_017.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_018.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_019.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_020.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_021.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_022.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_023.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/NOTES create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NOTES create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_004.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_010.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_001.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_002.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_003.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_001.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_002.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_001.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_002.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_003.ttcn create mode 100755 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn create mode 100644 core_language/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 core_language/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 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_005.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_006.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_007.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_008.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_009.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_010.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_011.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_012.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_013.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_014.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_001.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_002.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_003.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_004.ttcn create mode 100644 core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_005.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_003.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_004.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_005.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_006.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_007.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_008.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_009.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_010.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_011.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_012.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_003.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_004.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_003.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_004.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_005.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_006.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_007.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_008.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_010.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_011.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_012.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_013.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_014.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_015.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_016.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_017.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_018.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_019.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_003.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_004.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_005.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_006.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_002.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_003.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_004.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_005.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_001.ttcn create mode 100644 core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_002.ttcn create mode 100644 core_language/06_types_and_values/0604_type_synonym/NOTES create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NOTES create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_008.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_009.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_010.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_005.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_006.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_007.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_008.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_009.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_010.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_011.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_012.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_013.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_014.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_015.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_016.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_017.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_018.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_019.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_020.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_021.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_022.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_023.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_024.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_025.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_026.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_027.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_028.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_029.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_030.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_031.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_032.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_033.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_034.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_035.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_036.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_037.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_038.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_039.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_040.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_041.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_042.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_043.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_044.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_045.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_046.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_047.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_048.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_049.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_050.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_005.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_006.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_007.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_008.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_009.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_010.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_011.ttcn create mode 100644 core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_012.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_005.ttcn create mode 100644 core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_006.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NOTES create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_005.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_006.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_007.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_008.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_005.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_006.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_007.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_008.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_009.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_010.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_011.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_012.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_013.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_014.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_015.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_016.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_017.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_018.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_019.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_020.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_021.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_022.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_023.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_024.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_025.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_026.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_030.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_031.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_032.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_033.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_034.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_035.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_036.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_037.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_038.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_039.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_040.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_041.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_042.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_043.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_044.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn create mode 100644 core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn create mode 100644 core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_004.ttcn create mode 100644 core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_001.ttcn create mode 100644 core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_002.ttcn create mode 100644 core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_003.ttcn create mode 100644 core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_004.ttcn create mode 100644 core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_001.ttcn create mode 100644 core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_002.ttcn create mode 100644 core_language/07_expressions/07_toplevel/NegSem_07_toplevel_001.ttcn create mode 100644 core_language/07_expressions/07_toplevel/NegSem_07_toplevel_002.ttcn create mode 100644 core_language/07_expressions/07_toplevel/NegSem_07_toplevel_003.ttcn create mode 100644 core_language/07_expressions/07_toplevel/NegSem_07_toplevel_004.ttcn create mode 100644 core_language/07_expressions/07_toplevel/NegSem_07_toplevel_005.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_001.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn create mode 100644 core_language/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn create mode 100644 core_language/07_expressions/NOTES create mode 100644 core_language/08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_003.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_004.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_005.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn create mode 100644 core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_005.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_006.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_007.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_008.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_009.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_010.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_011.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_012.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_013.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_014.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_015.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_016.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_017.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_018.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_019.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_020.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_021.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_022.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_023.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_024.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_025.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_026.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_027.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_028.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_029.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_030.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_031.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_032.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_033.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_034.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_035.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_036.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_037.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_038.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_039.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_040.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_005.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_006.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_007.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_008.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_009.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_010.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_011.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_012.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_013.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_014.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_015.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_016.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_017.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_018.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_019.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_020.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/NegSem_08020303_ImportingGroups_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/Sem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NOTES create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/Sem_080204_DefinitionOfFriendModules_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_005.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_002.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_003.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_004.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_005.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_001.ttcn create mode 100644 core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_002.ttcn create mode 100644 core_language/08_modules/0803_module_control_part/NegSyn_0803_ModuleControlPart_001.ttcn create mode 100644 core_language/08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn create mode 100644 core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn create mode 100644 core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn create mode 100644 core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn create mode 100644 core_language/08_modules/NOTES create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_004.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_005.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_006.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_007.ttcn create mode 100755 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_008.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_009.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_010.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_001.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_002.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_003.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_004.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_005.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_006.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_007.ttcn create mode 100644 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_008.ttcn create mode 100755 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_009.ttcn create mode 100755 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_010.ttcn create mode 100755 core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_011.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_001.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_002.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_003.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_004.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_001.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_002.ttcn create mode 100644 core_language/09_test_configurations/0902_test_system_interface/Syn_0902_Communication_ports_001.ttcn create mode 100644 core_language/10_constants/NOTES create mode 100644 core_language/10_constants/NegSem_10_Constants_001.ttcn create mode 100644 core_language/10_constants/NegSem_10_Constants_002.ttcn create mode 100644 core_language/10_constants/NegSem_10_Constants_003.ttcn create mode 100755 core_language/10_constants/NegSem_10_Constants_004.ttcn create mode 100755 core_language/10_constants/NegSem_10_Constants_005.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_001.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_002.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_003.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_004.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_005.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_006.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_007.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_008.ttcn create mode 100644 core_language/10_constants/Sem_10_Constants_009.ttcn create mode 100644 core_language/10_constants/Syn_10_Constants_001.ttcn create mode 100644 core_language/10_constants/Syn_10_Constants_002.ttcn create mode 100644 core_language/10_constants/Syn_10_Constants_003.ttcn create mode 100644 core_language/10_constants/Syn_10_Constants_004.ttcn create mode 100644 core_language/11_variables/1101_value_variables/NOTES create mode 100644 core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_001.ttcn create mode 100644 core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn create mode 100755 core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn create mode 100755 core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn create mode 100644 core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn create mode 100644 core_language/11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn create mode 100644 core_language/11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn create mode 100644 core_language/11_variables/1102_template_variables/NOTES create mode 100644 core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn create mode 100644 core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn create mode 100755 core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn create mode 100755 core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn create mode 100644 core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn create mode 100644 core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn create mode 100644 core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn create mode 100644 core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn create mode 100644 core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn create mode 100644 core_language/11_variables/1102_template_variables/Syn_1102_TemplateVars_001.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_001.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_002.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_003.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_004.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_005.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_006.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_007.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_008.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_001.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_002.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_003.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_004.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_005.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_006.ttcn create mode 100644 core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_007.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_001.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_002.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_003.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_004.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_005.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_006.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_007.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_008.ttcn create mode 100644 core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_009.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_001.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_002.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_003.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_004.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_005.ttcn create mode 100644 core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_006.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_001.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_002.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_003.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_004.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_005.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_006.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_007.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_008.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_declaring_msg_009.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_001.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_002.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_003.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_004.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_005.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_006.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_007.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_008.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_009.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_010.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_011.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_012.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_013.ttcn create mode 100644 core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_014.ttcn create mode 100644 core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_001.ttcn create mode 100644 core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_002.ttcn create mode 100644 core_language/14_procedure_signatures/Sem_1400_procedure_signatures_001.ttcn create mode 100644 core_language/14_procedure_signatures/Sem_1400_procedure_signatures_002.ttcn create mode 100644 core_language/14_procedure_signatures/Sem_1400_procedure_signatures_003.ttcn create mode 100644 core_language/14_procedure_signatures/Sem_1400_procedure_signatures_004.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_001.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_002.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_003.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_004.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_005.ttcn create mode 100644 core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_006.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/NOTES create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_001.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_002.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_003.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_001.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_002.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_003.ttcn create mode 100644 core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_004.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_001.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_002.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_003.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_004.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_001.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_002.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_003.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_004.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_001.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_002.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_003.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_004.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_005.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_006.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_001.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_004.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_005.ttcn create mode 100644 core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_006.ttcn create mode 100644 core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_001.ttcn create mode 100644 core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_002.ttcn create mode 100644 core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_003.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_001.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_002.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_003.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_004.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_005.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_006.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_007.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/NegSyn_1505_ModifiedTemplates_001.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_001.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_002.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_003.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_004.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_005.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_006.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_007.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_008.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_009.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_010.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_001.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_002.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_003.ttcn create mode 100644 core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150601_referencing_individual_string_elements/NegSem_150601_ReferencingIndividualStringElements_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_005.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_006.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_005.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_006.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_007.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_008.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_009.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_010.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_011.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_012.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_013.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_014.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_015.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_005.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_006.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_007.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NOTES create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NegSem_150604_ReferencingSignatureParameters_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_004.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_005.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_006.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_001.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_002.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_003.ttcn create mode 100644 core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_004.ttcn create mode 100644 core_language/15_templates/1507_template_matching_mechanisms/README create mode 100644 core_language/15_templates/1508_template_restrictions/NOTES create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_001.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_002.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_003.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_004.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_005.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_006.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_007.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_008.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_009.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_010.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_011.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_012.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_013.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_014.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_015.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_016.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_017.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_018.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_019.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_020.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_021.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_022.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_023.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_024.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_025.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_026.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_029.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_030.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_031.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_032.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_033.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_034.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_035.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_037.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_038.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_039.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_040.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_041.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_042.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_049.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_050.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_051.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_001.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_002.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_003.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_004.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_005.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_006.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_007.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_008.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_009.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_010.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_011.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_012.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_013.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_014.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_015.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_016.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_017.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_018.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_019.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_020.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_021.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_022.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_023.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_024.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_025.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_026.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_027.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_028.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_029.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_030.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_031.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_032.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_033.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_034.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_035.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_036.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_043.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_044.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_045.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_046.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_047.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_048.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_049.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_050.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_051.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_001.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_002.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn create mode 100644 core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn create mode 100644 core_language/15_templates/1509_match_operation/NOTES create mode 100644 core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn create mode 100644 core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn create mode 100644 core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_004.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_006.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_007.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn create mode 100644 core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NOTES create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_004.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_005.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_006.ttcn create mode 100644 core_language/15_templates/1510_valueof_operation/Sem_1510_ValueOfOperation_001.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014.ttcn create mode 100644 core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn create mode 100644 core_language/15_templates/15_toplevel/NegSem_15_TopLevel_001.ttcn create mode 100644 core_language/15_templates/15_toplevel/NegSem_15_TopLevel_002.ttcn create mode 100644 core_language/15_templates/15_toplevel/NegSem_15_TopLevel_003.ttcn create mode 100644 core_language/15_templates/15_toplevel/NegSem_15_TopLevel_004.ttcn create mode 100644 core_language/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn create mode 100644 core_language/15_templates/15_toplevel/Syn_15_TopLevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160101_invoking_functions/Sem_160101_invoking_functions_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NOTES create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_005.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_006.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_007.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_008.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_009.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_010.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_017.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_018.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_019.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_021.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_022.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_023.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_024.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_025.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_026.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_027.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_028.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_029.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_030.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_031.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_032.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_033.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_034.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_005.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_006.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_007.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_008.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_009.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_010.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_011.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_012.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_013.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_014.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_015.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_016.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_017.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_018.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_019.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_020.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_021.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_022.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_023.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_024.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_025.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_026.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_027.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_028.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_029.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_030.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_031.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_032.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_033.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_035.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_036.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_037.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_038.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_039.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_040.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_041.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_042.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_043.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_044.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_045.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_046.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_047.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_048.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_049.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_050.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_051.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_052.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_053.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_054.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_055.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_056.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_057.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_058.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_066.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_067.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_068.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_069.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_070.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_071.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_072.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_073.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_074.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_075.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_076.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_077.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_078.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_079.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_080.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_081.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_082.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_083.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_084.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_085.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_086.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_087.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_088.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_089.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn create mode 100755 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_100.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_101.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_102.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_103.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_104.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_105.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_106.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_107.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_108.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_298.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_299.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_300.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_301.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_302.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_303.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_304.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_305.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_306.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_307.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_308.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_309.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_310.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_311.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_312.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_313.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_314.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_315.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_316.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_317.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_318.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_319.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_320.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_321.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_322.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_323.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_324.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_325.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_005.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_006.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/NegSem_160201_invoking_altsteps_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_008.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_009.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_010.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_011.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_012.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_013.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_014.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_015.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_016.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_017.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_018.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_019.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_020.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_021.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_022.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_023.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_024.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_025.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_026.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_027.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_028.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_029.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_030.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_031.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_032.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_033.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_034.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_035.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_036.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_037.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_038.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_039.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_040.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_041.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_042.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_043.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_044.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_045.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_046.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_047.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_048.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_049.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_050.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_051.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_052.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn create mode 100644 core_language/16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn create mode 100644 core_language/18_overview_program_statements_and_operations/NOTES create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_001.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_002.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_003.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_004.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_005.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_006.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/NegSyn_1901_assignments_001.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_001.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_002.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_003.ttcn create mode 100644 core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_004.ttcn create mode 100644 core_language/19_basic_program_statements/1902_if_else_statement/NegSyn_1902_if_else_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn create mode 100644 core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn create mode 100644 core_language/19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1905_while_statement/NegSem_1905_while_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1906_do_while_statement/NegSem_1906_do_while_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1907_label_statement/NegSem_1907_label_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1907_label_statement/Syn_1907_label_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_004.ttcn create mode 100644 core_language/19_basic_program_statements/1910_return_statement/NOTES create mode 100644 core_language/19_basic_program_statements/1910_return_statement/NegSem_1910_return_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/NegSem_1911_log_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_002.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_003.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn create mode 100644 core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn create mode 100644 core_language/19_basic_program_statements/1912_break_statement/NOTES create mode 100644 core_language/19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn create mode 100644 core_language/19_basic_program_statements/1914_statement_block/NOTES create mode 100644 core_language/20_statement_and_operations_for_alt/2001_the_snapshot_mechanism/NOTES create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NOTES create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_087.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_088.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_089.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_090.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_007.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_008.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_009.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_010.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_011.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_012.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_013.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_014.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/NegSem_2003_the_repeat_statement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_008.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_010.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_011.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_012.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_013.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_007.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_008.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_009.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_010.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Syn_2004_InterleaveStatement_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/NegSem_200501_the_default_mechanism_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_007.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_008.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_007.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_005.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_006.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_001.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_002.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_003.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_004.ttcn create mode 100644 core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_005.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NOTES create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_003.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_004.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_005.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_006.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_007.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_008.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_009.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_010.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_011.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_012.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_013.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_014.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_map_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_003.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_004.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_007.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_008.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_010.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_011.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_012.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_003.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_004.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_005.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_006.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_007.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_008.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_009.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_010.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_011.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_012.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_013.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_014.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_003.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_004.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_005.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_006.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_007.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_008.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_009.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_010.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_012.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_013.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_001.ttcn create mode 100644 core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_002.ttcn create mode 100644 core_language/21_configuration_operations/2102_test_case_operations/NegSem_2102_testcase_stop_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Syn_210301_CreateOperation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_001.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_002.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_003.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_004.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_005.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_006.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_007.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_008.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_009.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_010.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_011.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_012.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_013.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_014.ttcn create mode 100644 core_language/21_configuration_operations/2103_test_component_operations/210309_any_and_all_components/NOTES create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_021.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_022.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_024.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_021.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_022.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_023.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_024.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_025.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_026.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_021.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_022.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_021.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_022.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_023.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_024.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_025.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_026.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_027.ttcn create mode 100644 core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_028.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_020.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_021.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_022.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_004.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_005.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_006.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_007.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_008.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_009.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_010.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_011.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_012.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_013.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_014.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_015.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_016.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_017.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_018.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_019.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_020.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_021.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_022.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_023.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_024.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_025.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_026.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_027.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_028.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_029.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_030.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_031.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_032.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_033.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_034.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_035.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_036.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_037.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_038.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_039.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_040.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_041.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_042.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_043.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_044.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_045.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_046.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_047.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_048.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_049.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_050.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_051.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_052.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_053.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_054.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_055.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_056.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_057.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_058.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_059.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_060.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_061.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_062.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_063.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_064.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_065.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_066.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_067.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_068.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_069.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_070.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_071.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_072.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_073.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_074.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_075.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_076.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_077.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_078.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_079.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_080.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_081.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_082.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_083.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_084.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_085.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_086.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_087.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_088.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_089.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_090.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_091.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_092.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_093.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_094.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_095.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_096.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_097.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_098.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_099.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_100.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_101.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_102.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_103.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_104.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_105.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_106.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_107.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_108.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_109.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_110.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_111.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_112.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_113.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_114.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_115.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_116.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_117.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_118.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_119.ttcn create mode 100644 core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_120.ttcn create mode 100644 core_language/22_communication_operations/NOTES create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_001.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_002.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_003.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_004.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_001.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_002.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_003.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_004.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_005.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_006.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_007.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_008.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_009.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_010.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_011.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_012.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_013.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn create mode 100644 core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_001.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_002.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_003.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_004.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_005.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_006.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_002.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_003.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_004.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_006.ttcn create mode 100644 core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_007.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_001.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_002.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_003.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_004.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_005.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_001.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_002.ttcn create mode 100644 core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_003.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_001.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_002.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_003.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_004.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_005.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_006.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_001.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_002.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_003.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_004.ttcn create mode 100644 core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_005.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_001.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_002.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_003.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_004.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_005.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_006.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_007.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_001.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_002.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_003.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_004.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_005.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_006.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_007.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_008.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_009.ttcn create mode 100644 core_language/23_timer_operations/2306_the_timeout_operation/Syn_2306_timer_timeout_001.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_001.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_002.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_001.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_002.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_001.ttcn create mode 100644 core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NOTES create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NegSem_2401_SetverdictError.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_003.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_004.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_005.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_006.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_007.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_008.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_009.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_010.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_011.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_012.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_InitiallyNone_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_003.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_004.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_005.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_006.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_007.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_008.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_009.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_010.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_011.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_012.ttcn create mode 100644 core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Syn_2401_FiveValues_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_003.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_004.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_005.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_logging_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_003.ttcn create mode 100644 core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_001.ttcn create mode 100644 core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_002.ttcn create mode 100644 core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_003.ttcn create mode 100644 core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_004.ttcn create mode 100644 core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_005.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_001.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_002.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_003.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_004.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_005.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_001.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_002.ttcn create mode 100644 core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_003.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_001.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_002.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_003.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_004.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_001.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_002.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_003.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_004.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_005.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_006.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn create mode 100644 core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_004.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_005.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_006.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_007.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_008.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_009.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_010.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_011.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_012.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_013.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_014.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_015.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_016.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_017.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_018.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_019.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_020.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_021.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_022.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_023.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_024.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_025.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_026.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_027.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_028.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_029.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_030.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_031.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_032.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_033.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_034.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_035.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_001.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_002.ttcn create mode 100644 core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_003.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_001.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_002.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_003.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_004.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_005.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_006.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_007.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_008.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_009.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_010.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_011.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_012.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_013.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_015.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_016.ttcn create mode 100644 core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_017.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_005.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_001.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_002.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_003.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_004.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_005.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_006.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_007.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_008.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_009.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_010.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_011.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_012.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_013.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_014.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_015.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_016.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_001.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_002.ttcn create mode 100644 core_language/27_specifying_attributes/2701_attribute_mechanism/270103_attributes_of_imported_elements/Sem_270103_attributes_of_imported_elements_001.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_001.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_002.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_003.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_004.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_005.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_006.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_007.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_008.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_009.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_010.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_011.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/NegSyn_2702_the_with_statement_001.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_001.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_002.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_003.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_004.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_005.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_006.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_007.ttcn create mode 100644 core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_008.ttcn create mode 100644 core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2703_display_attributes/Sem_2703_display_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_004.ttcn create mode 100644 core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_002.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_003.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_004.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_005.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_006.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_007.ttcn create mode 100644 core_language/27_specifying_attributes/2707_optional_attributes/Syn_2707_OptionalAttributes_001.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_001.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_002.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_003.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_004.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_001.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_002.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_003.ttcn create mode 100644 core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_004.ttcn create mode 100644 core_language/27_specifying_attributes/NOTES create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/NegSem_B010101_omitting_values_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn create mode 100644 core_language/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 core_language/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 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_009.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSyn_B010208_omit_value_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_005.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_007.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_008.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_009.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_010.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_011.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/NegSem_B010504_match_referenced_characters_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_003.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_004.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_005.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_006.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_007.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/NegSyn_B010505_pattern_compatibility_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_001.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_002.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_001.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_002.ttcn create mode 100644 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_001.ttcn create mode 100755 core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_002.ttcn create mode 100755 core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_hostid_function_001.ttcn create mode 100644 core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_testcasename_function_001.ttcn create mode 100644 core_language/C_predefined_functions/NOTES create mode 100644 core_language/D_preprocessing_macros/D01_macro_module/Sem_D01_macro_module_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D02_macro_file/Sem_D02_macro_file_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D03_macro_bfile/Sem_D03_macro_bfile_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D04_macro_line/Sem_D04_macro_line_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D05_macro_scope/NegSem_D05_macro_scope_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn create mode 100644 core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_002.ttcn create mode 100644 core_language/NOTES create mode 100644 core_language/PROGRESS_FILE.txt create mode 100644 dist/.project create mode 100644 dist/15102010/15102010-t3ats-tps.pdf create mode 100644 dist/15102010/15102010-t3ats.zip create mode 100644 dist/15102010/README create mode 100644 dist/MTS#52/MTS-00132-1-T3Conf_ICS-v0.0.1.doc create mode 100644 dist/MTS#52/MTS-00132-2-T3Conf_TPs-v0.0.1.doc create mode 100644 dist/MTS#52/MTS-00132-3-T3Conf_ATS-v0.0.1.doc create mode 100644 dist/MTS#52/t3ref-MTS#52-draft.zip create mode 100644 dist/MTS#52/ts_xxxxxxxx.zip create mode 100644 docs/drafts/15102010-t3ats-tps.docx create mode 100644 docs/drafts/15102010-t3ats-tps.pdf create mode 100644 docs/final-report/STF409StatusReport_FR.xls create mode 100644 docs/final-report/STF409_A_FinRep.doc create mode 100644 docs/final-report/STF409_A_FinRep_template.doc create mode 100644 docs/final-report/STF433_A_FinRep.doc create mode 100644 docs/final-report/STF433_A_FinRep2.doc create mode 100644 docs/final-report/STF433_Requirements.docx create mode 100644 docs/final-report/STF451_A_ProgRep.doc create mode 100644 docs/final-report/TTCN-3 Conformance Test Suite STF 451 Status Report.ppt create mode 100644 docs/final-report/template/433_A_FinRep.doc create mode 100644 docs/final-report/template/451_A_ProgRep_1.doc create mode 100644 docs/final-report/tps.csv create mode 100644 docs/part1-ics/MTS-00132-1ed131-T3Conf_ICS-v0.0.3.doc create mode 100644 docs/part2-tss_and_tps/MTS-00132-2ed131-T3Conf_TPs-v0.0.2.doc create mode 100644 docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3.doc create mode 100644 docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3_ats.zip create mode 100644 docs/releases/stable_draft/MTS-00132-1ed121-T3Conf_ICS-v0.0.1.doc create mode 100644 docs/releases/stable_draft/MTS-00132-2ed121-T3Conf_TPs-v0.0.1.doc create mode 100644 docs/releases/stable_draft/MTS-00132-3ed121-T3Conf_ATS-v0.0.1.doc create mode 100644 docs/releases/stable_draft/MTS-00132-3ed121-T3Conf_ATS-v0.0.2_ats.zip create mode 100644 docs/releases/stable_draft/STF433FinalDelivery.zip create mode 100644 docs/releases/stable_draft/STF433MTS_Delivery.zip create mode 100644 docs/releases/stable_draft/STF433_report_reqstracer_1336980630407.zip create mode 100644 docs/stf409/MTS(10)0066_Report_MTS#51_Draft_Meeting_Report.doc create mode 100644 docs/stf409/PM_409_Minutes_v01.doc create mode 100644 docs/stf409/STF_409_SessionPlan.xls create mode 100644 docs/stf409/ToR409v08_MTS_Test_TTCN-3_tools.doc create mode 100644 docs/t3uc2011/TTCN-3-conformance-test-suite.ppt create mode 100644 docs/t3uc2011/TemplatePresentationT3UC2011-rev1.doc create mode 100644 docs/templates/part1-ics/CAM_PICS_v005.doc create mode 100644 docs/templates/part2-tss_and_tps/ts_102595v010200p.doc create mode 100644 docs/templates/part3-ats_and_ixit/ts_102596v010200p.doc create mode 100644 misc/.gitignore create mode 100644 misc/.project create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_031.ttcn create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_032.ttcn create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_033.ttcn create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_034.ttcn create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_035.ttcn create mode 100644 misc/ATS-on_hold/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_036.ttcn create mode 100644 misc/ATS-on_hold/NOTES create mode 100644 misc/STF409Tools/.classpath create mode 100644 misc/STF409Tools/.project create mode 100644 misc/STF409Tools/.settings/org.eclipse.core.resources.prefs create mode 100644 misc/STF409Tools/.settings/org.eclipse.jdt.core.prefs create mode 100644 misc/STF409Tools/README.txt create mode 100644 misc/STF409Tools/deliver.jar create mode 100644 misc/STF409Tools/deliver.jardesc create mode 100644 misc/STF409Tools/resources/ICSTable-sample.htm create mode 100644 misc/STF409Tools/resources/STF409Tools.properties create mode 100644 misc/STF409Tools/resources/ics-file-foot.html create mode 100644 misc/STF409Tools/resources/ics-file-head.html create mode 100644 misc/STF409Tools/resources/ics-section-foot.html create mode 100644 misc/STF409Tools/resources/ics-section-head.html create mode 100644 misc/STF409Tools/resources/ics-table-line.html create mode 100644 misc/STF409Tools/resources/references.properties create mode 100644 misc/STF409Tools/resources/tp-file-foot.html create mode 100644 misc/STF409Tools/resources/tp-file-head.html create mode 100644 misc/STF409Tools/resources/tp-sample.htm create mode 100644 misc/STF409Tools/resources/tp-section-foot.html create mode 100644 misc/STF409Tools/resources/tp-section-head.html create mode 100644 misc/STF409Tools/resources/tp-table.html create mode 100644 misc/STF409Tools/resources/tss-file-foot.html create mode 100644 misc/STF409Tools/resources/tss-file-head.html create mode 100644 misc/STF409Tools/resources/tss-sample.htm create mode 100644 misc/STF409Tools/resources/tss-section-foot.html create mode 100644 misc/STF409Tools/resources/tss-section-head.html create mode 100644 misc/STF409Tools/src/Clause.java create mode 100644 misc/STF409Tools/src/ClauseEntry.java create mode 100644 misc/STF409Tools/src/Clipboard2JavaString.java create mode 100644 misc/STF409Tools/src/CoverageLister.java create mode 100644 misc/STF409Tools/src/DeliverableGenerator.java create mode 100644 misc/STF409Tools/src/FileUtils.java create mode 100644 misc/STF409Tools/src/ICSProformaTableGenerator.java create mode 100644 misc/STF409Tools/src/Logger.java create mode 100644 misc/STF409Tools/src/Main.java create mode 100644 misc/STF409Tools/src/T3ExpectedOutput.java create mode 100644 misc/STF409Tools/src/T3Purpose.java create mode 100644 misc/STF409Tools/src/TSSClause.java create mode 100644 misc/STF409Tools/src/TSSRow.java create mode 100644 misc/STF409Tools/src/TSSTable.java create mode 100644 misc/STF409Tools/src/TestPurposeGenerator.java create mode 100644 misc/STF409Tools/src/TestSuiteStructureGenerator.java create mode 100644 misc/TTCN-3 Conformance Test Suite STF 409 Status Report.pdf create mode 100644 misc/TTCN-3 Conformance Test Suite STF 409 Status Report.ppt create mode 100644 misc/TTCN-3 Conformance Test Suite STF 433 Status Report.pdf create mode 100644 misc/TTCN-3 Conformance Test Suite STF 433 Status Report.ppt create mode 100644 misc/TestCastTester/.classpath create mode 100644 misc/TestCastTester/.project create mode 100644 misc/TestCastTester/.settings/org.eclipse.jdt.core.prefs create mode 100644 misc/TestCastTester/README.txt create mode 100644 misc/TestCastTester/TestCastTester.launch create mode 100644 misc/TestCastTester/build.xml create mode 100644 misc/TestCastTester/resources/TestCastTester.properties create mode 100644 misc/TestCastTester/resources/skipList.txt create mode 100644 misc/TestCastTester/src/Clipboard2JavaString.java create mode 100644 misc/TestCastTester/src/FileUtils.java create mode 100644 misc/TestCastTester/src/Logger.java create mode 100644 misc/TestCastTester/src/T3ExpectedOutput.java create mode 100644 misc/TestCastTester/src/TestCastProjectBuilder.java create mode 100644 misc/TestCastTester/src/TestCastRunner.java create mode 100644 misc/TestCastTester/src/TestCastTester.java create mode 100644 misc/TestCastTester_GUI/Auto_execution.php create mode 100644 misc/TestCastTester_GUI/Comm.java create mode 100644 misc/TestCastTester_GUI/Compilation_results_check.php create mode 100644 misc/TestCastTester_GUI/Converter_to_TestCast_project.php create mode 100644 misc/TestCastTester_GUI/README.txt create mode 100644 misc/TestCastTester_GUI/Testcases_where_execution_result_is_unexpected.txt create mode 100644 misc/TestCastTester_GUI/exec_script.ahk create mode 100644 misc/TestCastTester_GUI/loopback/Etsi.Ttcn3.Tci.dll create mode 100644 misc/TestCastTester_GUI/loopback/Etsi.Ttcn3.Tri.dll create mode 100644 misc/TestCastTester_GUI/loopback/Etsi.Ttcn3.XTri.dll create mode 100644 misc/TestCastTester_GUI/loopback/LoopbackSUT_NC.exe create mode 100644 misc/TestCastTester_GUI/loopback/TestCast.Ttcn3.TriTci.dll create mode 100644 misc/TestCastTester_GUI/quit_script.ahk create mode 100644 misc/adapters/TestCast/broadcast/Etsi.Ttcn3.Tci.dll create mode 100644 misc/adapters/TestCast/broadcast/Etsi.Ttcn3.Tri.dll create mode 100644 misc/adapters/TestCast/broadcast/InterLoopbackAdapter.exe create mode 100644 misc/adapters/TestCast/broadcast/TestCast.Ttcn3.TriTci.dll create mode 100644 misc/adapters/TestCast/external_functions/external.jar create mode 100644 misc/adapters/TestCast/loopback/Etsi.Ttcn3.Tci.dll create mode 100644 misc/adapters/TestCast/loopback/Etsi.Ttcn3.Tri.dll create mode 100644 misc/adapters/TestCast/loopback/Etsi.Ttcn3.XTri.dll create mode 100644 misc/adapters/TestCast/loopback/LoopbackSUT_NC.exe create mode 100644 misc/adapters/TestCast/loopback/TestCast.Ttcn3.TriTci.dll create mode 100644 misc/config/references.properties create mode 100644 misc/config/t3q_stf409.xml create mode 100644 misc/reports/mts-open_issues.txt create mode 100644 misc/reports/testcast-19112010/all.log.txt create mode 100644 misc/reports/testcast-19112010/critical.log.txt create mode 100644 misc/reports/testcast-19112010/trierror.txt create mode 100644 misc/reports/testcast-25112010/all.log.txt create mode 100644 misc/reports/testcast-25112010/critical.log.txt create mode 100755 misc/scripts/check_module_names create mode 100755 misc/scripts/correct_sections create mode 100644 misc/scripts/dumps/verdict_checker.txt create mode 100644 misc/scripts/files.txt create mode 100644 misc/scripts/fix-ttcn3-extensions.sh create mode 100755 misc/scripts/metrics create mode 100755 misc/scripts/replace_version create mode 100755 misc/scripts/run_t3q create mode 100644 misc/scripts/testcast.tcproj create mode 100644 misc/scripts/testcast_tester create mode 100755 misc/scripts/verdict_checker create mode 100644 misc/tpgen-documents/Test Purposes.docx create mode 100644 misc/tpgen-documents/tpgen-sample.pdf create mode 100644 misc/tpgen-documents/tps.xls create mode 100644 misc/tpgen/tpGenSTF409.jar create mode 100755 misc/tpgen/tpgen.sh create mode 100644 misc/ttcn3-snippets/mtc-ptc-sync.ttcn create mode 100644 misc/txt/IDEAS create mode 100644 misc/txt/README create mode 100644 misc/txt/roadmap.txt create mode 100644 misc/txt/standard-issues.txt create mode 100644 misc/vendor-feedback/Elvior/09-11-2010-discussion.doc create mode 100644 misc/vendor-feedback/Elvior/09-11-2010-response.doc create mode 100644 misc/vendor-feedback/Elvior/09-11-2010.doc delete mode 100644 standards/4.5.1/es_20187309v040501p.doc diff --git a/core_language/.classpath b/core_language/.classpath new file mode 100644 index 0000000..4a878a4 --- /dev/null +++ b/core_language/.classpath @@ -0,0 +1,3 @@ + + + diff --git a/core_language/.externalToolBuilders/de.ugoe.cs.swe.trex.ui.rulebuilder.launch b/core_language/.externalToolBuilders/de.ugoe.cs.swe.trex.ui.rulebuilder.launch new file mode 100644 index 0000000..ef274bc --- /dev/null +++ b/core_language/.externalToolBuilders/de.ugoe.cs.swe.trex.ui.rulebuilder.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/core_language/.gitignore b/core_language/.gitignore new file mode 100644 index 0000000..ee2e9b6 --- /dev/null +++ b/core_language/.gitignore @@ -0,0 +1 @@ +.DEPENDENCIES diff --git a/core_language/.project b/core_language/.project new file mode 100644 index 0000000..b2ec770 --- /dev/null +++ b/core_language/.project @@ -0,0 +1,44 @@ + + + ATS + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/de.ugoe.cs.swe.trex.ui.rulebuilder.launch + + + + + com.testingtech.ttworkbench.ttthree.modelBuilder + + + + + com.testingtech.ttworkbench.ttthree.todoBuilder + + + + + com.testingtech.ttworkbench.ttthree.tt3pluginbuilder + + + + + + com.testingtech.ttworkbench.core.ttcn3nature + de.ugoe.cs.swe.trex.ui.trexnature + org.eclipse.jdt.core.javanature + + diff --git a/core_language/.settings/com.testingtech.ttworkbench.core.prefs b/core_language/.settings/com.testingtech.ttworkbench.core.prefs new file mode 100644 index 0000000..0697526 --- /dev/null +++ b/core_language/.settings/com.testingtech.ttworkbench.core.prefs @@ -0,0 +1,23 @@ +eclipse.preferences.version=1 +keep_migrated_project_properties=true +notify-maint-contract-expire=false +notify-maint-contract-expired=true +reporting=2 +standard-compliance=error +tt3-plugins-path= +ttcn3-version=0 +ttcn3.continue_on_fail=true +ttcn3.gen_debug_code_record_init=false +ttcn3.generate_mlf=false +ttcn3.java_compile_all_at_once=true +ttcn3.main_module= +ttcn3.mlf_class=com.testingtech.ttcn.tri.PluginTestAdapter +ttcn3.mlf_class_builtin=com.testingtech.ttcn.tri.PluginTestAdapter +ttcn3.mlf_jar= +ttcn3.mlf_radiobutton=1 +ttcn3.mlf_ta_config=taconfig.xml +ttcn3.output_folder=//PROJECT_NAME//ttcn3build +ttcn3.output_same_as_src=false +ttcn3.source_folders=//PROJECT_NAME//05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level +ttcn3.use_bigint=true +ttcn3.use_destination_path_for_ttcn3view=true diff --git a/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSem_0501_Identifier_001.ttcn b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSem_0501_Identifier_001.ttcn new file mode 100755 index 0000000..acb93fd --- /dev/null +++ b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSem_0501_Identifier_001.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.1, Ensure that cannot pass a charstring value to an integer variable. + ** @verdict pass reject + *****************************************************************/ +module NegSem_0501_Identifier_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_0501_Identifier_001() runs on GeneralComp { + var integer v_i := "wrong_type"; +} + +control{ + execute(TC_NegSem_0501_Identifier_001(), 1.0); +} + +} diff --git a/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSyn_0501_Identifier_001.ttcn b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSyn_0501_Identifier_001.ttcn new file mode 100755 index 0000000..2dbe322 --- /dev/null +++ b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/NegSyn_0501_Identifier_001.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.1, Ensure that when the IUT loads a module containing an identifier named with a keyword then the module is rejected. + ** @verdict pass reject + *****************************************************************/ +module NegSyn_0501_Identifier_001 { + +type component GeneralComp { +} + +testcase TC_NegSyn_0501_Identifier_001() runs on GeneralComp { + var integer component := 1; +} + +control{ + execute(TC_NegSyn_0501_Identifier_001(), 1.0); +} + +} diff --git a/core_language/05_basic_language_elements/0501_identifiers_and_keywords/Syn_0501_Identifier_001.ttcn b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/Syn_0501_Identifier_001.ttcn new file mode 100755 index 0000000..08ac871 --- /dev/null +++ b/core_language/05_basic_language_elements/0501_identifiers_and_keywords/Syn_0501_Identifier_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.1, Ensure that the IUT handle the identifiers case sensitively. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Syn_0501_Identifier_001 { + +type component IdComp { + const integer cl_int := 0; +} + +testcase TC_Syn_0501_Identifier_001() runs on IdComp { + const integer cl_iNT := 1; + if ( match(cl_int, 0) ){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Syn_0501_Identifier_001(), 1.0); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_001.ttcn new file mode 100755 index 0000000..8bc08da --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.2 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2.1, Ensure that the IUT correctly handles scope of formal function parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_050201_Scope_of_parameters_001 { + +type component GeneralComp { +} + +function f_formalParameterScope_in(in integer p_myParameter) { + p_myParameter := 1; + if (p_myParameter == 1){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + + +testcase TC_Sem_050201_Scope_of_parameters_001() runs on GeneralComp { + + var integer v_int := 0; + f_formalParameterScope_in(v_int); + + if (v_int == 0) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + + +control{ + execute(TC_Sem_050201_Scope_of_parameters_001()); + +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_002.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_002.ttcn new file mode 100644 index 0000000..48202b8 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050201_Scope_of_parameters/Sem_050201_Scope_of_parameters_002.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2.1, Ensure that the IUT correctly handles scope of formal function parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_050201_Scope_of_parameters_002 { + +type component GeneralComp { +} + + +function f_formalParameterScope_inout(inout integer p_myParameter) { + p_myParameter := 1; +} + + + +testcase TC_Sem_050201_Scope_of_parameters_002() runs on GeneralComp { + + var integer v_int := 0; + f_formalParameterScope_inout(v_int); + + if (v_int == 1) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + + +control{ + execute(TC_Sem_050201_Scope_of_parameters_002()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_001.ttcn new file mode 100755 index 0000000..146fc16 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_001 { + type component GeneralComp { + const integer cl_int := 0; + } + + testcase TC_NegSem_050202_Uniqueness_001() runs on GeneralComp { + const integer cl_int := 0; + } + control { + execute(TC_NegSem_050202_Uniqueness_001()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_004.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_004.ttcn new file mode 100755 index 0000000..ab53f58 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_004.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_004 { + const integer c_int := 0; + + type component GeneralComp { + } + + function f_funcScope() {} + + testcase TC_NegSem_050202_Uniqueness_004() runs on GeneralComp { + const integer c_int := 0; + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_004()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_005.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_005.ttcn new file mode 100755 index 0000000..a867fe6 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_005.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_005 { + const integer c_int := 0; + + type component GeneralComp { + } + + function f_funcScope() { + const integer c_int := 0; + } + + testcase TC_NegSem_050202_Uniqueness_005() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_005()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_006.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_006.ttcn new file mode 100755 index 0000000..f7015a6 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_006.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_006 { + type component GeneralComp { + const integer repeatedIdentifier := 0; + } + + testcase TC_NegSem_050202_Uniqueness_006() runs on GeneralComp { + var boolean repeatedIdentifier := true; + } + control { + execute(TC_NegSem_050202_Uniqueness_006()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_007.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_007.ttcn new file mode 100755 index 0000000..4561c3c --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_007.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_007 { + type component GeneralComp { + const integer repeatedIdentifier := 0; + } + + function f_funcScope() runs on GeneralComp { + var boolean repeatedIdentifier := true; + } + + testcase TC_NegSem_050202_Uniqueness_007() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_007()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_008.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_008.ttcn new file mode 100755 index 0000000..02717b4 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_008.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_008 { + type component GeneralComp { + } + + function f_funcScope(boolean repeatedIdentifier) { + const integer repeatedIdentifier := 0; + } + + testcase TC_NegSem_050202_Uniqueness_008() runs on GeneralComp { + var boolean v_boolean := true; + f_funcScope(v_boolean); + } + control { + execute(TC_NegSem_050202_Uniqueness_008()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_009.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_009.ttcn new file mode 100755 index 0000000..c7ab510 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_009.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_009 { + const integer repeatedIdentifier := 0; + + type component GeneralComp { + } + + function f_funcScope() {} + + testcase TC_NegSem_050202_Uniqueness_009() runs on GeneralComp { + var boolean repeatedIdentifier := true; + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_009()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_010.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_010.ttcn new file mode 100755 index 0000000..8e75894 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_010.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_010 { + const integer repeatedIdentifier := 0; + + type component GeneralComp { + } + + function f_funcScope() { + var boolean repeatedIdentifier := true; + } + + testcase TC_NegSem_050202_Uniqueness_010() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_010()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_011.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_011.ttcn new file mode 100755 index 0000000..feaee1c --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_011.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ +module NegSem_050202_Uniqueness_011 { + type component GeneralComp { + } + + function f_funcScope() { + var boolean NegSem_050202_Uniqueness_011 := true; + } + + testcase TC_NegSem_050202_Uniqueness_011() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_011()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_012.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_012.ttcn new file mode 100755 index 0000000..e5de96e --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/NegSem_050202_Uniqueness_012.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass reject + ***************************************************/ + +module NegSem_050202_Uniqueness_012 { + import from NegSem_050202_Uniqueness_012_import { const all; } + + type component GeneralComp { + } + + function f_funcScope() { + var boolean NegSem_050202_Uniqueness_012_import := true; + } + + testcase TC_NegSem_050202_Uniqueness_012() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_NegSem_050202_Uniqueness_012()); + } +} + +module NegSem_050202_Uniqueness_012_import { + const integer c_integer := 0; +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001.ttcn new file mode 100755 index 0000000..fcd04dc --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050202_Uniqueness_001 { + import from Sem_050202_Uniqueness_001_import { + const all; + } + + type component GeneralComp { + } + + function f_funcScope() { + var boolean repeatedIdentifier := true; + + if(repeatedIdentifier==true) { setverdict(pass); } + } + + testcase TC_Sem_050202_Uniqueness_001() runs on GeneralComp { + f_funcScope(); + } + control { + execute(TC_Sem_050202_Uniqueness_001()); + } +} + +module Sem_050202_Uniqueness_001_import { + const integer repeatedIdentifier := 0; // repeated indentifier from imported module is allowed +} + \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn new file mode 100755 index 0000000..aa6ce51 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_002.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_050202_Uniqueness_002 { + type component GeneralComp { + const integer cl_int := 0; + } + + function f_funcScope() { + const integer cl_int := 1; + } + + testcase TC_Sem_050202_Uniqueness_002() runs on GeneralComp { + f_funcScope(); + if (cl_int == 0) { // component value + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_050202_Uniqueness_002()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn new file mode 100755 index 0000000..60f4fa5 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_003.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_050202_Uniqueness_003 { + type component GeneralComp { + } + + function f_funcScope() { + const integer cl_int := 0; + } + + testcase TC_Sem_050202_Uniqueness_003() runs on GeneralComp { + const integer cl_int := 1; + f_funcScope(); + if (cl_int == 1) { // local value + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_050202_Uniqueness_003()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn new file mode 100644 index 0000000..8603ecf --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_004.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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,MySecondEnumValue) and match(v_enum_2,MySecondEnumValue)) { // local value + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_050202_Uniqueness_004()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn new file mode 100644 index 0000000..9f4b5c1 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/050202_Uniqueness_of_identifiers/Sem_050202_Uniqueness_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 521 + ** @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,MySecondEnumValue) and match(v_rec.Myint,1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_050202_Uniqueness_005()); + } +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn new file mode 100755 index 0000000..9374e99 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2, Ensure that the IUT correctly handles definitions of local scope + ** @verdict pass reject + ***************************************************/ +module NegSem_0502_Scope_001 { + +type component GeneralComp { + var integer vc_component := 0; +} + +function f_funcScope() runs on GeneralComp { + var integer v_function := 0; +} + +testcase TC_NegSem_0502_Scope_001() runs on GeneralComp { + f_funcScope(); + if ( match(v_function, 0) ){ + } +} + +control{ + var integer v_control := 0; + execute(TC_NegSem_0502_Scope_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn new file mode 100755 index 0000000..11f6d87 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2, Ensure that the IUT correctly handles definitions of local scope + ** @verdict pass reject + ***************************************************/ +module NegSem_0502_Scope_002 { + +type component GeneralComp { + var integer vc_component := 0; +} + +function f_funcScope() runs on GeneralComp { + var integer v_function := 1; +} + +testcase TC_NegSem_0502_Scope_002() runs on GeneralComp { + if ( match(v_control, 0) ){ + } +} + +control{ + var integer v_control := 0; + execute(TC_NegSem_0502_Scope_002()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn new file mode 100644 index 0000000..ca81abe --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/NegSem_0502_Scope_003.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2, Ensure that the IUT correctly handles definitions of local scope + ** @verdict pass reject + ***************************************************/ +module NegSem_0502_Scope_003 { + +type component GeneralComp { + var integer vc_component := 0; +} + +function f_funcScope() runs on GeneralComp { + var integer v_function := 0; +} + +testcase TC_NegSem_0502_Scope_003() runs on GeneralComp { + if(true) { + var integer v_statement := 0; + } + if ( match(v_statement, 0) ) { + } +} + +control{ + var integer v_control := 0; + execute(TC_NegSem_0502_Scope_003()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_001.ttcn new file mode 100755 index 0000000..bbbbba7 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2, Ensure that the IUT handle scope hieararchy of component constants. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0502_Scope_001 { + +type component GeneralComp { + const integer cl_int := 0; +} + +testcase TC_Sem_0502_Scope_001() runs on GeneralComp { + if ( match(cl_int, 0) ){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_001()); +} +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_002.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_002.ttcn new file mode 100755 index 0000000..fe21843 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2, Ensure that the IUT handle scope hieararchy with component booleans. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0502_Scope_002 { + +type component GeneralComp { + var boolean vc_bool := false; +} + +testcase TC_Sem_0502_Scope_002_a() runs on GeneralComp { + if (vc_bool == false){ + vc_bool := true; + setverdict(pass); + } + else { + setverdict(fail); + } +} +/********************************************************************************************* + ** @desc Test case TC_Sem_0502_Scope_002_a shall not effect of the value of boolean vc_bool + ********************************************************************************************/ +testcase TC_Sem_0502_Scope_002_b() runs on GeneralComp { + if (vc_bool == false){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_002_a()); + execute(TC_Sem_0502_Scope_002_b()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_003.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_003.ttcn new file mode 100755 index 0000000..937bfa5 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_003.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2, Ensure that the IUT handles scope hierarchy via functions. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0502_Scope_003 { + +type component GeneralComp { + var integer vc_int := 0; +} + +function f_funcScope() runs on GeneralComp { + vc_int := 1; + if (vc_int == 1){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +testcase TC_Sem_0502_Scope_003_a() runs on GeneralComp { + f_funcScope(); +} + +testcase TC_Sem_0502_Scope_003_b() runs on GeneralComp { + f_funcScope(); + if (vc_int == 1){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_003_a()); + execute(TC_Sem_0502_Scope_003_b()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_004.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_004.ttcn new file mode 100755 index 0000000..a80bb41 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_004.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2, Ensure that the IUT correctly handles the scope of definitions made in the module part. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0502_Scope_004 { + + const integer c_int := 0; + +type component GeneralComp { +} + +testcase TC_Sem_0502_Scope_004() runs on GeneralComp { + if (c_int == 0){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_004()); +} +} + + +module Sem_0502_Scope_004_import { + +import from Sem_0502_Scope_004 { + const all +} + +type component GeneralComp { +} + +testcase TC_Sem_0502_Scope_004_import() runs on GeneralComp { + if (c_int == 0){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_004_import()); +} +} + + diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_008.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_008.ttcn new file mode 100755 index 0000000..3c4b436 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Sem_0502_Scope_008.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.2, Ensure that the IUT correctly handles definitions of extended component scope + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0502_Scope_008 { + +type component GeneralComp { + var integer vc_component := 1; +} + +type component ExtendedComp extends GeneralComp { +} + + +testcase TC_Sem_0502_Scope_008() runs on ExtendedComp { + if (vc_component == 1) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0502_Scope_008()); +} + +} diff --git a/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Syn_0502_Scope_001.ttcn b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Syn_0502_Scope_001.ttcn new file mode 100755 index 0000000..3a1d434 --- /dev/null +++ b/core_language/05_basic_language_elements/0502_scope_rules/0502_toplevel/Syn_0502_Scope_001.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.2, Ensure that the IUT supports all the nine scope units. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Syn_0502_Scope_001 { + +const integer c_intModule := 0; // scope a) module definitions part +type integer IntegerMod; + +type component GeneralComp { + const integer cl_int := 0; + var integer vc_int := 0; + var boolean vc_bool := false; + timer tc_timer := 0.1; // scope c) component types +} + +testcase TC_Syn_0502_Scope_001() runs on GeneralComp { // scope f) test cases + f_funcScope(); + tc_timer.start; + a_altstepScope(); + if (c_intModule == 0){ + setverdict(pass); + } + else { + setverdict(fail); + } + if (cl_int == 0){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +group recordGroup { // scope g) statement block + type record RecScope { // scope i) user defined named types + IntegerMod field1, + boolean field2 + } +} + +group templateGroup { + template RecScope m_scope := { // scope h) templates + field1 := 0, + field2 := true + } +} + +function f_funcScope() runs on GeneralComp { + vc_int := 1; // scope d) functions + if (vc_int == 1){ + setverdict(pass); + } + else { + setverdict(fail); + } +} + +altstep a_altstepScope() runs on GeneralComp { + var integer v_intAltStep := 2; // scope e) altsteps + []tc_timer.timeout{ + if (v_intAltStep == 2) { + setverdict(pass); + } else { + setverdict(fail) + } + } +} + + +control{ + var integer v_intControl := 0; // scope b) control part of a module + + execute(TC_Syn_0502_Scope_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_001.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_001.ttcn new file mode 100755 index 0000000..bc8f3ff --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.3, Ensure that declarations are in the allowed ordering + ** @verdict pass reject + ***************************************************/ +module NegSem_0503_Ordering_001 { + + type component GeneralComp { + var integer vc_component := 0; + } + + function f_function() runs on GeneralComp { + var integer v_function := 0; + } + + testcase TC_NegSem_0503_Ordering_001() runs on GeneralComp { + if(true) { + var integer v_statement := 0; + if (v_nested_statement == 0) { // attempt to access a variable defined in the next scope + var integer v_nested_statement := 0; + } + + } + } + + control { + var integer v_control := 0; + execute(TC_NegSem_0503_Ordering_001()); + } + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_002.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_002.ttcn new file mode 100755 index 0000000..47cac51 --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_002.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.3, Ensure that declarations are in the allowed ordering + ** @verdict pass reject + ***************************************************/ +module NegSem_0503_Ordering_002 { + + type component GeneralComp { + var integer vc_component := 0; + } + + function f_function() runs on GeneralComp { + var integer v_function := 0; + } + + testcase TC_NegSem_0503_Ordering_002() runs on GeneralComp { + if(true) { + var integer v_int := 0; + if (v_int == 0) { + var integer v_statement_block_1 := 0; + v_statement_block_1 := v_statement_block_1 + 1; + var integer v_statement_block_2 := 0; // declaration has to go before other statements + } + + } + setverdict(pass); + } + + control { + var integer v_control := 0; + execute(TC_NegSem_0503_Ordering_002()); + } + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_003.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_003.ttcn new file mode 100755 index 0000000..38f65f4 --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/NegSem_0503_Ordering_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.3, Ensure that declarations are in the allowed ordering + ** @verdict pass reject + ***************************************************/ +module NegSem_0503_Ordering_003 { + + type component GeneralComp { + var integer vc_component := 0; + } + + function f_function() runs on GeneralComp { + var integer v_function; + v_function := 0; + var integer v_function_2 := 0; // declaration has to go before other statements + } + + testcase TC_NegSem_0503_Ordering_003() runs on GeneralComp { + if(true) { + var integer v_statement := 0; + if (v_statement == 0) { + var integer v_nested_statement := 0; + } + + } + setverdict(pass); + } + + control { + var integer v_control := 0; + execute(TC_NegSem_0503_Ordering_003()); + } + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_001.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_001.ttcn new file mode 100755 index 0000000..3eb12f9 --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.3, Ensure that allowed orderings of declarations are supported + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0503_Ordering_001 { + +type component GeneralComp { + var integer vc_component := 0; +} + +testcase TC_Sem_0503_Ordering_001() runs on GeneralComp { + var integer v_testcase := 0; + + f_function(); + if(true) { + var integer v_statement := 0; + if (v_statement == 0) { + var integer v_nested_statement := 0; + setverdict(pass); + } + + } +} + +function f_function() runs on GeneralComp { + var integer v_function := 0; +} + +control { + var integer v_control := 0; + execute(TC_Sem_0503_Ordering_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_002.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_002.ttcn new file mode 100644 index 0000000..26b3b38 --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_002.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @desc Test cases for clause 5.3 ordering rules + ** @purpose 1:5.3, Ensure that allowed any ordering with component definitions are supported + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0503_Ordering_002 { + + + type port loopbackPort message { + inout integer + } + +type component GeneralComp //declarations inside a component can be in any order +{ + timer t_rec,t_rec2; + var integer v_comp1:=0; + port loopbackPort messagePortA; + var integer v_comp2:=0; +} + +testcase TC_Sem_0503_Ordering_002() runs on GeneralComp { + + v_comp1 := 1; + v_comp2 := v_comp1; + if (v_comp2 == 1) { + setverdict(pass); + } + +} + +control { + execute(TC_Sem_0503_Ordering_002()); +} + +} diff --git a/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_005.ttcn b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_005.ttcn new file mode 100755 index 0000000..dbce6a6 --- /dev/null +++ b/core_language/05_basic_language_elements/0503_ordering_of_declarations/Sem_0503_Ordering_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @desc Test cases for clause 5.2 Scope rules + ** @purpose 1:5.3, Ensure that allowed orderings of declarations are supported + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0503_Ordering_005 { + +type component GeneralComp { + var integer vc_component := 0; +} + +testcase TC_Sem_0503_Ordering_005() runs on GeneralComp { + var integer v_testcase := 0; + + f_function(); + if(true) { + var integer v_statement := 0; + if (c_module == 0) { // c_module is known as it is declared on the module level + var integer v_nested_statement := 0; + setverdict(pass); + } + + } +} + +function f_function() runs on GeneralComp { + var integer v_function := 0; +} + + const integer c_module := 0; + +control { + var integer v_control := 0; + execute(TC_Sem_0503_Ordering_005()); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_001.ttcn new file mode 100644 index 0000000..9310831 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of template cannot used dash as default value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Formal parameters of modified templates may inherit the default values from the corresponding +// parameters of their parent templates; this shall explicitly be denoted by using a dash (don't +// change) symbol at the place of the modified template parameters' default value. + +module NegSem_05040101_parameters_of_kind_value_001 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(integer p_int1 := 3, in integer p_int2 := -) := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_002.ttcn new file mode 100644 index 0000000..324cb04 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_002.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that modified template cannot used dash as default value when original value parameter had no default value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Formal parameters of modified templates may inherit the default values from the corresponding +// parameters of their parent templates; this shall explicitly be denoted by using a dash (don't +// change) symbol at the place of the modified template parameters' default value. + +module NegSem_05040101_parameters_of_kind_value_002 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(integer p_int1, in integer p_int2 := 4) := { + field1 := p_int1, + field2 := p_int2 + } + + template R m_tmod(integer p_int1 := -, in integer p_int2 := 6) modifies m_t := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_003.ttcn new file mode 100644 index 0000000..e9fd8e9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that template definitions cannot contain out value formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// Formal value parameters of templates ... shall always be in parameters. + +module NegSem_05040101_parameters_of_kind_value_003 { + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(out integer p_int) return integer { + p_int := 2; + return p_int; + } + + template R m_t(out integer p_int) := { + field1 := 0, + field2 := f(p_int) + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_003() runs on GeneralComp { + var integer v_int; + log(m_t(v_int)); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_004.ttcn new file mode 100644 index 0000000..10da8cf --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that template definitions cannot contain inout value formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// Formal value parameters of templates ... shall always be in parameters. + +module NegSem_05040101_parameters_of_kind_value_004 { + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(inout integer p_int) return integer { + p_int := p_int * 2; + return p_int; + } + + template R m_t(inout integer p_int) := { + field1 := 0, + field2 := f(p_int) + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_004() runs on GeneralComp { + var integer v_int := 1; + log(m_t(v_int)); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_004()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_005.ttcn new file mode 100644 index 0000000..ec14fde --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_005.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that out value formal parameters cannot have default values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction d) +// Default values can be provided for in parameters only. + +module NegSem_05040101_parameters_of_kind_value_005 { + type component GeneralComp { + } + + function f(out integer p_int := 5) { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_005() runs on GeneralComp { + var integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_006.ttcn new file mode 100644 index 0000000..2ad425a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_006.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that inout value formal parameters cannot have default values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction d) +// Default values can be provided for in parameters only. + +module NegSem_05040101_parameters_of_kind_value_006 { + type component GeneralComp { + } + + function f(inout integer p_int := 5) { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_006() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_007.ttcn new file mode 100644 index 0000000..57f5644 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_007.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that incompatible value in default value assignment of value formal parameters causes error + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// The expression of the formal parameters' default value has to be compatible with the type of the parameter. + +module NegSem_05040101_parameters_of_kind_value_007 { + type component GeneralComp { + } + + function f(in integer p_int := 5.0) { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_007() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_009.ttcn new file mode 100644 index 0000000..4d3b162 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_009.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that default value of value formal parameters cannot reference other parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// The expression shall not refer to other parameters of the same parameter list. + +module NegSem_05040101_parameters_of_kind_value_009 { + type component GeneralComp { + } + + function f(in integer p_int, in integer p_int2 := p_int) runs on GeneralComp { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_009() runs on GeneralComp { + f(2); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_009()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_011.ttcn new file mode 100644 index 0000000..3f97ac2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_011.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that error is generated if formal value parameter of function contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040101_parameters_of_kind_value_011 { + + type component GeneralComp { + } + + function f (integer p_int := -) { + log(p_int); + } + + testcase TC_NegSem_05040102_parameters_of_kind_value_011() runs on GeneralComp { + f(1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_value_011()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_012.ttcn new file mode 100644 index 0000000..c140ee5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_012.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that error is generated if formal value parameter of altstep contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040101_parameters_of_kind_value_012 { + + type component GeneralComp { + } + + altstep a(integer p_int := -) { + []any timer.timeout {} + [else] {} + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_012() runs on GeneralComp { + a(1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_012()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_013.ttcn new file mode 100644 index 0000000..cb2a432 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_013.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that error is generated if formal value parameter of test case contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040101_parameters_of_kind_value_013 { + + type component GeneralComp { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_013(integer p_int := -) runs on GeneralComp { + log(p_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_013(1)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_014.ttcn new file mode 100644 index 0000000..256b8dd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_014.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that out formal value parameters cannot have lazy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction j) +// Only in parameters can be declared lazy or fuzzy. + +module NegSem_05040101_parameters_of_kind_value_014 { + + type component GeneralComp { + } + + function f(out @lazy integer p_int) { + p_int := 6; + } + testcase TC_NegSem_05040101_parameters_of_kind_value_014() runs on GeneralComp { + var integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_014()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_015.ttcn new file mode 100644 index 0000000..e5a5d4d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_015.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that out formal value parameters cannot have fuzzy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction j) +// Only in parameters can be declared lazy or fuzzy. + +module NegSem_05040101_parameters_of_kind_value_015 { + + type component GeneralComp { + } + + function f(out @fuzzy integer p_int) { + p_int := 6; + } + testcase TC_NegSem_05040101_parameters_of_kind_value_015() runs on GeneralComp { + var integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_015()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_016.ttcn new file mode 100644 index 0000000..b66e297 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_016.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that inout formal value parameters cannot have lazy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction j) +// Only in parameters can be declared lazy or fuzzy. + +module NegSem_05040101_parameters_of_kind_value_016 { + + type component GeneralComp { + } + + function f(inout @lazy integer p_int) { + p_int := 6; + } + testcase TC_NegSem_05040101_parameters_of_kind_value_016() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_016()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_017.ttcn new file mode 100644 index 0000000..7ff09f7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_017.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that inout formal value parameters cannot have fuzzy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction j) +// Only in parameters can be declared lazy or fuzzy. + +module NegSem_05040101_parameters_of_kind_value_017 { + + type component GeneralComp { + } + + function f(inout @fuzzy integer p_int) { + p_int := 6; + } + testcase TC_NegSem_05040101_parameters_of_kind_value_017() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_018.ttcn new file mode 100644 index 0000000..f6b083f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSem_05040101_parameters_of_kind_value_018.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that incompatible value in default value assignment of value formal parameters causes error + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// The expression of the formal parameters' default value had to be compatible with the type of the parameter. + +module NegSem_05040101_parameters_of_kind_value_007 { + type component GeneralComp { + } + + function f(in integer p_int := 5.0) { + } + + testcase TC_NegSem_05040101_parameters_of_kind_value_007() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_value_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_001.ttcn new file mode 100644 index 0000000..6d29f7f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_001.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that const definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_001 { + + const integer c_int(integer p_int) := p_int + 2; +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_002.ttcn new file mode 100644 index 0000000..3db4e0e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_002.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that var definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_002 { + + function f() { + var integer c_int(integer p_int) := p_int + 2; + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_003.ttcn new file mode 100644 index 0000000..82e084f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_003.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that template variable definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_003 { + + function f() { + var template integer c_int(integer p_int) := p_int + 2; + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_004.ttcn new file mode 100644 index 0000000..6257612 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_004.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that timer definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_004 { + + function f() { + timer t_timer(float p_float) := p_float * 2; + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_005.ttcn new file mode 100644 index 0000000..cc2dbc5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_005.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that control definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_005 { + + control(integer p_int) { + log(p_int); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_006.ttcn new file mode 100644 index 0000000..86a24ba --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_006.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that record of definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_006 { + + type record of integer RoI (integer p_int); +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_007.ttcn new file mode 100644 index 0000000..faadb51 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_007.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that set of definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_007 { + + type set of integer SoI (integer p_int); +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_008.ttcn new file mode 100644 index 0000000..6b2c506 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_008.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that enumerated definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_008 { + + type enumerated EColour(integer p_int) { red, blue, green } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_009.ttcn new file mode 100644 index 0000000..c0bb653 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_009.ttcn @@ -0,0 +1,19 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that port definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_009 { + + type port P(integer p_int) message { + inout integer; + map param(integer p_par := p_int); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_010.ttcn new file mode 100644 index 0000000..51590bd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_010.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that component definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_010 { + + type component C (integer p_int) { + var integer v_int := p_int; + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_011.ttcn new file mode 100644 index 0000000..8777119 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_011.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that subtype definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_010 { + + type integer MyInt(integer p_int); +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_012.ttcn new file mode 100644 index 0000000..d72ff10 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_012.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that group definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_011 { + + group Group1 (integer p_int) { + const integer c_int := 2 * p_int; + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_013.ttcn new file mode 100644 index 0000000..903e807 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/NegSyn_05040101_parameters_of_kind_value_013.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that import definition cannot be parameterized + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Language elements which cannot be parameterized are: const, var, timer, control, record of, +// set of, enumerated, port, component and subtype definitions, group and import. + +module NegSyn_05040101_parameters_of_kind_value_013 { + + import from Sem_05040101_parameters_of_kind_value_001 (integer INTEGER_MODULE_PARAMETER) all; +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_001.ttcn new file mode 100644 index 0000000..38c614c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.2 + ** @purpose 1:5.4.1.1, Ensure that the IUT correctly handles parametrization through the use of module parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040101_parameters_of_kind_value_001 { + + // the following module parameters must not be set externally, as their default values are being checked + modulepar integer INTEGER_MODULE_PARAMETER := 1; + + + type component GeneralComp { + } + + + testcase TC_Sem_05040101_parameters_of_kind_value_001() runs on GeneralComp { + if ( (INTEGER_MODULE_PARAMETER == 1)) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_001()); + } + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_002.ttcn new file mode 100644 index 0000000..cd366e4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, Ensure that the IUT correctly handles parametrization through the use of module parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040101_parameters_of_kind_value_002 { + + // the following module parameters must not be set externally, as their default values are being checked + modulepar boolean BOOLEAN_MODULE_PARAMETER := true; + + + type component GeneralComp { + } + + + testcase TC_Sem_05040101_parameters_of_kind_value_002() runs on GeneralComp { + if ( BOOLEAN_MODULE_PARAMETER == true){ + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_002()); + } + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_003.ttcn new file mode 100644 index 0000000..ea1e390 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_003.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, Ensure that the IUT correctly handles parametrization through the use of module parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040101_parameters_of_kind_value_003 { + + // the following module parameters must not be set externally, as their default values are being checked + modulepar address ADDRESS_MODULE_PARAMETER := 5; + + type integer address; + + type component GeneralComp { + } + + + testcase TC_Sem_05040101_parameters_of_kind_value_003() runs on GeneralComp { + if ( ADDRESS_MODULE_PARAMETER == 5) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_003()); + } + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_004.ttcn new file mode 100644 index 0000000..f48e2d3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_004.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, Ensure that the IUT correctly handles parametrization through the use of module parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040101_parameters_of_kind_value_004 { + + // the following module parameter must not be set externally, as their default values are being checked + + modulepar MyEnumeratedType ENUMERATED_MODULE_PARAMETER := e_black; + + type enumerated MyEnumeratedType {e_black, e_white} + + type component GeneralComp { + } + + + testcase TC_Sem_05040101_parameters_of_kind_value_004() runs on GeneralComp { + if (ENUMERATED_MODULE_PARAMETER == e_black ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_004()); + } + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_005.ttcn new file mode 100644 index 0000000..a792458 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_005.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that template definition can contain in value formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports value parameterization according to the following rules: +// - the language elements template, testcase, altstep and function support dynamic value +// parameterization (i.e. this parameterization shall be resolved at runtime). Value formal +// parameters may be in, inout or out parameters. The default for value formal parameters is +// in parameterization which may optionally be denoted by the keyword in. Using of inout or out +// kind of parameterization shall be specified by the keywords inout or out respectively. + +module Sem_05040101_parameters_of_kind_value_005 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(integer p_int1, in integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040101_parameters_of_kind_value_005() runs on GeneralComp { + log(m_t(3,4)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_006.ttcn new file mode 100644 index 0000000..1059031 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_006.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that local template definition can contain in value formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports value parameterization according to the following rules: +// - the language elements template, testcase, altstep and function support dynamic value +// parameterization (i.e. this parameterization shall be resolved at runtime). Value formal +// parameters may be in, inout or out parameters. The default for value formal parameters is +// in parameterization which may optionally be denoted by the keyword in. Using of inout or out +// kind of parameterization shall be specified by the keywords inout or out respectively. + +module Sem_05040101_parameters_of_kind_value_006 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + testcase TC_Sem_05040101_parameters_of_kind_value_006() runs on GeneralComp { + template R m_t(integer p_int1, in integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3,4)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_007.ttcn new file mode 100644 index 0000000..de2a181 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_007.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that function definition can contain in, out and inout value formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports value parameterization according to the following rules: +// - the language elements template, testcase, altstep and function support dynamic value +// parameterization (i.e. this parameterization shall be resolved at runtime). Value formal +// parameters may be in, inout or out parameters. The default for value formal parameters is +// in parameterization which may optionally be denoted by the keyword in. Using of inout or out +// kind of parameterization shall be specified by the keywords inout or out respectively. + +module Sem_05040101_parameters_of_kind_value_007 { + + type component GeneralComp { + } + + function f(integer p_int1, in integer p_int2, out integer p_int3, inout integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_007() runs on GeneralComp { + var integer v_int1, v_int2 := 0; + f(1, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_008.ttcn new file mode 100644 index 0000000..b42775b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_008.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that altstep definition can contain in, out and inout value formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports value parameterization according to the following rules: +// - the language elements template, testcase, altstep and function support dynamic value +// parameterization (i.e. this parameterization shall be resolved at runtime). Value formal +// parameters may be in, inout or out parameters. The default for value formal parameters is +// in parameterization which may optionally be denoted by the keyword in. Using of inout or out +// kind of parameterization shall be specified by the keywords inout or out respectively. + +module Sem_05040101_parameters_of_kind_value_008 { + + type component GeneralComp { + } + + altstep a(integer p_int1, in integer p_int2, out integer p_int3, inout integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040101_parameters_of_kind_value_008() runs on GeneralComp { + var integer v_int1, v_int2 := 0; + a(1, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_008()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_009.ttcn new file mode 100644 index 0000000..47e8d90 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_009.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that test case definition can contain in, out and inout value formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports value parameterization according to the following rules: +// - the language elements template, testcase, altstep and function support dynamic value +// parameterization (i.e. this parameterization shall be resolved at runtime). Value formal +// parameters may be in, inout or out parameters. The default for value formal parameters is +// in parameterization which may optionally be denoted by the keyword in. Using of inout or out +// kind of parameterization shall be specified by the keywords inout or out respectively. + +module Sem_05040101_parameters_of_kind_value_009 { + + type component GeneralComp { + } + + testcase TC_Sem_05040101_parameters_of_kind_value_009(integer p_int1, in integer p_int2, out integer p_int3, inout integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var integer v_int1, v_int2 := 0; + execute(TC_Sem_05040101_parameters_of_kind_value_009(1, 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_010.ttcn new file mode 100644 index 0000000..9336346 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_010.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that value formal parameters can be used in expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Value formal parameters can be used within the parameterized object the same way as values, +// for example in expressions. + +module Sem_05040101_parameters_of_kind_value_010 { + + type component GeneralComp { + } + + function f(integer p_int1, in integer p_int2){ + if (p_int1 + p_int2 == 5) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_05040101_parameters_of_kind_value_010() runs on GeneralComp { + f(2, 3); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_010()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_011.ttcn new file mode 100644 index 0000000..63fc16f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_011.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of template can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default value, which is given by an expression assigned to +// the parameter. + +module Sem_05040101_parameters_of_kind_value_011 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(integer p_int1 := 3, in integer p_int2 := 4) := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_012.ttcn new file mode 100644 index 0000000..9edcad3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_012.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of local template can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default value, which is given by an expression assigned to +// the parameter. + +module Sem_05040101_parameters_of_kind_value_012 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f() { + template R m_t(integer p_int1 := 3, in integer p_int2 := 4) := { + field1 := p_int1, + field2 := p_int2 + } + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_013.ttcn new file mode 100644 index 0000000..2a128c6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_013.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of function can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default value, which is given by an expression assigned to +// the parameter. + +module Sem_05040101_parameters_of_kind_value_013 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(integer p_int1 := 3, in integer p_int2 := 4) { + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_014.ttcn new file mode 100644 index 0000000..aaf6393 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_014.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of altstep can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default value, which is given by an expression assigned to +// the parameter. + +module Sem_05040101_parameters_of_kind_value_014 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + altstep a(integer p_int1 := 3, in integer p_int2 := 4) { + [] any timer.timeout {} + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_015.ttcn new file mode 100644 index 0000000..a347028 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_015.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of test case can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default value, which is given by an expression assigned to +// the parameter. + +module Sem_05040101_parameters_of_kind_value_015 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + testcase TC(integer p_int1 := 3, in integer p_int2 := 4) runs on GeneralComp { + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_016.ttcn new file mode 100644 index 0000000..b551fb1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_016.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that in value formal parameters of modified template can used dash as default value + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Formal parameters of modified templates may inherit the default values from the corresponding +// parameters of their parent templates; this shall explicitly be denoted by using a dash (don't +// change) symbol at the place of the modified template parameters' default value. + +module Sem_05040101_parameters_of_kind_value_016 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(integer p_int1 := 3, in integer p_int2 := 4) := { + field1 := p_int1, + field2 := p_int2 + } + + template R m_tmod(integer p_int1 := 10, in integer p_int2 := -) modifies m_t := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_017.ttcn new file mode 100644 index 0000000..5c3d2d0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_017.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that null is suitable default value of formal value parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Default values of component type formal parameters shall be one of the special values null, +// mtc, self, or system. + +module Sem_05040101_parameters_of_kind_value_017 { + + type component GeneralComp { + } + + function f(GeneralComp p_comp := null) { + log(p_comp); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_017() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_018.ttcn new file mode 100644 index 0000000..a2579b7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_018.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that self is suitable default value of formal value parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Default values of component type formal parameters shall be one of the special values null, +// mtc, self, or system. + +module Sem_05040101_parameters_of_kind_value_018 { + + type component GeneralComp { + } + + function f(GeneralComp p_comp := self) { + log(p_comp); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_018() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_018()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_019.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_019.ttcn new file mode 100644 index 0000000..491e71e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_019.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that mtc is suitable default value of formal value parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Default values of component type formal parameters shall be one of the special values null, +// mtc, self, or system. + +module Sem_05040101_parameters_of_kind_value_019 { + + type component GeneralComp { + } + + function f(GeneralComp p_comp := mtc) { + log(p_comp); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_019() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_019()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_020.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_020.ttcn new file mode 100644 index 0000000..cd34505 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_020.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that system is suitable default value of formal value parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction f) +// Default values of component type formal parameters shall be one of the special values null, +// mtc, self, or system. + +module Sem_05040101_parameters_of_kind_value_020 { + + type component GeneralComp { + } + + function f(GeneralComp p_comp := system) { + log(p_comp); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_020() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_020()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_021.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_021.ttcn new file mode 100644 index 0000000..006a8cb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_021.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that null can be used as default value of formal value parameters of default type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction g) +// Default values of default type formal parameters shall be the special value null. + +module Sem_05040101_parameters_of_kind_value_021 { + + type component GeneralComp { + } + + function f(default p_def := null) { + log(p_def); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_021() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_021()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_022.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_022.ttcn new file mode 100644 index 0000000..61a7f9f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_022.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that passing by value and by reference works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// No specific requirement, just (slightly modified) example 6 + +module Sem_05040101_parameters_of_kind_value_022 { + + type component GeneralComp { + } + + function f_byValue (in integer p_int1, in integer p_int2) { + p_int2 := p_int2 + 1; + log(p_int1); + log(p_int2); + } + + function f_byReference (inout integer p_int1, inout integer p_int2) { + p_int2 := p_int2 + 1; + log(p_int1); + log(p_int2); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_022() runs on GeneralComp { + var integer v_int := 1; + f_byValue(v_int, v_int); // prints 1 and 2 + log(v_int); // prints 1 + if (v_int == 1) { setverdict(pass); } + else { setverdict(fail); } + f_byReference(v_int, v_int); // prints 2 and 2 + log(v_int); // prints 2 + if (v_int == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_022()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_023.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_023.ttcn new file mode 100644 index 0000000..794d5e6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_023.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.2 + ** @purpose 1:5.4.1.1, verify that the default value of value formal parameters can reference component variables + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Background: +// Prior to the version TTCN-3:2017, the restriction 5.4.1.1.e didn't allow to refer to elements of the component type +// of the optional runs on clause in the default value expression. + +module Sem_05040101_parameters_of_kind_value_023 { + type component GeneralComp { + var integer vc_int := 0; + } + + function f(in integer p_int := vc_int) runs on GeneralComp { + } + + testcase TC_Sem_05040101_parameters_of_kind_value_023() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_023()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_024.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_024.ttcn new file mode 100644 index 0000000..ca29c4c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_024.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.2 + ** @purpose 1:5.4.1.1, verify that default value of value formal parameters can invoke functions with runs on clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Background: +// Prior to the version TTCN-3:2017, the expression could not contain the invocation of functions with a runs on clause. + +module Sem_05040101_parameters_of_kind_value_024 { + type component GeneralComp { + var integer vc_int := 1; + } + + function fx() runs on GeneralComp return integer { + return vc_int + 1; + } + + function f(in integer p_int := fx()) runs on GeneralComp { + log(p_int); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_024() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_024()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_025.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_025.ttcn new file mode 100644 index 0000000..91634d9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040101_parameters_of_kind_value/Sem_05040101_parameters_of_kind_value_025.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:5.4.1.1, verify that default values are evaluated in the scope of the parameterized entity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction e +// The [default value] expression may be any expression that is well-defined at the beginning of the scope +// of the parameterized entity + +module Sem_05040101_parameters_of_kind_value_025 { + type component GeneralComp { + var integer vc_int := 1; + } + + function f(in integer p_int := vc_int) runs on GeneralComp { + log(p_int); + if (p_int == vc_int) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_05040101_parameters_of_kind_value_025() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + vc_int := 100; + v_ptc.start(f()); // p_int defaults to 1 (vc_int of v_ptc) and not to 100 (vc_int of self) + v_ptc.done; + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_025()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_001.ttcn new file mode 100644 index 0000000..c599972 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of template cannot used dash as default value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters of modified templates may inherit their default templates from the +// corresponding parameters of their parent templates; this shall explicitly be denoted by using +// a dash (don't change) symbol at the place of the modified template parameter's default template. + +module NegSem_05040102_parameters_of_kind_template_001 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R mw_t(template integer p_int1 := ?, in template integer p_int2 := -) := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_002.ttcn new file mode 100644 index 0000000..fd01dee --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_002.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that modified template cannot used dash as default value when original template parameter had no default value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters of modified templates may inherit their default templates from the +// corresponding parameters of their parent templates; this shall explicitly be denoted by using +// a dash (don't change) symbol at the place of the modified template parameter's default template. + +module NegSem_05040102_parameters_of_kind_template_002 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R m_t(template integer p_int1, in template integer p_int2 := 4) := { + field1 := p_int1, + field2 := p_int2 + } + + template R m_tmod(template integer p_int1 := -, in template integer p_int2 := ?) modifies m_t := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_003.ttcn new file mode 100644 index 0000000..994e997 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definitions cannot contain out template formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// Formal template parameters of templates ... shall always be in parameters. + +module NegSem_05040101_parameters_of_kind_template_003 { + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(out template integer p_int) return template integer { + p_int := ?; + return p_int; + } + + template R m_t(out template integer p_int) := { + field1 := 0, + field2 := f(p_int) + } + + testcase TC_NegSem_05040101_parameters_of_kind_template_003() runs on GeneralComp { + var template integer v_int; + log(m_t(v_int)); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040101_parameters_of_kind_template_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_004.ttcn new file mode 100644 index 0000000..53c9a17 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definitions cannot contain inout template formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// Formal value parameters of templates ... shall always be in parameters. + +module NegSem_05040102_parameters_of_kind_template_004 { + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(inout template integer p_int) return template integer { + p_int := ?; + return p_int; + } + + template R m_t(inout template integer p_int) := { + field1 := 0, + field2 := f(p_int) + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_004() runs on GeneralComp { + var template integer v_int := 1; + log(m_t(v_int)); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_004()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_005.ttcn new file mode 100644 index 0000000..3fb14f6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_005.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that out template formal parameters cannot have default values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction c) +// Default templates can be provided for in parameters only. + +module NegSem_05040102_parameters_of_kind_template_005 { + type component GeneralComp { + } + + function f(out template integer p_int := ?) { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_005() runs on GeneralComp { + var template integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_006.ttcn new file mode 100644 index 0000000..8f847e8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_006.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that inout template formal parameters cannot have default values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction c) +// Default templates can be provided for in parameters only. + +module NegSem_05040102_parameters_of_kind_template_006 { + type component GeneralComp { + } + + function f(inout template integer p_int := ?) { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_006() runs on GeneralComp { + var template integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_007.ttcn new file mode 100644 index 0000000..138b9b9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_007.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that incompatible template instance in default template assignment of template formal parameters causes error + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction d) +// The default template instance has to be compatible with the type of the parameter. + +module NegSem_05040102_parameters_of_kind_template_007 { + type component GeneralComp { + } + + function f(in template integer p_int := (-infinity..5.0)) { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_007() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_009.ttcn new file mode 100644 index 0000000..1af9b60 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_009.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that default template instance of template formal parameters cannot reference other parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// The template instance shall not refer to other parameters in the same parameter list. + +module NegSem_05040102_parameters_of_kind_template_009 { + type component GeneralComp { + } + + function f(in template integer p_int, in template integer p_int2 := p_int) runs on GeneralComp { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_009() runs on GeneralComp { + f(?); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_009()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_011.ttcn new file mode 100644 index 0000000..a80b587 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_011.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that error is generated if formal template parameter of function contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction g) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040102_parameters_of_kind_template_011 { + + type component GeneralComp { + } + + function f (template integer p_int := -) { + log(p_int); + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_011() runs on GeneralComp { + f(1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_011()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_012.ttcn new file mode 100644 index 0000000..a03c2f7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_012.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that error is generated if formal template parameter of altstep contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction g) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040102_parameters_of_kind_template_012 { + + type component GeneralComp { + } + + altstep a(template integer p_int := -) { + []any timer.timeout {} + [else] {} + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_012() runs on GeneralComp { + a(1); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_012()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_013.ttcn new file mode 100644 index 0000000..dbd506d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_013.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that error is generated if formal template parameter of test case contains dash + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction g) +// The dash (don't change) symbol shall be used with formal parameters of modified templates only + +module NegSem_05040102_parameters_of_kind_template_013 { + + type component GeneralComp { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_013(omit integer p_int := -) runs on GeneralComp { + log(p_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_013(1)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_014.ttcn new file mode 100644 index 0000000..5852db0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_014.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that out formal template parameters cannot have lazy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// Only in template parameters can be declared lazy or fuzzy. + +module NegSem_05040102_parameters_of_kind_template_014 { + + type component GeneralComp { + } + + function f(out template @lazy integer p_int) { + p_int := ?; + } + testcase TC_NegSem_05040102_parameters_of_kind_template_014() runs on GeneralComp { + var template integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_014()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn new file mode 100644 index 0000000..9f8f59b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_015.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that out formal template parameters cannot have fuzzy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// Only in template parameters can be declared lazy or fuzzy. + +module NegSem_05040102_parameters_of_kind_template_015 { + + type component GeneralComp { + } + + function f(out template @fuzzy integer p_int) { + p_int := ?; + } + testcase TC_NegSem_05040102_parameters_of_kind_template_015() runs on GeneralComp { + var template integer v_int; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_015()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn new file mode 100644 index 0000000..841aba7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_016.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that inout formal template parameters cannot have lazy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// Only in template parameters can be declared lazy or fuzzy. + +module NegSem_05040102_parameters_of_kind_template_016 { + + type component GeneralComp { + } + + function f(inout template @lazy integer p_int) { + p_int := ?; + } + testcase TC_NegSem_05040102_parameters_of_kind_template_016() runs on GeneralComp { + var template integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_016()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn new file mode 100644 index 0000000..bb35b5a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_017.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that inout formal template parameters cannot have fuzzy modifier + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction h) +// Only in template parameters can be declared lazy or fuzzy. + +module NegSem_05040102_parameters_of_kind_template_017 { + + type component GeneralComp { + } + + function f(inout template @fuzzy integer p_int) { + p_int := ?; + } + testcase TC_NegSem_05040102_parameters_of_kind_template_017() runs on GeneralComp { + var template integer v_int := 0; + f(v_int); + log(v_int); + setverdict(pass); + } + + control{ + execute(TC_NegSem_05040102_parameters_of_kind_template_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_018.ttcn b/core_language/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 0000000..d64aecd --- /dev/null +++ b/core_language/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,28 @@ +/***************************************************************** + ** @author STF 521 + ** @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 { + + altstep a_test(out template integer p_par) runs on C { + [] any timer.timeout { + p_par := ?; + } + } + + type component C { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_018() { + var integer v_int := ?; + activate(a_test(v_int)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040102_parameters_of_kind_template_018()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSem_05040102_parameters_of_kind_template_019.ttcn b/core_language/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 0000000..f0d3513 --- /dev/null +++ b/core_language/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,28 @@ +/***************************************************************** + ** @author STF 521 + ** @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_018 { + + altstep a_test(inout template integer p_par) runs on C { + [] any timer.timeout { + p_par := ?; + } + } + + type component C { + } + + testcase TC_NegSem_05040102_parameters_of_kind_template_018() { + var integer v_int := ?; + activate(a_test(v_int)); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040102_parameters_of_kind_template_018()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn new file mode 100644 index 0000000..4dfe153 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/NegSyn_05040102_parameters_of_kind_template_001.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that module parameter of template kind is not allowed + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction a) +// Only function, testcase, altstep and template definitions may have formal template parameters. + +module NegSyn_05040102_parameters_of_kind_template_001 { + modulepar template integer PX_TEMPLATE_PAR; +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn new file mode 100644 index 0000000..e37518c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_001.ttcn @@ -0,0 +1,86 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, Ensure that the IUT correctly handles parametrization through the use of parameterized templates. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040102_parameters_of_kind_template_001 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + +template MyRecord m_parametrizedTemplate + ( + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) := { + field1 := p_integer, + field2 := p_boolean, + field3 := p_address, + field4 := p_enumerated, + field5 := p_integerTemplate +} + + + +type component GeneralComp { + +} + + +testcase TC_Sem_05040102_parameters_of_kind_template_001() runs on GeneralComp { + + var MyRecord DefaultValues := { + field1 := 0, + field2 := true, + field3 := null, + field4 := e_black, + field5 := 1 //any number can be used here to correspond with ? matching + } + + var MyRecord ModifiedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + var MyRecord PartlyModifiedValues := { + field1 := 0, + field2 := false, + field3 := null, + field4 := e_white, + field5 := 1 + } + + if ( + match(DefaultValues, m_parametrizedTemplate) and + match(ModifiedValues, m_parametrizedTemplate(1,false,1,e_white,1)) and + match(PartlyModifiedValues, m_parametrizedTemplate(-,false,-,e_white,-)) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + execute(TC_Sem_05040102_parameters_of_kind_template_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn new file mode 100644 index 0000000..b91a07c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_002.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, Ensure that the IUT correctly handles parametrization through the use of parameterized templates. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040102_parameters_of_kind_template_002 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + + +type component GeneralComp { + +} + + +testcase TC_Sem_05040102_parameters_of_kind_template_002 ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + var template MyRecord ReceivedRecord := {p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate}; + + if (match(ExpectedMatch, ReceivedRecord)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + var MyRecord DefaultValues := { + field1 := 0, + field2 := true, + field3 := null, + field4 := e_black, + field5 := 1 //any number can be used here to correspond with ? matching + } + + var MyRecord ModifiedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + var MyRecord PartlyModifiedValues := { + field1 := 0, + field2 := false, + field3 := null, + field4 := e_white, + field5 := 1 + } + + execute(TC_Sem_05040102_parameters_of_kind_template_002(DefaultValues)); + execute(TC_Sem_05040102_parameters_of_kind_template_002(DefaultValues,-,-,-,-,-)); + execute(TC_Sem_05040102_parameters_of_kind_template_002(ModifiedValues,1,false,1,e_white,1)); + execute(TC_Sem_05040102_parameters_of_kind_template_002(PartlyModifiedValues,-,false,-,e_white,-)); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_003.ttcn new file mode 100644 index 0000000..795aeaa --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_003.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definition can contain in template formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Templates parameters can be defined for templates, functions, altsteps, and test cases. +// To enable a parameterized object to accept templates or matching symbols as actual parameters, +// the extra keyword template shall be added before the type field of the corresponding formal +// parameter. This makes the parameter a template parameter and in effect extends the allowed actual +// parameters for the associated type to include the appropriate set of matching attributes (see +// annex B) as well as the normal set of values. +// Formal template parameters may be in, inout or out parameters. The default for formal template +// parameters is in parameterization. + +module Sem_05040102_parameters_of_kind_template_003 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R mw_t(template integer p_int1, in template integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_003() runs on GeneralComp { + log(mw_t(3, ?)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_004.ttcn new file mode 100644 index 0000000..369cfbb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that local template definition can contain in template formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Templates parameters can be defined for templates, functions, altsteps, and test cases. +// To enable a parameterized object to accept templates or matching symbols as actual parameters, +// the extra keyword template shall be added before the type field of the corresponding formal +// parameter. This makes the parameter a template parameter and in effect extends the allowed actual +// parameters for the associated type to include the appropriate set of matching attributes (see +// annex B) as well as the normal set of values. +// Formal template parameters may be in, inout or out parameters. The default for formal template +// parameters is in parameterization. + +module Sem_05040102_parameters_of_kind_template_004 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_004() runs on GeneralComp { + template R m_t(template integer p_int1, in template integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3, ?)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_004()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_005.ttcn new file mode 100644 index 0000000..cfc97db --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_005.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Templates parameters can be defined for templates, functions, altsteps, and test cases. +// To enable a parameterized object to accept templates or matching symbols as actual parameters, +// the extra keyword template shall be added before the type field of the corresponding formal +// parameter. This makes the parameter a template parameter and in effect extends the allowed actual +// parameters for the associated type to include the appropriate set of matching attributes (see +// annex B) as well as the normal set of values. +// Formal template parameters may be in, inout or out parameters. The default for formal template +// parameters is in parameterization. + +module Sem_05040102_parameters_of_kind_template_005 { + + type component GeneralComp { + } + + function f(template integer p_int1, in template integer p_int2, out template integer p_int3, inout template integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_005() runs on GeneralComp { + var template integer v_int1, v_int2 := ?; + f((1..3), 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_006.ttcn new file mode 100644 index 0000000..5e61980 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_006.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that altstep definition can contain in, out and inout template formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Templates parameters can be defined for templates, functions, altsteps, and test cases. +// To enable a parameterized object to accept templates or matching symbols as actual parameters, +// the extra keyword template shall be added before the type field of the corresponding formal +// parameter. This makes the parameter a template parameter and in effect extends the allowed actual +// parameters for the associated type to include the appropriate set of matching attributes (see +// annex B) as well as the normal set of values. +// Formal template parameters may be in, inout or out parameters. The default for formal template +// parameters is in parameterization. + +module Sem_05040102_parameters_of_kind_template_006 { + + type component GeneralComp { + } + + altstep a(template integer p_int1, in template integer p_int2, out template integer p_int3, inout template integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_006() runs on GeneralComp { + var template integer v_int1, v_int2 := ?; + a((1..3), 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_007.ttcn new file mode 100644 index 0000000..179df7a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_007.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that test case definition can contain in, out and inout template formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Templates parameters can be defined for templates, functions, altsteps, and test cases. +// To enable a parameterized object to accept templates or matching symbols as actual parameters, +// the extra keyword template shall be added before the type field of the corresponding formal +// parameter. This makes the parameter a template parameter and in effect extends the allowed actual +// parameters for the associated type to include the appropriate set of matching attributes (see +// annex B) as well as the normal set of values. +// Formal template parameters may be in, inout or out parameters. The default for formal template +// parameters is in parameterization. + +module Sem_05040102_parameters_of_kind_template_007 { + + type component GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_007( + template integer p_int1, in template integer p_int2, out template integer p_int3, inout template integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var template integer v_int1, v_int2 := ?; + execute(TC_Sem_05040102_parameters_of_kind_template_007((1..3), 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_008.ttcn new file mode 100644 index 0000000..cf80a5b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_008.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template formal parameters can be used in the same way as templates or template variables + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be used within the parameterized object the same way as +// templates and template variables. + +module Sem_05040102_parameters_of_kind_template_008 { + + type component GeneralComp { + } + + function f(template integer p_int1, in template integer p_int2) { + p_int1 := ?; // modification + if (match(1, p_int2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_008() runs on GeneralComp { + f(*, (0..5)); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_008()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_009.ttcn new file mode 100644 index 0000000..0c6345e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_009.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of template can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default template, which is given by a template instance +// assigned to the parameter. + +module Sem_05040102_parameters_of_kind_template_009 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R mw_t(template integer p_int1 := ?, in template integer p_int2 := (0..5)) := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_010.ttcn new file mode 100644 index 0000000..e35ebfb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_010.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of local template can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default template, which is given by a template instance +// assigned to the parameter. + +module Sem_05040102_parameters_of_kind_template_010 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f() { + template R m_t(template integer p_int1 := ?, in template integer p_int2 := (0..5)) := { + field1 := p_int1, + field2 := p_int2 + } + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_011.ttcn new file mode 100644 index 0000000..5b0f3b2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_011.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of function can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default template, which is given by a template instance +// assigned to the parameter. + +module Sem_05040102_parameters_of_kind_template_011 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + function f(template integer p_int1 := ?, in template integer p_int2 := (0..5)) { + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_012.ttcn new file mode 100644 index 0000000..0e21dc9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_012.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of altstep can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default template, which is given by a template instance +// assigned to the parameter. + +module Sem_05040102_parameters_of_kind_template_012 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + altstep a(template integer p_int1 := ?, in template integer p_int2 := (0..5)) { + [] any timer.timeout {} + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_013.ttcn new file mode 100644 index 0000000..f690279 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_013.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of test case can have default values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// In parameters may have a default template, which is given by a template instance +// assigned to the parameter. + +module Sem_05040102_parameters_of_kind_template_013 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + testcase TC(template integer p_int1 := ?, in template integer p_int2 := (0..5)) runs on GeneralComp { + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_014.ttcn new file mode 100644 index 0000000..bc24489 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_014.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that in template formal parameters of modified template can used dash as default value + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters of modified templates may inherit their default templates from the +// corresponding parameters of their parent templates; this shall explicitly be denoted by using +// a dash (don't change) symbol at the place of the modified template parameter's default template. + +module Sem_05040102_parameters_of_kind_template_014 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 + } + + template R mw_t(template integer p_int1 := ?, in template integer p_int2 := (0..5)) := { + field1 := p_int1, + field2 := p_int2 + } + + template R mw_tmod(template integer p_int1 := 10, in template integer p_int2 := -) modifies mw_t := { + field1 := p_int1, + field2 := p_int2 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_015.ttcn new file mode 100644 index 0000000..8958a43 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_015.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definition can contain in template formal parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_015 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + template R mw_t(template(omit) integer p_int1, in template(omit) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_015() runs on GeneralComp { + log(mw_t(3, omit)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_015()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_016.ttcn new file mode 100644 index 0000000..64eb761 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_016.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that local template definition can contain in template formal parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_016 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + testcase TC_Sem_05040102_parameters_of_kind_template_016() runs on GeneralComp { + template R m_t(template(omit) integer p_int1, in template(omit) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3, omit)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_016()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_017.ttcn new file mode 100644 index 0000000..512fb3f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_017.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_017 { + + type component GeneralComp { + } + + function f(template(omit) integer p_int1, in template(omit) integer p_int2, + out template(omit) integer p_int3, inout template(omit) integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_017() runs on GeneralComp { + var template(omit) integer v_int1, v_int2 := 20; + f(omit, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_018.ttcn new file mode 100644 index 0000000..77b6609 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_018.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that altstep definition can contain in, out and inout template formal parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_018 { + + type component GeneralComp { + } + + altstep a(template(omit) integer p_int1, in template(omit) integer p_int2, + out template(omit) integer p_int3, inout template(omit) integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_018() runs on GeneralComp { + var template(omit) integer v_int1, v_int2 := omit; + a(0, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_018()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_019.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_019.ttcn new file mode 100644 index 0000000..b09c350 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_019.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that test case definition can contain in, out and inout template formal parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_019 { + + type component GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_019( + template(omit) integer p_int1, in template(omit) integer p_int2, + out template(omit) integer p_int3, inout template(omit) integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var template(omit) integer v_int1, v_int2 := 20; + execute(TC_Sem_05040102_parameters_of_kind_template_019(omit, 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_020.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_020.ttcn new file mode 100644 index 0000000..f3d7613 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_020.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definition can contain in template formal parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_020 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + template R mw_t(template(present) integer p_int1, in template(present) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_020() runs on GeneralComp { + log(mw_t(3, (0..5))); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_020()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_021.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_021.ttcn new file mode 100644 index 0000000..61aa450 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_021.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that local template definition can contain in template formal parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_021 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + testcase TC_Sem_05040102_parameters_of_kind_template_021() runs on GeneralComp { + template R m_t(template(present) integer p_int1, in template(present) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3, (0..5))); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_021()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_022.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_022.ttcn new file mode 100644 index 0000000..958d0f7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_022.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_022 { + + type component GeneralComp { + } + + function f(template(present) integer p_int1, in template(present) integer p_int2, + out template(present) integer p_int3, inout template(present) integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_022() runs on GeneralComp { + var template(present) integer v_int1, v_int2 := 20; + f((0..5), 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_022()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_023.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_023.ttcn new file mode 100644 index 0000000..0a4fdce --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_023.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that altstep definition can contain in, out and inout template formal parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_023 { + + type component GeneralComp { + } + + altstep a(template(present) integer p_int1, in template(present) integer p_int2, + out template(present) integer p_int3, inout template(present) integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_023() runs on GeneralComp { + var template(present) integer v_int1, v_int2 := (0..5); + a(0, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_023()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_024.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_024.ttcn new file mode 100644 index 0000000..617cdee --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_024.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that test case definition can contain in, out and inout template formal parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_024 { + + type component GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_024( + template(present) integer p_int1, in template(present) integer p_int2, + out template(present) integer p_int3, inout template(present) integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var template(present) integer v_int1, v_int2 := 20; + execute(TC_Sem_05040102_parameters_of_kind_template_024((0..5), 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_025.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_025.ttcn new file mode 100644 index 0000000..950a6a3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_025.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definition can contain in template formal parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_025 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + template R mw_t(template(value) integer p_int1, in template(value) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_025() runs on GeneralComp { + log(mw_t(3, 4)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_025()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_026.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_026.ttcn new file mode 100644 index 0000000..2dc4cc0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_026.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that local template definition can contain in template formal parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_026 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + testcase TC_Sem_05040102_parameters_of_kind_template_026() runs on GeneralComp { + template R m_t(template(value) integer p_int1, in template(value) integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3, 4)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_026()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_027.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_027.ttcn new file mode 100644 index 0000000..e91c711 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_027.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_027 { + + type component GeneralComp { + } + + function f(template(value) integer p_int1, in template(value) integer p_int2, + out template(value) integer p_int3, inout template(value) integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_027() runs on GeneralComp { + var template(value) integer v_int1, v_int2 := 20; + f(0, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_027()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_028.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_028.ttcn new file mode 100644 index 0000000..660d849 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_028.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that altstep definition can contain in, out and inout template formal parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_028 { + + type component GeneralComp { + } + + altstep a(template(value) integer p_int1, in template(value) integer p_int2, + out template(value) integer p_int3, inout template(value) integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_028() runs on GeneralComp { + var template(value) integer v_int1, v_int2 := 20; + a(0, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_028()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_029.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_029.ttcn new file mode 100644 index 0000000..5674fdb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_029.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that test case definition can contain in, out and inout template formal parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. + +module Sem_05040102_parameters_of_kind_template_029 { + + type component GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_029( + template(value) integer p_int1, in template(value) integer p_int2, + out template(value) integer p_int3, inout template(value) integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var template(value) integer v_int1, v_int2 := 20; + execute(TC_Sem_05040102_parameters_of_kind_template_029(0, 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_030.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_030.ttcn new file mode 100644 index 0000000..ac0c431 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_030.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that template definition can contain in template formal parameters with short omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. The restriction template (omit) can be replaced by the shorthand notation omit. + +module Sem_05040102_parameters_of_kind_template_030 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + template R mw_t(omit integer p_int1, in omit integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + + testcase TC_Sem_05040102_parameters_of_kind_template_030() runs on GeneralComp { + log(mw_t(3, omit)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_030()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_031.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_031.ttcn new file mode 100644 index 0000000..8e97f60 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_031.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that local template definition can contain in template formal parameters with short omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. The restriction template (omit) can be replaced by the shorthand notation omit. + +module Sem_05040102_parameters_of_kind_template_031 { + + type component GeneralComp { + } + + type record R + { + integer field1, + integer field2 optional + } + + testcase TC_Sem_05040102_parameters_of_kind_template_031() runs on GeneralComp { + template R m_t(omit integer p_int1, in omit integer p_int2) := { + field1 := p_int1, + field2 := p_int2 + } + log(m_t(3, omit)); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_031()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_032.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_032.ttcn new file mode 100644 index 0000000..55667b4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_032.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that function definition can contain in, out and inout template formal parameters with short omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. The restriction template (omit) can be replaced by the shorthand notation omit. + +module Sem_05040102_parameters_of_kind_template_032 { + + type component GeneralComp { + } + + function f(omit integer p_int1, in omit integer p_int2, + out omit integer p_int3, inout omit integer p_int4){ + setverdict(pass); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_032() runs on GeneralComp { + var omit integer v_int1, v_int2 := 20; + f(omit, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_032()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_033.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_033.ttcn new file mode 100644 index 0000000..6d65f81 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_033.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that altstep definition can contain in, out and inout template formal parameters with short omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. The restriction template (omit) can be replaced by the shorthand notation omit. + +module Sem_05040102_parameters_of_kind_template_033 { + + type component GeneralComp { + } + + altstep a(omit integer p_int1, in omit integer p_int2, + out omit integer p_int3, inout omit integer p_int4) { + [] any timer.timeout { setverdict(fail); } + [else] { setverdict(pass); } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_033() runs on GeneralComp { + var omit integer v_int1, v_int2 := omit; + a(0, 2, v_int1, v_int2); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_033()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_034.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_034.ttcn new file mode 100644 index 0000000..84f8aca --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_034.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that test case definition can contain in, out and inout template formal parameters with short omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal template parameters can be restricted to accept actual parameters containing a restricted +// set of matching mechanisms only. Such limitations can be expressed by the restrictions omit, +// present, and value. The restriction template (omit) can be replaced by the shorthand notation omit. + +module Sem_05040102_parameters_of_kind_template_034 { + + type component GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_034( + omit integer p_int1, in omit integer p_int2, + out omit integer p_int3, inout omit integer p_int4) runs on GeneralComp { + setverdict(pass); + } + + control { + var omit integer v_int1, v_int2 := 20; + execute(TC_Sem_05040102_parameters_of_kind_template_034(omit, 2, v_int1, v_int2)); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_035.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_035.ttcn new file mode 100644 index 0000000..c20d551 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_035.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that null is suitable default value of formal template parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// Default templates of component type formal parameters shall be built from the special values +// null, mtc, self, or system. + +module Sem_05040102_parameters_of_kind_template_035 { + + type component GeneralComp { + } + + function f(template GeneralComp p_comp := null) { + log(p_comp); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_035() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_035()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn new file mode 100644 index 0000000..660f805 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_036.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that self is suitable default value of formal template parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// Default templates of component type formal parameters shall be built from the special values +// null, mtc, self, or system. + +module Sem_05040102_parameters_of_kind_template_036 { + + type component GeneralComp { + } + + function f(template GeneralComp p_comp := self) { + log(p_comp); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_036() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_036()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn new file mode 100644 index 0000000..a9ce607 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_037.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that mtc is suitable default value of formal template parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// Default templates of component type formal parameters shall be built from the special values +// null, mtc, self, or system. + +module Sem_05040102_parameters_of_kind_template_037 { + + type component GeneralComp { + } + + function f(template GeneralComp p_comp := mtc) { + log(p_comp); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_037() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_037()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn new file mode 100644 index 0000000..0b8230b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_038.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that system is suitable default value of formal template parameters of component type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Restriction e) +// Default templates of component type formal parameters shall be built from the special values +// null, mtc, self, or system. + +module Sem_05040102_parameters_of_kind_template_038 { + + type component GeneralComp { + } + + function f(template GeneralComp p_comp := system) { + log(p_comp); + } + + testcase TC_Sem_05040102_parameters_of_kind_template_038() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_038()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_039.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_039.ttcn new file mode 100644 index 0000000..a54faeb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_039.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.2 + ** @purpose 1:5.4.1.2, verify that default template instance of template formal parameters can reference component elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Background: +// Prior to the version TTCN-3:2017, the template instance could not refer to elements of the component type referenced in the runs on clause. + +module Sem_05040102_parameters_of_kind_template_039 { + type component GeneralComp { + var template integer vc_int := ?; + } + + function f(in template integer p_int := vc_int) runs on GeneralComp { + } + + testcase TC_Sem_05040102_parameters_of_kind_template_039() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_039()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_040.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_040.ttcn new file mode 100644 index 0000000..8edac9e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_040.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.2 + ** @purpose 1:5.4.1.2, verify that default template instance of template formal parameters can invoke functions with runs on clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Background: +// Prior to the version TTCN-3:2017, the template instance could not contain invocation of functions with a runs on clause. + +module Sem_05040101_parameters_of_kind_value_040 { + type component GeneralComp { + var integer vc_int := 1; + } + + function fx() runs on GeneralComp return template integer { + return (vc_int..100); + } + + function f(in template integer p_int := fx()) runs on GeneralComp { + log(p_int); + } + + testcase TC_Sem_05040101_parameters_of_kind_value_040() runs on GeneralComp { + f(); + setverdict(pass); + } + + control{ + execute(TC_Sem_05040101_parameters_of_kind_value_040()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_041.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_041.ttcn new file mode 100644 index 0000000..416422f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040102_parameters_of_kind_template/Sem_05040102_parameters_of_kind_template_041.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:5.4.1.2, verify that default template instance of template formal parameters is resolved in the scope of the parameterized entity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If a default template is used, it is evaluated in the scope of the parameterized entity, not the scope of the actual parameter list. + +module Sem_05040102_parameters_of_kind_template_041 { + type component GeneralComp { + var template integer vc_int := ?; + } + + function f(in template integer p_int := vc_int) runs on GeneralComp { + if (match(10, p_int)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_05040102_parameters_of_kind_template_041() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + vc_int := (1, 2, 3); + v_ptc.start(f()); // p_int default to ? (vc_int of v_ptc) and not to (1, 2, 3) (vc_int of self) + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_05040102_parameters_of_kind_template_041()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_001.ttcn b/core_language/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 0000000..0ca52b8 --- /dev/null +++ b/core_language/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,33 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_002.ttcn b/core_language/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 0000000..f2817cb --- /dev/null +++ b/core_language/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,34 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_003.ttcn b/core_language/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 0000000..e29e837 --- /dev/null +++ b/core_language/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,27 @@ +/***************************************************************** + ** @author STF 521 + ** @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)); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSem_05040103_parameters_of_kind_timer_004.ttcn b/core_language/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 0000000..ebef3c8 --- /dev/null +++ b/core_language/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,29 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_001.ttcn b/core_language/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 0000000..2c353e3 --- /dev/null +++ b/core_language/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,30 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/NegSyn_05040103_parameters_of_kind_timer_002.ttcn b/core_language/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 0000000..64b297d --- /dev/null +++ b/core_language/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,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + + } + +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn new file mode 100644 index 0000000..3830cf0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_001.ttcn @@ -0,0 +1,98 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.1.3, Ensure that the IUT correctly handles parametrization through the use of timer parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_05040103_parameters_of_kind_timer_001 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + +type port TestPort message { + inout MyRecord +} + +type component GeneralComp { + port TestPort generalPort; + port TestPort otherport; +} +function f_parametrizationCheck ( + MyRecord ExpectedMatch, + timer p_timer, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + var template MyRecord ReceivedRecordTemplate := {p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate}; + + if ( match(ExpectedMatch, ReceivedRecordTemplate) and (p_timer.running) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + +testcase TC_Sem_05040103_parameters_of_kind_timer_001 ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + timer t_check; + t_check.start(5.0); + f_parametrizationCheck(ExpectedMatch, t_check, p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate); + + t_check.stop; + +} + + +control{ + + var MyRecord DefaultValues := { + field1 := 0, + field2 := true, + field3 := null, + field4 := e_black, + field5 := 1 //any number can be used here to correspond with ? matching + } + + var MyRecord ModifiedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + var MyRecord PartlyModifiedValues := { + field1 := 0, + field2 := false, + field3 := null, + field4 := e_white, + field5 := 1 + } + + execute(TC_Sem_05040103_parameters_of_kind_timer_001(DefaultValues)); + execute(TC_Sem_05040103_parameters_of_kind_timer_001(DefaultValues,-,-,-,-,-)); + execute(TC_Sem_05040103_parameters_of_kind_timer_001(ModifiedValues,1,false,1,e_white,1)); + execute(TC_Sem_05040103_parameters_of_kind_timer_001(PartlyModifiedValues,-,false,-,e_white,-)); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_002.ttcn b/core_language/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 0000000..f10c022 --- /dev/null +++ b/core_language/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,30 @@ +/***************************************************************** + ** @author STF 521 + ** @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_001() runs on C { + timer t_tmr := 0.1; + t_tmr.start; + f_test(t_tmr); + } + + control { + execute(TC_Sem_05040103_parameters_of_kind_timer_001()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040103_parameters_of_kind_timer/Sem_05040103_parameters_of_kind_timer_003.ttcn b/core_language/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 0000000..129546a --- /dev/null +++ b/core_language/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,32 @@ +/***************************************************************** + ** @author STF 521 + ** @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_001() runs on C { + timer t_tmr := 0.1; + t_tmr.start; + a_test(t_tmr); + } + + control { + execute(TC_Sem_05040103_parameters_of_kind_timer_001()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_001.ttcn b/core_language/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 0000000..483b882 --- /dev/null +++ b/core_language/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,35 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + 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; + v_ptc.start(f_test(p)); + v_ptc.done; + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_001()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_002.ttcn b/core_language/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 0000000..789dc6a --- /dev/null +++ b/core_language/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,38 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + 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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_003.ttcn b/core_language/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 0000000..e7d573d --- /dev/null +++ b/core_language/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,33 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + f_test(p); + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_003()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_004.ttcn b/core_language/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 0000000..c44cab3 --- /dev/null +++ b/core_language/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,32 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + f_test(p); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_004()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_005.ttcn b/core_language/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 0000000..765f9ca --- /dev/null +++ b/core_language/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,33 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + 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 { + setverdict(pass); + } + + control { + execute(TC_NegSem_05040104_parameters_of_kind_port_005()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/NegSem_05040104_parameters_of_kind_port_006.ttcn b/core_language/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 0000000..a47b460 --- /dev/null +++ b/core_language/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,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + 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()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn new file mode 100644 index 0000000..047e20d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_001.ttcn @@ -0,0 +1,111 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.1.4, Ensure that the IUT accepts port parametrization types for functions. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_05040104_parameters_of_kind_port_001 { + + type enumerated MyEnumeratedType {e_black, e_white} + type integer address; + + type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 + } + + type port TestPort message { + inout MyRecord + } + + type component GeneralComp { + port TestPort generalPort; + port TestPort otherPort; + } + + function f_parametrizationCheck ( + MyRecord ExpectedMatch, + timer p_timer, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ?, + TestPort p_port + ) runs on GeneralComp { + var template MyRecord ReceivedRecordTemplate := {p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate}; + + p_port.send(ExpectedMatch); + } + + testcase TC_Sem_05040104_parameters_of_kind_port_001_a ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + timer t_check; + t_check.start(5.0); + f_parametrizationCheck(ExpectedMatch, t_check, p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate,generalPort); + alt { + [] generalPort.receive { + setverdict(pass); + } + [] t_check.timeout { + setverdict(fail); + } + } + + t_check.stop; + + } + + testcase TC_Sem_05040104_parameters_of_kind_port_001_b ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + timer t_check; + t_check.start(1.0); + f_parametrizationCheck(ExpectedMatch, t_check, p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate,otherPort); + alt { + [] otherPort.receive { + setverdict(pass); + } + [] t_check.timeout { + setverdict(fail); + } + } + + t_check.stop; + + } + + + control{ + + var MyRecord ModifiedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + //the following testcases will call same function with different port parameter values + execute(TC_Sem_05040104_parameters_of_kind_port_001_a(ModifiedValues,1,false,1,e_white,1)); + execute(TC_Sem_05040104_parameters_of_kind_port_001_b(ModifiedValues,1,false,1,e_white,1)); + + } + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/05040104_parameters_of_kind_port/Sem_05040104_parameters_of_kind_port_002.ttcn b/core_language/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 0000000..4a74abe --- /dev/null +++ b/core_language/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,33 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + f_test(p); + } + + control { + execute(TC_Sem_05040104_parameters_of_kind_port_002()); + } +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NOTES b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NOTES new file mode 100644 index 0000000..245e710 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NOTES @@ -0,0 +1,7 @@ +The following requirements are present in 5.4.1.1 and 5.4.1.2 too and they are tested as a part of these clauses: + +Formal parameters of parameterized templates, functions, altsteps, and testcases are defined in formal parameter lists. Formal parameters shall be in, inout or out parameters (see definitions in clause 3.1). + +If not stated otherwise, a formal parameter is an in parameter. + +Formal in parameters may have default values. This default value is used when no actual parameter is provided. \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn new file mode 100644 index 0000000..8618e87 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that error is generated for incompatible actual value of in parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If parameters are passed by value (i.e. in case of in and out parameters), type compatibility +// rules specified in 6.3 apply. + +module NegSem_050401_top_level_001 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + type record R2 { + integer option1, + integer option2 optional + } + + function f(R2 p_rec) { + if (match(p_rec, {1, 2})) { + setverdict(pass); + } else { + setverdict(fail, "p_rec value not matching ", p_rec, {1, 2}); + } + } + + testcase TC_NegSem_050401_top_level_001() runs on GeneralComp { + var R1 v_rec := {field1 := 1, field2 := 2}; + f(v_rec); + } + + control{ + execute(TC_NegSem_050401_top_level_001()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn new file mode 100644 index 0000000..ebc5900 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that error is generated for incompatible actual value of out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If parameters are passed by value (i.e. in case of in and out parameters), type compatibility +// rules specified in 6.3 apply. + +module NegSem_050401_top_level_002 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + type record R2 { + integer option1, + integer option2 optional + } + + function f(out R2 p_rec) { + p_rec.option1 := 1; + p_rec.option2 := 2; + } + + testcase TC_NegSem_050401_top_level_002() runs on GeneralComp { + var R1 v_rec; + f(v_rec); + if ( match(v_rec, {1, 2})) { setverdict(pass); } + else { setverdict(fail, "p_rec value not matching ", v_rec, {1, 2}); } + } + + control{ + execute(TC_NegSem_050401_top_level_002()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn new file mode 100644 index 0000000..ec767fb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that error is generated if actual inout parameter doesn't adhere to strong typing rules + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When parameters are passed by reference, strong typing is required. Both the actual and formal +// parameter shall be of the same type. + +module NegSem_050401_top_level_003 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + type record R2 { + integer option1, + integer option2 + } + + function f(inout R2 p_rec) { + if (match(p_rec, {1, 2})) { setverdict(pass); } + else { setverdict(fail, "p_rec value not matching ", p_rec, {1, 2}); } + } + + testcase TC_NegSem_050401_top_level_003() runs on GeneralComp { + var R1 v_rec := { field1 := 1, field2 := 2 }; + f(v_rec); // R1 and R2 are compatible types, but not the same. Strong typing requires exactly the same types. + } + + control{ + execute(TC_NegSem_050401_top_level_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn new file mode 100644 index 0000000..ee65ab6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that in parameters can be read within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_001 { + + type component GeneralComp { + } + + function f(in integer p_int) { + if (p_int == 0) { setverdict(pass); } // reading from p_int + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_001() runs on GeneralComp { + f(0); + } + + control{ + execute(TC_Sem_050401_top_level_001()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn new file mode 100644 index 0000000..48dfffe --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that out parameters can be read within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_002 { + + type component GeneralComp { + } + + function f(out integer p_int) { + log(p_int); // read access: UNINITIALIZED shall be printed as no assignment has been made + } + + testcase TC_Sem_050401_top_level_002() runs on GeneralComp { + var integer v_int := 10; + f(v_int); + if (v_int == 10) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_050401_top_level_002()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn new file mode 100644 index 0000000..68638da --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that inout parameters can be read within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_003 { + + type component GeneralComp { + } + + function f(inout integer p_int) { + if (p_int == 0) { setverdict(pass); } // reading from p_int + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_003() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn new file mode 100644 index 0000000..1dd9c71 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that in parameters can be set within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_004 { + + type component GeneralComp { + } + + function f(in integer p_int) { + p_int := 3; // setting p_int within parametrized content + if (p_int == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_004() runs on GeneralComp { + f(0); + } + + control{ + execute(TC_Sem_050401_top_level_004()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn new file mode 100644 index 0000000..0d1277d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that out parameters can be set within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_005 { + + type component GeneralComp { + } + + function f(out integer p_int) { + p_int := 3; // setting p_int within parametrized content + if (p_int == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_005() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_006.ttcn new file mode 100644 index 0000000..d3f12c0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_006.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that inout parameters can be set within parametrized content + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For all these three sorts of parameter passing, the formal parameters can both be read and set +// (i.e. get new values being assigned) within the parametrized object. + +module Sem_050401_top_level_006 { + + type component GeneralComp { + } + + function f(inout integer p_int) { + p_int := 3; // setting p_int within parametrized content + if (p_int == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_006() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_007.ttcn new file mode 100644 index 0000000..d79f2f8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_007.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that in parameters can be used as actual in parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_007 { + + type component GeneralComp { + } + + template integer mw_range(in integer p_upperBound) := (0..p_upperBound); + + function f(in integer p_int) { + var template integer vm_t := mw_range(p_int); + log(vm_t); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_007() runs on GeneralComp { + f(5); + } + + control{ + execute(TC_Sem_050401_top_level_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_008.ttcn new file mode 100644 index 0000000..a418aef --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_008.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that in parameters can be used as actual out parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_008 { + + type component GeneralComp { + } + + function fx(out integer p_int) { + p_int := 3; + } + + function f(in integer p_int) { + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_008() runs on GeneralComp { + f(5); + } + + control{ + execute(TC_Sem_050401_top_level_008()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_009.ttcn new file mode 100644 index 0000000..3be5792 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_009.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that in parameters can be used as actual inout parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_009 { + + type component GeneralComp { + } + + function fx(inout integer p_int) { + p_int := p_int + 3; + } + + function f(in integer p_int) { + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_009() runs on GeneralComp { + f(5); + } + + control{ + execute(TC_Sem_050401_top_level_009()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_010.ttcn new file mode 100644 index 0000000..53c6a2f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_010.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that out parameters can be used as actual in parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_010 { + + type component GeneralComp { + } + + template integer mw_range(in integer p_upperBound) := (0..p_upperBound); + + function f(out integer p_int) { + var template integer vm_t; + p_int := 5; + vm_t := mw_range(p_int); + log(vm_t); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_010() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_010()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_011.ttcn new file mode 100644 index 0000000..76cbbca --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_011.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that out parameters can be used as actual out parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_011 { + + type component GeneralComp { + } + + function fx(out integer p_int) { + p_int := 3; + } + + function f(out integer p_int) { + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_011() runs on GeneralComp { + var integer v_int; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_011()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_012.ttcn new file mode 100644 index 0000000..02c7c4d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_012.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that out parameters can be used as actual inout parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_012 { + + type component GeneralComp { + } + + function fx(inout integer p_int) { + p_int := 3; + } + + function f(out integer p_int) { + p_int := 0; + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_012() runs on GeneralComp { + var integer v_int; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_012()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_013.ttcn new file mode 100644 index 0000000..6a13cc7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_013.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that inout parameters can be used as actual in parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_013 { + + type component GeneralComp { + } + + template integer mw_range(in integer p_upperBound) := (0..p_upperBound); + + function f(inout integer p_int) { + var template integer vm_t; + vm_t := mw_range(p_int); + log(vm_t); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_013() runs on GeneralComp { + var integer v_int := 5; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_013()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_014.ttcn new file mode 100644 index 0000000..27e3ddf --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_014.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that inout parameters can be used as actual out parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_014 { + + type component GeneralComp { + } + + function fx(out integer p_int) { + p_int := 3; + } + + function f(inout integer p_int) { + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_014() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_014()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_015.ttcn new file mode 100644 index 0000000..b5dbc74 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_015.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that inout parameters can be used as actual inout parameters of parameterized objects + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal parameters can be used directly as actual parameters for other parametrized objects, +// e.g. as actual parameters in function invocations or as actual parameters in template instances. + +module Sem_050401_top_level_015 { + + type component GeneralComp { + } + + function fx(inout integer p_int) { + p_int := 3; + } + + function f(inout integer p_int) { + fx(p_int); + setverdict(pass); + } + + testcase TC_Sem_050401_top_level_015() runs on GeneralComp { + var integer v_int := 0; + f(v_int); + } + + control{ + execute(TC_Sem_050401_top_level_015()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_016.ttcn new file mode 100644 index 0000000..7c77a45 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_016.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.1, verify that compatibility rules are used for passing in parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If parameters are passed by value (i.e. in case of in and out parameters), type compatibility +// rules specified in 6.3 apply. + +module Sem_050401_top_level_016 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + type record R2 { + integer option1, + integer option2 + } + + function f(R2 p_rec) { + if (match(p_rec, {1, 2})) { setverdict(pass); } + else { setverdict(fail, "p_rec value not matching ", p_rec, R2:{1, 2}); } + } + + testcase TC_Sem_050401_top_level_016() runs on GeneralComp { + var R1 v_rec := { field1 := 1, field2 := 2 }; + f(v_rec); + } + + control{ + execute(TC_Sem_050401_top_level_016()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_017.ttcn new file mode 100644 index 0000000..540ddb9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_017.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.1, verify that compatibility rules are used for passing out parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If parameters are passed by value (i.e. in case of in and out parameters), type compatibility +// rules specified in 6.3 apply. + +module Sem_050401_top_level_017 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + type record R2 { + integer option1, + integer option2 + } + + function f(out R2 p_rec) { + p_rec.option1 := 1; + p_rec.option2 := 2; + } + + testcase TC_Sem_050401_top_level_017() runs on GeneralComp { + var R1 v_rec; + f(v_rec); + if (match(v_rec, {1, 2})) { setverdict(pass); } + else { setverdict(fail, "v_rec value not matching ", v_rec, R1:{1, 2}); } + } + + control{ + execute(TC_Sem_050401_top_level_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_018.ttcn new file mode 100644 index 0000000..c838f9f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_018.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.1, verify that strong typing is used for passing inout parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When parameters are passed by reference, strong typing is required. Both the actual and formal +// parameter shall be of the same type. + +module Sem_050401_top_level_018 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + function f(inout R1 p_rec) { + if (match(p_rec, {1, 2})) { setverdict(pass); } + else { setverdict(fail, "p_rec value not matching ", p_rec, R1:{1, 2}); } + } + + testcase TC_Sem_050401_top_level_018() runs on GeneralComp { + var R1 v_rec := { field1 := 1, field2 := 2 }; + f(v_rec); + } + + control{ + execute(TC_Sem_050401_top_level_018()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_019.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_019.ttcn new file mode 100644 index 0000000..d016ecd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_019.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @lazy modifier can be used for value parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared lazy using the @lazy modifier. The behaviour +// of lazy parameters is defined in clause 3.1, definition of lazy values or templates. + +module Sem_050401_top_level_019 { + + type component GeneralComp { + } + + function f(@lazy integer p_int) { + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_019() runs on GeneralComp { + f(1); + } + + control{ + execute(TC_Sem_050401_top_level_019()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_020.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_020.ttcn new file mode 100644 index 0000000..bf5d192 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_020.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @lazy modifier can be used for template parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared lazy using the @lazy modifier. The behaviour +// of lazy parameters is defined in clause 3.1, definition of lazy values or templates. + +module Sem_050401_top_level_020 { + + type component GeneralComp { + } + + function f(template @lazy integer pm_int) { + if (match(1, pm_int)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_020() runs on GeneralComp { + f(1); + } + + control{ + execute(TC_Sem_050401_top_level_020()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_021.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_021.ttcn new file mode 100644 index 0000000..035b33e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_021.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @lazy parameters containing component variable references are properly evaluated + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared lazy using the @lazy modifier. The behaviour +// of lazy parameters is defined in clause 3.1, definition of lazy values or templates. + +// Note: the test checks the situation described in NOTE 2: +// The actual values of component variables used in the delayed evaluation of a lazy or fuzzy parameter +// may differ from their values at the time, when the parameterized function or alstep was called. + +module Sem_050401_top_level_021 { + + type component GeneralComp { + var integer vc_int := 20; + } + + function f(@lazy integer p_int) runs on GeneralComp { + vc_int := 0; + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_021() runs on GeneralComp { + f(vc_int + 1); + } + + control{ + execute(TC_Sem_050401_top_level_021()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_022.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_022.ttcn new file mode 100644 index 0000000..6d00fd3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_022.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @fuzzy modifier can be used for value parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared fuzzy using the @fuzzy modifier. The behaviour +// of fuzzy parameters is defined in clause 3.1, definition of fuzzy values or templates. + +module Sem_050401_top_level_022 { + + type component GeneralComp { + } + + function f(@fuzzy integer p_int) { + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_022() runs on GeneralComp { + f(1); + } + + control{ + execute(TC_Sem_050401_top_level_022()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_023.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_023.ttcn new file mode 100644 index 0000000..e00a9e1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_023.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @fuzzy modifier can be used for template parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared fuzzy using the @fuzzy modifier. The behaviour +// of fuzzy parameters is defined in clause 3.1, definition of fuzzy values or templates. + +module Sem_050401_top_level_023 { + + type component GeneralComp { + } + + function f(template @fuzzy integer pm_int) { + if (match(1, pm_int)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_023() runs on GeneralComp { + f(1); + } + + control{ + execute(TC_Sem_050401_top_level_023()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_024.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_024.ttcn new file mode 100644 index 0000000..a8dc68f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_024.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that @fuzzy parameters containing component variable references are properly evaluated + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Formal value or template parameters may be declared fuzzy using the @fuzzy modifier. The behaviour +// of fuzzy parameters is defined in clause 3.1, definition of fuzzy values or templates. + +// Note: the test checks the situation described in NOTE 2: +// The actual values of component variables used in the delayed evaluation of a lazy or fuzzy parameter +// may differ from their values at the time, when the parameterized function or alstep was called. + +module Sem_050401_top_level_024 { + + type component GeneralComp { + var integer vc_int := 20; + } + + function f(@fuzzy integer p_int) runs on GeneralComp { + vc_int := 0; + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_024() runs on GeneralComp { + f(vc_int + 1); + } + + control{ + execute(TC_Sem_050401_top_level_024()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_025.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_025.ttcn new file mode 100644 index 0000000..e55e3ff --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_025.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that default values of @lazy parameters are properly evaluated + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Assigning default values for lazy and fuzzy formal parameters does not change the parameters' semantics: +// when the default values are used as actual values for the parameters, they shall be evaluated the same +// way (i.e. delayed) as if an actual parameter was provided. + +module Sem_050401_top_level_025 { + + type component GeneralComp { + } + + function f(@lazy float p_int := rnd()) runs on GeneralComp { + var float v_float; + // rnd function is used for checking: + // 1. first rnd with a seed is called to initiate the generator with a fixed value + // 2. the next call is without a seed (to continue the sequence); this value is saved + // 3. the third call re-uses the seed to restart the sequence + // 4. the rnd call used in evaluation of the default value shall produce the same result now as in the 2nd step + rnd(1.0); + v_float := rnd(); + rnd(1.0); + if (p_int == v_float) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_025() runs on GeneralComp { + f(); + } + + control{ + execute(TC_Sem_050401_top_level_025()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_026.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_026.ttcn new file mode 100644 index 0000000..d56a578 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_026.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that default values of @fuzzy parameters are properly evaluated + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Assigning default values for lazy and fuzzy formal parameters does not change the parameters' semantics: +// when the default values are used as actual values for the parameters, they shall be evaluated the same +// way (i.e. delayed) as if an actual parameter was provided. + +module Sem_050401_top_level_026 { + + type component GeneralComp { + } + + function f(@fuzzy float p_int := rnd()) runs on GeneralComp { + var float v_float; + // rnd function is used for checking: + // 1. first rnd with a seed is called to initiate the generator with a fixed value + // 2. the next call is without a seed (to continue the sequence); this value is saved + // 3. the third call re-uses the seed to restart the sequence + // 4. the rnd call used in evaluation of the default value shall produce the same result now as in the 2nd step + rnd(1.0); + v_float := rnd(); + rnd(1.0); + if (p_int == v_float) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050401_top_level_026() runs on GeneralComp { + f(); + } + + control{ + execute(TC_Sem_050401_top_level_026()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_027.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_027.ttcn new file mode 100644 index 0000000..c577028 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_027.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that passing lazy parameter to formal parameter without modifier disables lazy evaluation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Lazy and fuzzy properties are valid only in the scope, where the parameters' names are visible. +// For example, if a fuzzy parameter is passed to a formal parameter declared without a modifier, it +// loses its fuzzy feature inside the called function. Similarly, if it is passed to a lazy formal +// parameter, it becomes lazy within the called function. + +module Sem_050401_top_level_027 { + + type component GeneralComp { + var integer vc_int := 20; + } + + function fx(integer p_int) runs on GeneralComp { + vc_int := 0; // doesn't have effect on the parameter value anymore as the parameter is not lazy + if (p_int == 21) { setverdict(pass); } + else { setverdict(fail); } + } + function f(@lazy integer p_int) runs on GeneralComp { + fx(p_int); // causes evaluation of the value + } + + testcase TC_Sem_050401_top_level_027() runs on GeneralComp { + f(vc_int + 1); // vc_int is equal to 20 at the time of function call + } + + control{ + execute(TC_Sem_050401_top_level_027()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_028.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_028.ttcn new file mode 100644 index 0000000..1154ef9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_028.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that passing fuzzy parameter to formal parameter without modifier disables fuzzy evaluation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Lazy and fuzzy properties are valid only in the scope, where the parameters' names are visible. +// For example, if a fuzzy parameter is passed to a formal parameter declared without a modifier, it +// loses its fuzzy feature inside the called function. Similarly, if it is passed to a lazy formal +// parameter, it becomes lazy within the called function. + +module Sem_050401_top_level_028 { + + type component GeneralComp { + var integer vc_int := 20; + } + + function fx(integer p_int) runs on GeneralComp { + vc_int := 0; // doesn't have effect on the parameter value anymore as the parameter is not lazy + if (p_int == 21) { setverdict(pass); } + else { setverdict(fail); } + } + function f(@fuzzy integer p_int) runs on GeneralComp { + fx(p_int); // causes evaluation of the value + } + + testcase TC_Sem_050401_top_level_028() runs on GeneralComp { + f(vc_int + 1); // vc_int is equal to 20 at the time of function call + } + + control{ + execute(TC_Sem_050401_top_level_028()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_029.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_029.ttcn new file mode 100644 index 0000000..d933a7a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_029.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.1, verify that fuzzy parameter passed to lazy formal parameter enables lazy evaluation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Lazy and fuzzy properties are valid only in the scope, where the parameters' names are visible. +// For example, if a fuzzy parameter is passed to a formal parameter declared without a modifier, it +// loses its fuzzy feature inside the called function. Similarly, if it is passed to a lazy formal +// parameter, it becomes lazy within the called function. + +module Sem_050401_top_level_029 { + + type component GeneralComp { + var integer vc_int := 20; + } + + function fx(@lazy integer p_int) runs on GeneralComp { + vc_int := 0; // p_int hasn't been evaluated yet - this change will have impact on evaluation + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + vc_int := 10; // no impact on p_int value as the parameter has been already evaluated + if (p_int == 1) { setverdict(pass); } + else { setverdict(fail); } + } + function f(@fuzzy integer p_int) runs on GeneralComp { + fx(p_int); // no evaluation of the value yet + } + + testcase TC_Sem_050401_top_level_029() runs on GeneralComp { + f(vc_int + 1); // vc_int is equal to 20 at the time of function call + } + + control{ + execute(TC_Sem_050401_top_level_029()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_001.ttcn new file mode 100644 index 0000000..e3ad7f1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_002.ttcn new file mode 100644 index 0000000..3800b81 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_003.ttcn new file mode 100644 index 0000000..a448ee7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_004.ttcn new file mode 100644 index 0000000..9e3a4fc --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_004.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_005.ttcn new file mode 100644 index 0000000..47e6ba4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_006.ttcn new file mode 100644 index 0000000..01d335a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_006.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_007.ttcn new file mode 100644 index 0000000..06a3e35 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_007.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_008.ttcn new file mode 100644 index 0000000..34e204f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_008.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_009.ttcn new file mode 100644 index 0000000..ec8f184 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_009.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_010.ttcn new file mode 100644 index 0000000..7cf0840 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_010.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_011.ttcn new file mode 100644 index 0000000..fc1f730 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_011.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_012.ttcn new file mode 100644 index 0000000..475c53e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_012.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_013.ttcn new file mode 100644 index 0000000..753477e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_013.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in 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_013 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + } + + + testcase TC_NegSem_050402_actual_parameters_013() 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_013()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_014.ttcn new file mode 100644 index 0000000..b5dd3f5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_014.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_015.ttcn new file mode 100644 index 0000000..c64518f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_015.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_016.ttcn new file mode 100644 index 0000000..031b2e4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_016.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @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 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_017.ttcn new file mode 100644 index 0000000..7e7b140 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_017.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @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 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_018.ttcn new file mode 100644 index 0000000..8fbef7f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_018.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_019.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_019.ttcn new file mode 100644 index 0000000..df6f297 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_019.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_020.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_020.ttcn new file mode 100644 index 0000000..fdfc4d2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_020.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_021.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_021.ttcn new file mode 100644 index 0000000..7f819de --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_021.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_022.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_022.ttcn new file mode 100644 index 0000000..5604b55 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_022.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_023.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_023.ttcn new file mode 100644 index 0000000..c1bcd0c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_023.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_024.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_024.ttcn new file mode 100644 index 0000000..fcc7923 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_024.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_025.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_025.ttcn new file mode 100644 index 0000000..0607b1a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_025.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_026.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_026.ttcn new file mode 100644 index 0000000..1bafd03 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_026.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_027.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_027.ttcn new file mode 100644 index 0000000..d906aca --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_027.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_028.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_028.ttcn new file mode 100644 index 0000000..d52f1e3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_028.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_029.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_029.ttcn new file mode 100644 index 0000000..416944e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_029.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_030.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_030.ttcn new file mode 100644 index 0000000..de06f36 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_030.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_031.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_031.ttcn new file mode 100644 index 0000000..63404cb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_031.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_032.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_032.ttcn new file mode 100644 index 0000000..e346318 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_032.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_033.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_033.ttcn new file mode 100644 index 0000000..f93e5ca --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_033.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_034.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_034.ttcn new file mode 100644 index 0000000..581911a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_034.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_035.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_035.ttcn new file mode 100644 index 0000000..8affee4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_035.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_036.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_036.ttcn new file mode 100644 index 0000000..2dfe7fa --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_036.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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); } + } + } + + 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_036()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_037.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_037.ttcn new file mode 100644 index 0000000..83c80fb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_037.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_037 { + + 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_037()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_038.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_038.ttcn new file mode 100644 index 0000000..f7a4797 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_038.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_038 { + + 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); } + } + } + + 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_038()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_039.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_039.ttcn new file mode 100644 index 0000000..8a75cc4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_039.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_039 { + + 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_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_039()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_040.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_040.ttcn new file mode 100644 index 0000000..6abcb82 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_040.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_040 { + + 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 + } + + + 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_040()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_041.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_041.ttcn new file mode 100644 index 0000000..cd7787c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_041.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_041 { + + 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 + } + + + 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_041()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_042.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_042.ttcn new file mode 100644 index 0000000..adeff7a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_042.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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; + } + + 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_042()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_043.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_043.ttcn new file mode 100644 index 0000000..f124a61 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_043.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_043 { + + 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 == 10) { 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_043()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_044.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_044.ttcn new file mode 100644 index 0000000..69e9304 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_044.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_044 { + + 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_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_044()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_045.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_045.ttcn new file mode 100644 index 0000000..ff2ec56 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_045.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_045 { + + type component GeneralComp { + } + + 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_045(1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_046.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_046.ttcn new file mode 100644 index 0000000..941a13f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_046.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_046 { + + 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); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_046(PX_VAL)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_047.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_047.ttcn new file mode 100644 index 0000000..8e4f3a5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_047.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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 { + + type component GeneralComp { + } + + 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_047(c_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_048.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_048.ttcn new file mode 100644 index 0000000..084682d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_048.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + 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_048(f_ret())); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_049.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_049.ttcn new file mode 100644 index 0000000..2f1acb2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_049.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_049 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + testcase TC_NegSem_050402_actual_parameters_049(inout integer p_val) runs on GeneralComp { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_049(10 + f_ret() - v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_050.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_050.ttcn new file mode 100644 index 0000000..bf544eb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_050.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_050 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + 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_050(m_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_051.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_051.ttcn new file mode 100644 index 0000000..1eff6ab --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_051.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_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_051(vm_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_052.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_052.ttcn new file mode 100644 index 0000000..ad8666c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_052.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_052 { + + 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); } + } + + function f_caller(in template integer p_val) { + execute(TC_NegSem_050402_actual_parameters_052(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_053.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_053.ttcn new file mode 100644 index 0000000..8c9c7ed --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_053.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_053 { + + type component 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_053(p_val)); // tested parameter passing + } + + control { + var template integer vm_val; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_054.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_054.ttcn new file mode 100644 index 0000000..e71ce2c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_054.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_054 { + + type component 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_054(p_val)); // tested parameter passing + } + + control { + var template integer vm_val := 5; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_055.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_055.ttcn new file mode 100644 index 0000000..58072c1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_055.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_055 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_NegSem_050402_actual_parameters_055(inout integer p_val) runs on GeneralComp { + if (p_val == 10) { 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 + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_056.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_056.ttcn new file mode 100644 index 0000000..4ac912f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_056.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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_056 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + 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 { + f_caller({field1 := 11 }); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn new file mode 100644 index 0000000..40f767c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_057.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_057()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn new file mode 100644 index 0000000..0c7c88e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_058.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_058() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_058()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn new file mode 100644 index 0000000..4fb669c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_059.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + const integer c_val := 3; + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_059() runs on GeneralComp { + f_test(c_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_059()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn new file mode 100644 index 0000000..8301408 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_060.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_060() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_060()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn new file mode 100644 index 0000000..1761450 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_061.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + 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_061()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn new file mode 100644 index 0000000..381f3e1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_062.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + function f_test(out template integer p_val) { + p_val := ?; + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_062() runs on GeneralComp { + f_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_062()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn new file mode 100644 index 0000000..c29d927 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_063.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } + } + + 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_063()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn new file mode 100644 index 0000000..1cf25ff --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_064.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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); + } + } + + 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_064()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn new file mode 100644 index 0000000..269b07c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_065.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + timer t := 0.0; + } + + const integer c_val := 3; + + altstep a_test(out template integer p_val) runs on GeneralComp { + []t.timeout { + p_val := ?; + setverdict(pass); + } + } + + 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_065()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn new file mode 100644 index 0000000..697d530 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_066.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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); + } + } + + 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_066()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn new file mode 100644 index 0000000..2ef18b1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_067.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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); + } + } + + 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_067()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn new file mode 100644 index 0000000..0103363 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_068.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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); + } + } + + testcase TC_NegSem_050402_actual_parameters_068() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_068()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn new file mode 100644 index 0000000..9cd8572 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_069.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + 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_069(1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn new file mode 100644 index 0000000..f2e1711 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_070.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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_070(PX_VAL)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn new file mode 100644 index 0000000..2ca34ad --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_071.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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 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 { + + type component GeneralComp { + } + + 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_071(c_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn new file mode 100644 index 0000000..752c317 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_072.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + 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_072(f_ret())); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn new file mode 100644 index 0000000..c888d92 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_073.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + testcase TC_NegSem_050402_actual_parameters_073(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + control { + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_073(10 + f_ret() - v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn new file mode 100644 index 0000000..66cea5e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_074.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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 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 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + 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_074(m_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_075.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_075.ttcn new file mode 100644 index 0000000..82c8778 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_075.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_075 { + + type component GeneralComp { + } + + function f_test(inout template integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_075() runs on GeneralComp { + f_test(1); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_075()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_076.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_076.ttcn new file mode 100644 index 0000000..4362a77 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_076.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_076 { + + type component GeneralComp { + } + + 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_076() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_076()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_077.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_077.ttcn new file mode 100644 index 0000000..dd19914 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_077.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_077 { + + type component GeneralComp { + } + + const integer c_val := 3; + + function f_test(inout template integer p_val) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_077() runs on GeneralComp { + f_test(c_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_077()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_078.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_078.ttcn new file mode 100644 index 0000000..9770f5a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_078.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_078 { + + 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); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_078() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_078()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_079.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_079.ttcn new file mode 100644 index 0000000..bbe7be5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_079.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_079 { + + type component GeneralComp { + } + + 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_079()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_080.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_080.ttcn new file mode 100644 index 0000000..4415c74 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_080.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_080 { + + 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); } + } + + testcase TC_NegSem_050402_actual_parameters_080() runs on GeneralComp { + f_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_080()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_081.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_081.ttcn new file mode 100644 index 0000000..09601b7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_081.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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; + } + + 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_081()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_082.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_082.ttcn new file mode 100644 index 0000000..ea461b2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_082.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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; + + 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_082() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_082()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_083.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_083.ttcn new file mode 100644 index 0000000..678556a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_083.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_083 { + + 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); } + } + } + + testcase TC_NegSem_050402_actual_parameters_083() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_083()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_084.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_084.ttcn new file mode 100644 index 0000000..e8b295b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_084.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_084 { + + type component GeneralComp { + timer t := 0.0; + } + + 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_084() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_084()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_085.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_085.ttcn new file mode 100644 index 0000000..56a7a94 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_085.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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; + } + + 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 { + execute(TC_NegSem_050402_actual_parameters_085()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_086.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_086.ttcn new file mode 100644 index 0000000..18421ff --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_086.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_086 { + + 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); } + } + } + + testcase TC_NegSem_050402_actual_parameters_086() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing + } + + control { + execute(TC_NegSem_050402_actual_parameters_086()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_087.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_087.ttcn new file mode 100644 index 0000000..fadd79b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_087.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_087 { + + type component GeneralComp { + } + + 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); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_087(1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_088.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_088.ttcn new file mode 100644 index 0000000..ea0ffe4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_088.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_088 { + + type component GeneralComp { + } + + 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); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_088(PX_VAL)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_089.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_089.ttcn new file mode 100644 index 0000000..5b18fb7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_089.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_089 { + + 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); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_089(c_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_090.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_090.ttcn new file mode 100644 index 0000000..7ec6656 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_090.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_090 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + 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); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_090(f_ret())); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_091.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_091.ttcn new file mode 100644 index 0000000..47e8671 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_091.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_091 { + + type component GeneralComp { + } + + 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 { + var integer v_val := 5; + execute(TC_NegSem_050402_actual_parameters_091(10 + f_ret() - v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_092.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_092.ttcn new file mode 100644 index 0000000..d4c8f0c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_092.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_092 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + 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_092(m_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_093.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_093.ttcn new file mode 100644 index 0000000..bda6b7e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_093.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_093 { + + 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); } + } + + 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_093()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_094.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_094.ttcn new file mode 100644 index 0000000..1c74823 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_094.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_094 { + + type component GeneralComp { + } + + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional + } + + template R mw_rec := { + field1 := 1, + field2 := * + } + + 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_094()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_095.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_095.ttcn new file mode 100644 index 0000000..668167e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_095.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_095 { + + 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; + } + + 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_095()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_096.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_096.ttcn new file mode 100644 index 0000000..f504c48 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_096.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_096 { + + 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; + } + + 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_096()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_097.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_097.ttcn new file mode 100644 index 0000000..aca4bd4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_097.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 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_097 { + + 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_097()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_098.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_098.ttcn new file mode 100644 index 0000000..cea8d73 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_098.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 formal timer parameters shall be component +// timers, local timers or formal timer parameters of the current scope. + +module NegSem_050402_actual_parameters_098 { + + type component GeneralComp { + } + + function f_test(timer t_par) { + t_par.start; + if (t_par.running) { 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 + } + + control { + execute(TC_NegSem_050402_actual_parameters_098()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_099.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_099.ttcn new file mode 100644 index 0000000..a4c9aa8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_099.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 formal port parameters shall be component +// ports or formal port parameters of the current scope. + +module NegSem_050402_actual_parameters_099 { + + 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); + } + + control { + execute(TC_NegSem_050402_actual_parameters_099()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_100.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_100.ttcn new file mode 100644 index 0000000..4b8948e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_100.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_100 { + + 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); } + } + + testcase TC_NegSem_050402_actual_parameters_100() runs on GeneralComp { + f_test("test", 1); + } + + control { + execute(TC_NegSem_050402_actual_parameters_100()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_101.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_101.ttcn new file mode 100644 index 0000000..36f6d41 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_101.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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_101() runs on GeneralComp { + f_test(1); + } + + control { + execute(TC_NegSem_050402_actual_parameters_101()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_102.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_102.ttcn new file mode 100644 index 0000000..1ca5f1c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_102.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that parameter without default value cannot be skipped + ** @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_102 { + + 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_102() runs on GeneralComp { + f_test(1, -); + } + + control { + execute(TC_NegSem_050402_actual_parameters_102()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_103.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_103.ttcn new file mode 100644 index 0000000..03fc7c0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_103.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @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) + ** @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. + +module NegSem_050402_actual_parameters_103 { + + 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); } + } + + testcase TC_NegSem_050402_actual_parameters_103() runs on GeneralComp { + f_test(p_val1 := 1, "test"); + } + + control { + execute(TC_NegSem_050402_actual_parameters_103()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_104.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_104.ttcn new file mode 100644 index 0000000..bef5b3d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_104.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @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) + ** @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. + +module NegSem_050402_actual_parameters_104 { + + 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); } + } + + testcase TC_NegSem_050402_actual_parameters_104() runs on GeneralComp { + f_test(p_val1 := 1, -); + } + + control { + execute(TC_NegSem_050402_actual_parameters_104()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_105.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_105.ttcn new file mode 100644 index 0000000..bd2f627 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_105.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// When using assignment notation, each formal parameter shall be assigned an actual +// parameter at most once. + +module NegSem_050402_actual_parameters_105 { + + type component GeneralComp { + } + + 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_105() runs on GeneralComp { + f_test(p_val1 := 1, p_val2 := "test", p_val1 := 1); + } + + control { + execute(TC_NegSem_050402_actual_parameters_105()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_106.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_106.ttcn new file mode 100644 index 0000000..12c915c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_106.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// For each formal parameter without default value, there shall be an actual parameter. + +module NegSem_050402_actual_parameters_106 { + + type component GeneralComp { + } + + 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_106() runs on GeneralComp { + f_test(p_val2 := "test", p_val3 := 3); + } + + control { + execute(TC_NegSem_050402_actual_parameters_106()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_107.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_107.ttcn new file mode 100644 index 0000000..a3130bd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_107.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to in formal parameters + ** @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. + +module NegSem_050402_actual_parameters_107 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 + } + + 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 { + execute(TC_NegSem_050402_actual_parameters_107()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_108.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_108.ttcn new file mode 100644 index 0000000..f7c093a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_108.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed from out formal parameters + ** @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. + +module NegSem_050402_actual_parameters_108 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + type record R2 { + integer elem1, + integer elem2 + } + + 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_108()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_109.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_109.ttcn new file mode 100644 index 0000000..d1634e7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_109.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that incompatible values cannot be passed to inout formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Strong typing is required for parameters passed by reference. + +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 R1 p_val) { + if (p_val == { field1 := 1, field2 := 2 }) { 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); + } + + control { + execute(TC_NegSem_050402_actual_parameters_109()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_110.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_110.ttcn new file mode 100644 index 0000000..c8c8239 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_110.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that values of compatible but distinct types cannot be passed to inout formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Strong typing is required for parameters passed by reference. + +module NegSem_050402_actual_parameters_110 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + type R1 R2; + + 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_110() runs on GeneralComp { + var R2 v_rec := { 1, 2 }; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_110()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_111.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_111.ttcn new file mode 100644 index 0000000..49f1308 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_111.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module NegSem_050402_actual_parameters_111 { + + type component GeneralComp { + } + + function f_test (omit integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_111() runs on GeneralComp { + f_test((0..10)); + } + + control { + execute(TC_NegSem_050402_actual_parameters_111()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_112.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_112.ttcn new file mode 100644 index 0000000..29c90c7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_112.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module NegSem_050402_actual_parameters_112 { + + type component GeneralComp { + } + + function f_test (template(value) integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_112() runs on GeneralComp { + f_test((1, 2, 3)); + } + + control { + execute(TC_NegSem_050402_actual_parameters_112()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_113.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_113.ttcn new file mode 100644 index 0000000..4417ec7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_113.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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 passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module NegSem_050402_actual_parameters_113 { + + 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(*); + } + + control { + execute(TC_NegSem_050402_actual_parameters_113()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_114.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_114.ttcn new file mode 100644 index 0000000..dfbcbcd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_114.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @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: +// 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_114 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + 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_114() runs on GeneralComp { + f_test(mw_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_114()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_115.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_115.ttcn new file mode 100644 index 0000000..4339d4d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_115.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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. + +module NegSem_050402_actual_parameters_115 { + + 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); + } + + control { + execute(TC_NegSem_050402_actual_parameters_115()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_116.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_116.ttcn new file mode 100644 index 0000000..9e27235 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_116.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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. + +module NegSem_050402_actual_parameters_116 { + + type component GeneralComp { + } + + testcase TC_NegSem_050402_actual_parameters_116() runs on GeneralComp { + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_116); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_117.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_117.ttcn new file mode 100644 index 0000000..1088a89 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_117.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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. + +module NegSem_050402_actual_parameters_117 { + + type component GeneralComp { + } + + altstep a_test () { + [] any timer.timeout { setverdict(pass); } + } + + 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_117()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_118.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_118.ttcn new file mode 100644 index 0000000..fcab38d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_118.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ** @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. + +module NegSem_050402_actual_parameters_118 { + + type component GeneralComp { + } + + template integer mw_allInt := ?; + + 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_118()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_119.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_119.ttcn new file mode 100644 index 0000000..51e55cc --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_119.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that uninitialized values cannot be passed to in formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Unless specified differently in the relevant clause(s), actual parameters +// passed to in or inout formal parameters shall be at least partially +// initialized (for an exemption see e.g. clause 16.1.2 of the present document). + +module NegSem_050402_actual_parameters_119 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + function f_test (R p_val) { + if (not isbound(p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_119() runs on GeneralComp { + var R v_rec; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_119()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_120.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_120.ttcn new file mode 100644 index 0000000..3954269 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_120.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that uninitialized values cannot be passed to inout formal parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Unless specified differently in the relevant clause(s), actual parameters +// passed to in or inout formal parameters shall be at least partially +// initialized (for an exemption see e.g. clause 16.1.2 of the present document). + +module NegSem_050402_actual_parameters_120 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + function f_test (inout R p_val) { + if (not isbound(p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_120() runs on GeneralComp { + var R v_rec; + f_test(v_rec); + } + + control { + execute(TC_NegSem_050402_actual_parameters_120()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_121.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_121.ttcn new file mode 100644 index 0000000..f25be61 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_121.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls passed to lazy formal parameters cannot contain inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Functions, called by actual parameters passed to fuzzy or lazy formal parameters +// of the calling function, shall not have inout or out formal parameters. The called +// functions may use other functions with inout or out parameters internally. + +module NegSem_050402_actual_parameters_121 { + + type component GeneralComp { + } + + function f_eval(inout integer p_val) return integer { + p_val := p_val + 1; + return p_val; + } + + function f_test (@lazy integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_121() runs on GeneralComp { + var integer v_val := 0; + f_test(1 + f_eval(v_val)); + } + + control { + execute(TC_NegSem_050402_actual_parameters_121()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_122.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_122.ttcn new file mode 100644 index 0000000..1821583 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_122.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls passed to fuzzy formal parameters cannot contain inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Functions, called by actual parameters passed to fuzzy or lazy formal parameters +// of the calling function, shall not have inout or out formal parameters. The called +// functions may use other functions with inout or out parameters internally. + +module NegSem_050402_actual_parameters_122 { + + type component GeneralComp { + } + + function f_eval(inout integer p_val) return integer { + p_val := p_val + 1; + return p_val; + } + + function f_test (@fuzzy integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_122() runs on GeneralComp { + var integer v_val := 0; + f_test(1 + f_eval(v_val)); + } + + control { + execute(TC_NegSem_050402_actual_parameters_122()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_123.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_123.ttcn new file mode 100644 index 0000000..546f423 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_123.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls passed to lazy formal parameters cannot contain out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Functions, called by actual parameters passed to fuzzy or lazy formal parameters +// of the calling function, shall not have inout or out formal parameters. The called +// functions may use other functions with inout or out parameters internally. + +module NegSem_050402_actual_parameters_123 { + + type component GeneralComp { + } + + function f_eval(out integer p_val) return integer { + p_val := 10; + return 1; + } + + function f_test (@lazy integer p_val) { + if (p_val == 12) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_123() runs on GeneralComp { + var integer v_val := 0; + f_test(1 + f_eval(v_val) + v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_123()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_124.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_124.ttcn new file mode 100644 index 0000000..cc887b5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_124.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls passed to fuzzy formal parameters cannot contain out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Functions, called by actual parameters passed to fuzzy or lazy formal parameters +// of the calling function, shall not have inout or out formal parameters. The called +// functions may use other functions with inout or out parameters internally. + +module NegSem_050402_actual_parameters_124 { + + type component GeneralComp { + } + + function f_eval(out integer p_val) return integer { + p_val := 10; + return 1; + } + + function f_test (@fuzzy integer p_val) { + if (p_val == 12) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_124() runs on GeneralComp { + var integer v_val := 0; + f_test(1 + f_eval(v_val) + v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_124()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_125.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_125.ttcn new file mode 100644 index 0000000..b8235d1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_125.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when lazy variable is passed to inout formal parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to out and inout parameters shall not be references to +// lazy or fuzzy variables. + +module NegSem_050402_actual_parameters_125 { + + type component GeneralComp { + } + + function f_test (inout integer p_val) { + p_val := 10; + } + + testcase TC_NegSem_050402_actual_parameters_125() runs on GeneralComp { + var @lazy integer v_val := 1; + f_test(v_val); + if (v_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_125()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_126.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_126.ttcn new file mode 100644 index 0000000..68a4748 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_126.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when fuzzy variable is passed to inout formal parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to out and inout parameters shall not be references to +// lazy or fuzzy variables. + +module NegSem_050402_actual_parameters_126 { + + type component GeneralComp { + } + + function f_test (inout integer p_val) { + p_val := 10; + } + + testcase TC_NegSem_050402_actual_parameters_126() runs on GeneralComp { + var @fuzzy integer v_val := 1; + f_test(v_val); + if (v_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_126()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_127.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_127.ttcn new file mode 100644 index 0000000..ca5322f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_127.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when lazy variable is passed to out formal parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to out and inout parameters shall not be references to +// lazy or fuzzy variables. + +module NegSem_050402_actual_parameters_127 { + + type component GeneralComp { + } + + function f_test (out integer p_val) { + p_val := 10; + } + + testcase TC_NegSem_050402_actual_parameters_127() runs on GeneralComp { + var @lazy integer v_val := 1; + f_test(v_val); + if (v_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_127()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_128.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_128.ttcn new file mode 100644 index 0000000..c859700 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_128.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when fuzzy variable is passed to out formal parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to out and inout parameters shall not be references to +// lazy or fuzzy variables. + +module NegSem_050402_actual_parameters_128 { + + type component GeneralComp { + } + + function f_test (out integer p_val) { + p_val := 10; + } + + testcase TC_NegSem_050402_actual_parameters_128() runs on GeneralComp { + var @fuzzy integer v_val := 1; + f_test(v_val); + if (v_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_050402_actual_parameters_128()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_129.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_129.ttcn new file mode 100644 index 0000000..0b57e2b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_129.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing record and its field to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_129 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test (inout integer p_val, inout R p_rec) { + p_rec.field1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_129() runs on GeneralComp { + var R v_val := { field1 := 1 }; + f_test(v_val.field1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_129()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_130.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_130.ttcn new file mode 100644 index 0000000..495a62c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_130.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing set and its field to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_130 { + + type component GeneralComp { + } + + type set S { + integer field1 + } + + function f_test (inout integer p_val, inout S p_set) { + p_set.field1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_130() runs on GeneralComp { + var S v_val := { field1 := 1 }; + f_test(v_val.field1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_130()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_131.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_131.ttcn new file mode 100644 index 0000000..d926ee2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_131.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing union and its element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_131 { + + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + function f_test (inout integer p_val, inout U p_un) { + p_un.option1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_131() runs on GeneralComp { + var U v_val := { option1 := 1 }; + f_test(v_val.option1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_131()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_132.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_132.ttcn new file mode 100644 index 0000000..051075d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_132.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing record of and its element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_132 { + + type component GeneralComp { + } + + type record of integer RI; + + function f_test (inout integer p_val, inout RI p_rec) { + p_rec[0] := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_132() runs on GeneralComp { + var RI v_val := { 1 }; + f_test(v_val[0], v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_132()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_133.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_133.ttcn new file mode 100644 index 0000000..59434dd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_133.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing set of and its element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_133 { + + type component GeneralComp { + } + + type set of integer SI; + + function f_test (inout integer p_val, inout SI p_set) { + p_set[0] := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_133() runs on GeneralComp { + var SI v_val := { 1 }; + f_test(v_val[0], v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_133()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_134.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_134.ttcn new file mode 100644 index 0000000..e1fdda9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_134.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing array and its element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_134 { + + type component GeneralComp { + } + + type integer A[2]; + + function f_test (inout integer p_val, inout A p_arr) { + p_arr[0] := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_134() runs on GeneralComp { + var A v_val := { 1, 2 }; + f_test(v_val[0], v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_134()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_135.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_135.ttcn new file mode 100644 index 0000000..5eacd8f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_135.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing anytype value and its element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_135 { + + type component GeneralComp { + } + + function f_test (inout integer p_val, inout anytype p_any) { + p_any.integer := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_135() runs on GeneralComp { + var anytype v_val := { integer := 1 }; + f_test(v_val.integer, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_135()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_136.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_136.ttcn new file mode 100644 index 0000000..cb16f23 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_136.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing record and its sub-elements to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_136 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type record R { + Sub field1 + } + + function f_test (inout integer p_val, inout R p_rec) { + p_rec.field1.subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_136() runs on GeneralComp { + var R v_val := { field1 := { subfield1 := 1 } }; + f_test(v_val.field1.subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_136()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_137.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_137.ttcn new file mode 100644 index 0000000..600988f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_137.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing set and its sub-field to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_137 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type set S { + Sub field1 + } + + function f_test (inout integer p_val, inout S p_set) { + p_set.field1.subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_137() runs on GeneralComp { + var S v_val := { field1 := { subfield1 := 1 } }; + f_test(v_val.field1.subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_137()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_138.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_138.ttcn new file mode 100644 index 0000000..ce078e2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_138.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing union and its sub-element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_138 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type union U { + Sub option1, + charstring option2 + } + + function f_test (inout integer p_val, inout U p_un) { + p_un.option1.subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_138() runs on GeneralComp { + var U v_val := { option1 := { subfield1 := 1 } }; + f_test(v_val.option1.subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_138()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_139.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_139.ttcn new file mode 100644 index 0000000..e9112fb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_139.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing record of and its sub-element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_139 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type record of Sub RS; + + function f_test (inout integer p_val, inout RS p_rec) { + p_rec[0].subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_139() runs on GeneralComp { + var RS v_val := { { subfield1 := 1 } }; + f_test(v_val[0].subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_139()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_140.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_140.ttcn new file mode 100644 index 0000000..85faf59 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_140.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing set of and its sub-element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_140 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type set of Sub SoS; + + function f_test (inout integer p_val, inout SoS p_set) { + p_set[0].subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_140() runs on GeneralComp { + var SoS v_val := { { subfield1 := 1 } }; + f_test(v_val[0].subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_140()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_141.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_141.ttcn new file mode 100644 index 0000000..a2c8986 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_141.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing array and its sub-element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_141 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + type Sub A[2]; + + function f_test (inout integer p_val, inout A p_arr) { + p_arr[0].subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_141() runs on GeneralComp { + var A v_val := { { subfield1 := 1 }, { subfield1 := 2 } }; + f_test(v_val[0].subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_141()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_142.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_142.ttcn new file mode 100644 index 0000000..1d0f7cf --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_142.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing anytype value and its sub-element to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_142 { + + type component GeneralComp { + } + + type record Sub { + integer subfield1 + } + + function f_test (inout integer p_val, inout anytype p_any) { + p_any.Sub.subfield1 := 10; + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_NegSem_050402_actual_parameters_142() runs on GeneralComp { + var anytype v_val := { Sub := { subfield1 := 1 } }; + f_test(v_val.Sub.subfield1, v_val); + } + + control { + execute(TC_NegSem_050402_actual_parameters_142()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn new file mode 100644 index 0000000..bb3e978 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_143.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing distinct union alternatives to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_143 { + + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + function f_test (inout integer p_val, inout charstring p_char) { + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_143() runs on GeneralComp { + var U v_val := { option1 := 1 }; + f_test(v_val.option1, v_val.option2); + } + + control { + execute(TC_NegSem_050402_actual_parameters_143()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn new file mode 100644 index 0000000..3b9110a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_144.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that error is generated when passing distinct union alternatives to inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Whenever a value or template of a record, set, union, record of, set of, array +// and anytype type is passed as an actual parameter to an inout parameter, none of +// the fields or elemens of this structured value or template shall be passed as +// an actual parameter to another inout parameter of the same parameterized TTCN-3 +// object. This restriction applies recursively to all sub-elements of the structured +// value or template in any level of nesting. + +module NegSem_050402_actual_parameters_144 { + + type component GeneralComp { + } + + function f_test (inout integer p_val, inout charstring p_char) { + setverdict(pass); + } + + testcase TC_NegSem_050402_actual_parameters_144() runs on GeneralComp { + var anytype v_val := { integer := 1 }; + f_test(v_val.integer, v_val.charstring); + } + + control { + execute(TC_NegSem_050402_actual_parameters_144()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn new file mode 100644 index 0000000..b21eb90 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_145.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the fourth part of the Example 3 produces the expected error + ** @verdict pass reject + ***************************************************/ + +module NegSem_050402_actual_parameters_145 { + + type component GeneralComp { + } + type record of integer RoI; + + function f_testReferences (inout RoI p_roi, inout integer p_elem) { + } + + testcase TC_NegSem_050402_actual_parameters_145() runs on GeneralComp { + var RoI v_roi := { 0, 1, 2, 3, 4, 5 }; + f_testReferences(v_roi, v_roi[2]); // produces an error as elements of v_roi are not allowed + // to be passed by reference if the parent structure (v_roi) is passed by reference too. + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_145()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn new file mode 100644 index 0000000..240fa52 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_146.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn new file mode 100644 index 0000000..350234d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_147.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn new file mode 100644 index 0000000..b60104b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_148.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn new file mode 100644 index 0000000..f5a3334 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_149.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn new file mode 100644 index 0000000..7306b4b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_150.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn new file mode 100644 index 0000000..4ea45a0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_151.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn new file mode 100644 index 0000000..df2f86d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_152.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn new file mode 100644 index 0000000..956336d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_153.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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_147 { + + 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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn new file mode 100644 index 0000000..cd7ff4f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_154.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @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 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_test(out integer p_val) { + p_val := 9 + } + + 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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn new file mode 100644 index 0000000..ce04230 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_155.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn new file mode 100644 index 0000000..07678df --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_156.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn new file mode 100644 index 0000000..8fe40e5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_157.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn new file mode 100644 index 0000000..1a46324 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_158.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn new file mode 100644 index 0000000..96ff445 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_159.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn new file mode 100644 index 0000000..8026262 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_160.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn new file mode 100644 index 0000000..9c74f45 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_161.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 521 + ** @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_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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn new file mode 100644 index 0000000..6a25e41 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_162.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn new file mode 100644 index 0000000..b0b9a0f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_163.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn new file mode 100644 index 0000000..fd42268 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_164.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn new file mode 100644 index 0000000..1985b08 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_165.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn new file mode 100644 index 0000000..5973cc0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_166.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn new file mode 100644 index 0000000..b843808 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_167.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn new file mode 100644 index 0000000..e88b337 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_168.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn new file mode 100644 index 0000000..4e1f197 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_169.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn new file mode 100644 index 0000000..804c0c4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_170.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn new file mode 100644 index 0000000..db3c329 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_171.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn new file mode 100644 index 0000000..231ef85 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_172.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn new file mode 100644 index 0000000..e94404d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_173.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn new file mode 100644 index 0000000..151a22a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_174.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn new file mode 100644 index 0000000..3880801 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_175.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn new file mode 100644 index 0000000..62719ee --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_176.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn new file mode 100644 index 0000000..6d2f75b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_177.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn new file mode 100644 index 0000000..0bcf34e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_178.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn new file mode 100644 index 0000000..16fc57e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_179.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn new file mode 100644 index 0000000..9829119 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_180.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn new file mode 100644 index 0000000..ff42615 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_181.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn new file mode 100644 index 0000000..6905fa0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_182.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_183.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_183.ttcn new file mode 100644 index 0000000..4d7f551 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSem_050402_actual_parameters_183.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that parameter reuse is not allowed in the mixed notation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction o +// If the mixed notation is used, ... the parameters given in assignment notation shall not assign parameters +// that already have an actual parameter given in list notation. + +module NegSem_050402_actual_parameters_183 { + + type component GeneralComp { + } + + function f_mixed (out integer p_par1, in integer p_par2 := 2, inout integer p_par3) { + p_par1 := 1 + p_par2; + if (p_par2 == 2 and p_par3 == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_NegSem_050402_actual_parameters_183() runs on GeneralComp { + var integer v := 0; + f_mixed(-, 5, p_par3 := v, p_par2 := 2); + + setverdict(pass); + } + + control { + execute(TC_NegSem_050402_actual_parameters_183()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSyn_050402_actual_parameters_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSyn_050402_actual_parameters_001.ttcn new file mode 100644 index 0000000..b245292 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/NegSyn_050402_actual_parameters_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in mixed notation, no value list notation can be used following the first assignment notation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction o +// If the mixed notation is used, no value list notation shall be used following the first assignment notation + +module NegSyn_050402_actual_parameters_001 { + + type component GeneralComp { + } + + function f_mixed (out integer p_par1, in integer p_par2 := 2, inout integer p_par3) { + p_par1 := 1 + p_par2; + if (p_par2 == 2 and p_par3 == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_NegSyn_050402_actual_parameters_001() runs on GeneralComp { + var integer v := 0; + f_mixed(-,p_par2 := 2, v); + + setverdict(pass); + } + + control { + execute(TC_NegSyn_050402_actual_parameters_001()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn new file mode 100644 index 0000000..d71b688 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_001.ttcn @@ -0,0 +1,85 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.2, Ensure that the IUT accepts allowed assignments of actual parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_050402_actual_parameters_001 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + + +type component GeneralComp { + +} + +testcase TC_Sem_050402_actual_parameters_001 ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + var template MyRecord ReceivedRecord := {p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate}; + + if ( match(ExpectedMatch, ReceivedRecord)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + var MyRecord DefaultValues := { + field1 := 0, + field2 := true, + field3 := null, + field4 := e_black, + field5 := 1 //any number can be used here to correspond with ? matching + } + + var MyRecord ModifiedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + var MyRecord PartlyModifiedValues := { + field1 := 0, + field2 := false, + field3 := null, + field4 := e_white, + field5 := 1 + } + +//possible ways of invoking assignment of actual parameters + execute(TC_Sem_050402_actual_parameters_001(DefaultValues)); + execute(TC_Sem_050402_actual_parameters_001(DefaultValues,-,-,-,-,-)); + execute(TC_Sem_050402_actual_parameters_001(ExpectedMatch:=DefaultValues)); + + execute(TC_Sem_050402_actual_parameters_001(ModifiedValues,1,false,1,e_white,1)); + execute(TC_Sem_050402_actual_parameters_001(p_integerTemplate:=1,p_boolean:=false,p_enumerated:=e_white,p_integer:=1,p_address:=1,ExpectedMatch:=ModifiedValues)); + + execute(TC_Sem_050402_actual_parameters_001(PartlyModifiedValues,-,false,-,e_white,-)); + execute(TC_Sem_050402_actual_parameters_001(p_boolean:=false,p_enumerated:=e_white,ExpectedMatch:=PartlyModifiedValues)); + +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn new file mode 100644 index 0000000..d54c293 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_002.ttcn @@ -0,0 +1,85 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4.2, Ensure that the IUT accepts nested assignment of actual parameters. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_002 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + +template MyRecord m_parametrizedTemplate1 + ( + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) := { + field1 := p_integer, + field2 := p_boolean, + field3 := p_address, + field4 := p_enumerated, + field5 := p_integerTemplate +} + + +template MyRecord m_parametrizedTemplate2 + ( + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) := { + field1 := p_integer+1, //this line is different from the previous template + field2 := not p_boolean, //this line is different from the previous template + field3 := p_address, + field4 := p_enumerated, + field5 := p_integerTemplate +} + + + +type component GeneralComp { + +} + + +testcase TC_Sem_050402_actual_parameters_002(template MyRecord p_templateSelection) runs on GeneralComp { + + + var MyRecord ExpectedValues := { + field1 := 1, + field2 := false, + field3 := 1, + field4 := e_white, + field5 := 1 + } + + if (match(ExpectedValues, p_templateSelection)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + execute(TC_Sem_050402_actual_parameters_002(m_parametrizedTemplate1(1,false,1,e_white,1)) ); + execute(TC_Sem_050402_actual_parameters_002(m_parametrizedTemplate2(0,true,1,e_white,1)) ); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn new file mode 100644 index 0000000..b2d5928 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_003.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_003 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_003() runs on GeneralComp { + f_test(1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_003()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_004.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_004.ttcn new file mode 100644 index 0000000..8302d3e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_004 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + function f_test(in integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_004() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_004()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_005.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_005.ttcn new file mode 100644 index 0000000..17237c7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_005.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_005 { + + type component GeneralComp { + } + + const integer c_val := 3; + + function f_test(in integer p_val) { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_005() runs on GeneralComp { + f_test(c_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_005()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_006.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_006.ttcn new file mode 100644 index 0000000..a7fc7d8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_006.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_006 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_006() runs on GeneralComp { + var integer v_val := 4; + f_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_006()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_007.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_007.ttcn new file mode 100644 index 0000000..aa0b747 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_007.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_007 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + function f_test(in integer p_val) { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_007() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_007()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_008.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_008.ttcn new file mode 100644 index 0000000..471452c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_008.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_008 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_008() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_008()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_009.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_009.ttcn new file mode 100644 index 0000000..a06e9e8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_009.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_009 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_009() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_009()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_010.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_010.ttcn new file mode 100644 index 0000000..0f1c7b3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_010.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_010 { + + type component GeneralComp { + } + + function f_test(in integer p_val) { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_010() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_010()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_011.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_011.ttcn new file mode 100644 index 0000000..0fbce20 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_011.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_011 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + function f_test(in integer p_val) { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_011() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_011()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_012.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_012.ttcn new file mode 100644 index 0000000..ecc0036 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_012.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_012 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_012() runs on GeneralComp { + if (match(12, m_test(1))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_012()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_013.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_013.ttcn new file mode 100644 index 0000000..a729188 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_013.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_013 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_013() runs on GeneralComp { + if (match(13, m_test(PX_VAL))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_013()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_014.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_014.ttcn new file mode 100644 index 0000000..92eb7df --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_014.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_014 { + + type component GeneralComp { + } + + const integer c_val := 3; + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_014() runs on GeneralComp { + if (match(14, m_test(c_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_014()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_015.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_015.ttcn new file mode 100644 index 0000000..df8dfb7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_015.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_015 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_015() runs on GeneralComp { + var integer v_val := 4; + if (match(15, m_test(v_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_015()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_016.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_016.ttcn new file mode 100644 index 0000000..6f2d5e8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_016.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_016 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_016() runs on GeneralComp { + if (match(16, m_test(f_ret()))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_016()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_017.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_017.ttcn new file mode 100644 index 0000000..da9eb2e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_017.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_017 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 11 + p_val; + + function f_caller(in integer p_val) { + if (match(17, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_Sem_050402_actual_parameters_017() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_017()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_018.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_018.ttcn new file mode 100644 index 0000000..313c1b0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_018.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_018 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 11 + p_val; + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + if (match(18, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_Sem_050402_actual_parameters_018() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_018()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_019.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_019.ttcn new file mode 100644 index 0000000..69bd4eb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_019.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_019 { + + type component GeneralComp { + } + + template integer m_test(in integer p_val) := 11 + p_val; + + function f_caller(inout integer p_val) { + if (match(19, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_019() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_019()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_020.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_020.ttcn new file mode 100644 index 0000000..e20bb28 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_020.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal value parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_020 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + template integer m_test(in integer p_val) := 11 + p_val; + + testcase TC_Sem_050402_actual_parameters_020() runs on GeneralComp { + var integer v_val := 5; + if (match(20, m_test(10 + f_ret() - v_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_020()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_021.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_021.ttcn new file mode 100644 index 0000000..9b358c0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_021.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_021 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_021() runs on GeneralComp { + t.start; + a_test(1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_021()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_022.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_022.ttcn new file mode 100644 index 0000000..54abd2d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_022.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_022 { + + type component GeneralComp { + timer t := 0.0; + } + + modulepar integer PX_VAL := 2; + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_022() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_022()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_023.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_023.ttcn new file mode 100644 index 0000000..ec4e55d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_023.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_023 { + + type component GeneralComp { + timer t := 0.0; + } + + const integer c_val := 3; + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_023() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_023()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_024.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_024.ttcn new file mode 100644 index 0000000..ab1d2fb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_024.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_024 { + + 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); } + } + } + + testcase TC_Sem_050402_actual_parameters_024() runs on GeneralComp { + var integer v_val := 4; + t.start; + a_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_024()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_025.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_025.ttcn new file mode 100644 index 0000000..68624f5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_025.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_025 { + + type component GeneralComp { + timer t := 0.0; + } + + function f_ret() return integer { + return 5; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_025() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_025()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_026.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_026.ttcn new file mode 100644 index 0000000..52ac93a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_026.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_026 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in integer p_val) runs on GeneralComp{ + t.start; + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_026() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_026()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_027.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_027.ttcn new file mode 100644 index 0000000..f83c98b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_027.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_027 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(out integer p_val) runs on GeneralComp { + t.start; + p_val := 7; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_027() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_027()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_028.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_028.ttcn new file mode 100644 index 0000000..9c47a7d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_028.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_028 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(inout integer p_val) runs on GeneralComp { + t.start; + a_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_028() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_028()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_029.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_029.ttcn new file mode 100644 index 0000000..fabb052 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_029.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_029 { + + type component GeneralComp { + timer t := 0.0; + } + + function f_ret() return integer { + return 4; + } + + altstep a_test(integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_029() runs on GeneralComp { + var integer v_val := 5; + t.start; + a_test(10 + f_ret() - v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_029()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_030.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_030.ttcn new file mode 100644 index 0000000..a95a47a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_030.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_030 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_030(in integer p_val) runs on GeneralComp { + if (p_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_030(1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_031.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_031.ttcn new file mode 100644 index 0000000..8639f49 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_031.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_031 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + testcase TC_Sem_050402_actual_parameters_031(in integer p_val) runs on GeneralComp { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_031(PX_VAL)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_032.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_032.ttcn new file mode 100644 index 0000000..99015f1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_032.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_032 { + + type component GeneralComp { + } + + const integer c_val := 3; + + testcase TC_Sem_050402_actual_parameters_032(in integer p_val) runs on GeneralComp { + if (p_val == 3) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_032(c_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_033.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_033.ttcn new file mode 100644 index 0000000..4e3a2a3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_033.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_033 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_033(in integer p_val) runs on GeneralComp { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 4; + execute(TC_Sem_050402_actual_parameters_033(v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_034.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_034.ttcn new file mode 100644 index 0000000..164524c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_034.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_034 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + testcase TC_Sem_050402_actual_parameters_034(in integer p_val) runs on GeneralComp { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_034(f_ret())); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_035.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_035.ttcn new file mode 100644 index 0000000..1eea0bf --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_035.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_035 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_035(in integer p_val) runs on GeneralComp { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + execute(TC_Sem_050402_actual_parameters_035(p_val)); // tested parameter passing + } + + control { + f_caller(6); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_036.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_036.ttcn new file mode 100644 index 0000000..0bf4b35 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_036.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_036 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_036(in integer p_val) runs on GeneralComp { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + execute(TC_Sem_050402_actual_parameters_036(p_val)); // tested parameter passing + } + + + control { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_037.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_037.ttcn new file mode 100644 index 0000000..9029909 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_037.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_037 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_037(in integer p_val) runs on GeneralComp { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + execute(TC_Sem_050402_actual_parameters_037(p_val)); // tested parameter passing + } + + control { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_038.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_038.ttcn new file mode 100644 index 0000000..c9d8196 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_038.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_038 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + testcase TC_Sem_050402_actual_parameters_038(in integer p_val) runs on GeneralComp { + if (p_val == 9) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 5; + execute(TC_Sem_050402_actual_parameters_038(10 + f_ret() - v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_039.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_039.ttcn new file mode 100644 index 0000000..c6a3059 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_039.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_039 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_039() runs on GeneralComp { + var integer v_val := 4; + f_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_039()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_040.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_040.ttcn new file mode 100644 index 0000000..e21fed5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_040.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_040 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_040() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_040()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_041.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_041.ttcn new file mode 100644 index 0000000..d1b6d06 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_041.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_041 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_041() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_041()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_042.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_042.ttcn new file mode 100644 index 0000000..c967413 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_042.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_042 { + + type component GeneralComp { + } + + function f_test(inout integer p_val) { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_042() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_042()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_043.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_043.ttcn new file mode 100644 index 0000000..2c37a08 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_043.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variable element reference can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_043 { + + 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_Sem_050402_actual_parameters_043() runs on GeneralComp { + var R v_val := { field1 := 10 }; + f_test(v_val.field1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_043()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_044.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_044.ttcn new file mode 100644 index 0000000..71cd9eb --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_044.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal value parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_044 { + + 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 R p_param) { + f_test(p_param.field1); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_044() runs on GeneralComp { + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_044()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_045.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_045.ttcn new file mode 100644 index 0000000..1060f25 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_045.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_045 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_045() runs on GeneralComp { + var integer v_val := 4; + t.start; + a_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_045()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_046.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_046.ttcn new file mode 100644 index 0000000..a0e9f3e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_046.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_046 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in integer p_val) runs on GeneralComp{ + t.start; + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_046() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_046()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_047.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_047.ttcn new file mode 100644 index 0000000..8831017 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_047.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_047 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(out integer p_val) runs on GeneralComp { + t.start; + p_val := 7; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_047() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_047()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_048.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_048.ttcn new file mode 100644 index 0000000..cceb40c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_048.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_048 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout integer p_val) runs on GeneralComp { + []t.timeout { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(inout integer p_val) runs on GeneralComp { + t.start; + a_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_048() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_048()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_049.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_049.ttcn new file mode 100644 index 0000000..a190721 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_049.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variable element reference can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_049 { + + 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 == 10) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_049() runs on GeneralComp { + var R v_val := { field1 := 10 }; + t.start; + a_test(v_val.field1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_049()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_050.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_050.ttcn new file mode 100644 index 0000000..4006764 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_050.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal value parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_050 { + + 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_caller(in R p_param) runs on GeneralComp { + a_test(p_param.field1); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_050() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_050()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_051.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_051.ttcn new file mode 100644 index 0000000..a787cd0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_051.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_051 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_051(inout integer p_val) runs on GeneralComp { + if (p_val == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 4; + execute(TC_Sem_050402_actual_parameters_051(v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_052.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_052.ttcn new file mode 100644 index 0000000..f2ae46d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_052.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_052 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_052(inout integer p_val) runs on GeneralComp { + if (p_val == 6) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + execute(TC_Sem_050402_actual_parameters_052(p_val)); // tested parameter passing + } + + control { + f_caller(6); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_053.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_053.ttcn new file mode 100644 index 0000000..1469fe5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_053.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_053 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_053(inout integer p_val) runs on GeneralComp { + if (p_val == 7) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + execute(TC_Sem_050402_actual_parameters_053(p_val)); // tested parameter passing + } + + + control { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_054.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_054.ttcn new file mode 100644 index 0000000..5a38d94 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_054.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_054 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_054(inout integer p_val) runs on GeneralComp { + if (p_val == 8) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + execute(TC_Sem_050402_actual_parameters_054(p_val)); // tested parameter passing + } + + control { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_055.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_055.ttcn new file mode 100644 index 0000000..831f90d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_055.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variable element reference can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_055 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_Sem_050402_actual_parameters_055(inout integer p_val) runs on GeneralComp { + if (p_val == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var R v_val := { field1 := 10 }; + execute(TC_Sem_050402_actual_parameters_055(v_val.field1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_056.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_056.ttcn new file mode 100644 index 0000000..16d38d4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_056.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal value parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_056 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_Sem_050402_actual_parameters_056(inout integer p_val) runs on GeneralComp { + if (p_val == 11) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in R p_param) { + execute(TC_Sem_050402_actual_parameters_056(p_param.field1)); // tested parameter passing + } + + control { + f_caller({field1 := 11 }); + + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_057.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_057.ttcn new file mode 100644 index 0000000..070429f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_057.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_057 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_057() runs on GeneralComp { + f_test(1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_057()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_058.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_058.ttcn new file mode 100644 index 0000000..ffbb72d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_058.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_058 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + function f_test(in template integer p_val) { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_058() runs on GeneralComp { + f_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_058()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_059.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_059.ttcn new file mode 100644 index 0000000..d614e1a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_059.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_059 { + + type component GeneralComp { + } + + const integer c_val := 3; + + function f_test(in template integer p_val) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_059() runs on GeneralComp { + f_test(c_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_059()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_060.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_060.ttcn new file mode 100644 index 0000000..e12471b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_060.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_060 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(4, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_060() runs on GeneralComp { + var integer v_val := 4; + f_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_060()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_061.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_061.ttcn new file mode 100644 index 0000000..d037364 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_061.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_061 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + function f_test(in template integer p_val) { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_061() runs on GeneralComp { + f_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_061()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_062.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_062.ttcn new file mode 100644 index 0000000..70e46e1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_062.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_062 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(6, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_062() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_062()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_063.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_063.ttcn new file mode 100644 index 0000000..808037a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_063.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_063 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(7, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_063() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_063()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_064.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_064.ttcn new file mode 100644 index 0000000..f90acaa --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_064.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_064 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(8, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + f_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_064() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_064()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_065.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_065.ttcn new file mode 100644 index 0000000..955c403 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_065.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_065 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + function f_test(in template integer p_val) { + if (match(9, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_065() runs on GeneralComp { + var integer v_val := 5; + f_test(10 + f_ret() - v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_065()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_066.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_066.ttcn new file mode 100644 index 0000000..e35c615 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_066.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_066 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + function f_test(in template integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_066() runs on GeneralComp { + f_test(m_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_066()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_067.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_067.ttcn new file mode 100644 index 0000000..47e411b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_067.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_067 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_067() runs on GeneralComp { + var template integer vm_msg := 2; + f_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_067()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_068.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_068.ttcn new file mode 100644 index 0000000..2dd920a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_068.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_068 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_068() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_068()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_069.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_069.ttcn new file mode 100644 index 0000000..8087715 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_069.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_069 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(4, 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 + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_069() 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_Sem_050402_actual_parameters_069()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_070.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_070.ttcn new file mode 100644 index 0000000..c7764e0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_070.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as in formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_070 { + + type component GeneralComp { + } + + function f_test(in template integer p_val) { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_070() 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_Sem_050402_actual_parameters_070()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_071.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_071.ttcn new file mode 100644 index 0000000..3dc597a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_071.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_071 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_071() runs on GeneralComp { + if (match(12, m_test(1))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_071()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_072.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_072.ttcn new file mode 100644 index 0000000..f2b2704 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_072.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_072 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_072() runs on GeneralComp { + if (match(13, m_test(PX_VAL))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_072()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_073.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_073.ttcn new file mode 100644 index 0000000..937fe50 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_073.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_073 { + + type component GeneralComp { + } + + const integer c_val := 3; + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_073() runs on GeneralComp { + if (match(14, m_test(c_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_073()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_074.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_074.ttcn new file mode 100644 index 0000000..fca4a1f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_074.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_074 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_074() runs on GeneralComp { + var integer v_val := 4; + if (match(15, m_test(v_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_074()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_075.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_075.ttcn new file mode 100644 index 0000000..5db18ec --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_075.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_075 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_075() runs on GeneralComp { + if (match(16, m_test(f_ret()))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_075()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_076.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_076.ttcn new file mode 100644 index 0000000..27a9023 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_076.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_076 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + function f_caller(in integer p_val) { + if (match(17, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_Sem_050402_actual_parameters_076() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_076()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_077.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_077.ttcn new file mode 100644 index 0000000..b1c09ad --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_077.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_077 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + if (match(18, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + + testcase TC_Sem_050402_actual_parameters_077() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_077()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_078.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_078.ttcn new file mode 100644 index 0000000..66da53d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_078.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_078 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + function f_caller(inout integer p_val) { + if (match(19, m_test(p_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_078() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_078()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_079.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_079.ttcn new file mode 100644 index 0000000..630f093 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_079.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_079 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + template integer m_test(in template integer p_val) := 11 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_079() runs on GeneralComp { + var integer v_val := 5; + if (match(20, m_test(10 + f_ret() - v_val))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_079()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_080.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_080.ttcn new file mode 100644 index 0000000..a2d45f2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_080.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_080 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + template integer m_test(in template integer p_val) := 5 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_080() runs on GeneralComp { + if (match(6, m_test(m_msg))) { // tested parameter passing + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_050402_actual_parameters_080()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_081.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_081.ttcn new file mode 100644 index 0000000..e0b07ae --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_081.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_081 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 5 + valueof(p_val); + + testcase TC_Sem_050402_actual_parameters_081() 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_Sem_050402_actual_parameters_081()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_082.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_082.ttcn new file mode 100644 index 0000000..d5cf09f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_082.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_082 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 5 + valueof(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_Sem_050402_actual_parameters_082() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_082()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_083.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_083.ttcn new file mode 100644 index 0000000..0fb3b29 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_083.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_083 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 5 + valueof(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_Sem_050402_actual_parameters_083() 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_Sem_050402_actual_parameters_083()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_084.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_084.ttcn new file mode 100644 index 0000000..172a6ac --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_084.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as in formal template parameters of templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_084 { + + type component GeneralComp { + } + + template integer m_test(in template integer p_val) := 5 + valueof(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_Sem_050402_actual_parameters_084() 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_Sem_050402_actual_parameters_084()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_085.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_085.ttcn new file mode 100644 index 0000000..a6191e6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_085.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_085 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_085() runs on GeneralComp { + t.start; + a_test(1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_085()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_086.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_086.ttcn new file mode 100644 index 0000000..6b9aa3a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_086.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_086 { + + type component GeneralComp { + timer t := 0.0; + } + + modulepar integer PX_VAL := 2; + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_086() runs on GeneralComp { + t.start; + a_test(PX_VAL); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_086()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_087.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_087.ttcn new file mode 100644 index 0000000..41c70fa --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_087.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_087 { + + type component GeneralComp { + timer t := 0.0; + } + + const integer c_val := 3; + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_087() runs on GeneralComp { + t.start; + a_test(c_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_087()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_088.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_088.ttcn new file mode 100644 index 0000000..4d3a1b8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_088.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_088 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(4, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_088() runs on GeneralComp { + var integer v_val := 4; + t.start; + a_test(v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_088()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_089.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_089.ttcn new file mode 100644 index 0000000..6b507f1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_089.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_089 { + + type component GeneralComp { + timer t := 0.0; + } + + function f_ret() return integer { + return 5; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_089() runs on GeneralComp { + t.start; + a_test(f_ret()); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_089()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_090.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_090.ttcn new file mode 100644 index 0000000..374240a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_090.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_090 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(6, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in integer p_val) runs on GeneralComp{ + t.start; + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_090() runs on GeneralComp { + f_caller(6); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_090()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_091.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_091.ttcn new file mode 100644 index 0000000..c2b02f1 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_091.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_091 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(7, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(out integer p_val) runs on GeneralComp { + t.start; + p_val := 7; // out parameter shall have a value before we can pass it to a function + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_091() runs on GeneralComp { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_091()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_092.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_092.ttcn new file mode 100644 index 0000000..2278c34 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_092.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_092 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(8, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(inout integer p_val) runs on GeneralComp { + t.start; + a_test(p_val); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_092() runs on GeneralComp { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_092()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_093.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_093.ttcn new file mode 100644 index 0000000..8d2a01f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_093.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_093 { + + type component GeneralComp { + timer t := 0.0; + } + + function f_ret() return integer { + return 4; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(9, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_093() runs on GeneralComp { + var integer v_val := 5; + t.start; + a_test(10 + f_ret() - v_val); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_093()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_094.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_094.ttcn new file mode 100644 index 0000000..795bbd0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_094.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_094 { + + type component GeneralComp { + timer t := 0.0; + } + + template integer m_msg := 1; + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_094() runs on GeneralComp { + t.start; + a_test(m_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_094()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_095.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_095.ttcn new file mode 100644 index 0000000..5c3ebf8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_095.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_095 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_095() runs on GeneralComp { + var template integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_095()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_096.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_096.ttcn new file mode 100644 index 0000000..dfee688 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_096.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_096 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_096() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_096()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_097.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_097.ttcn new file mode 100644 index 0000000..6922285 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_097.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_097 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(4, p_val)) { 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_Sem_050402_actual_parameters_097() 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_Sem_050402_actual_parameters_097()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_098.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_098.ttcn new file mode 100644 index 0000000..424066e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_098.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as in formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_098 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(in template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(5, p_val)) { 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_Sem_050402_actual_parameters_098() 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_Sem_050402_actual_parameters_098()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_099.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_099.ttcn new file mode 100644 index 0000000..c1d6384 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_099.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that literals can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_099 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_099(in template integer p_val) runs on GeneralComp { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_099(1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_100.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_100.ttcn new file mode 100644 index 0000000..58b1e71 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_100.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that module parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_100 { + + type component GeneralComp { + } + + modulepar integer PX_VAL := 2; + + testcase TC_Sem_050402_actual_parameters_100(in template integer p_val) runs on GeneralComp { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_100(PX_VAL)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_101.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_101.ttcn new file mode 100644 index 0000000..75cb456 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_101.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that constants can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_101 { + + type component GeneralComp { + } + + const integer c_val := 3; + + testcase TC_Sem_050402_actual_parameters_101(in template integer p_val) runs on GeneralComp { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_101(c_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_102.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_102.ttcn new file mode 100644 index 0000000..a36b685 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_102.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that variables can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_102 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_102(in template integer p_val) runs on GeneralComp { + if (match(4, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 4; + execute(TC_Sem_050402_actual_parameters_102(v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_103.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_103.ttcn new file mode 100644 index 0000000..c1d19e2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_103.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that function calls can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_103 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 5; + } + + testcase TC_Sem_050402_actual_parameters_103(in template integer p_val) runs on GeneralComp { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_103(f_ret())); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_104.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_104.ttcn new file mode 100644 index 0000000..faf07ab --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_104.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that in value parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_104 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_104(in template integer p_val) runs on GeneralComp { + if (match(6, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in integer p_val) { + execute(TC_Sem_050402_actual_parameters_104(p_val)); // tested parameter passing + } + + control { + f_caller(6); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_105.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_105.ttcn new file mode 100644 index 0000000..4af80ac --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_105.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out value parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_105 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_105(in template integer p_val) runs on GeneralComp { + if (match(7, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(out integer p_val) { + p_val := 7; // out parameter shall have a value before we can pass it to a function + execute(TC_Sem_050402_actual_parameters_105(p_val)); // tested parameter passing + } + + + control { + var integer v_val; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_106.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_106.ttcn new file mode 100644 index 0000000..47892a2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_106.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that inout value parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_106 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_106(in template integer p_val) runs on GeneralComp { + if (match(8, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout integer p_val) { + execute(TC_Sem_050402_actual_parameters_106(p_val)); // tested parameter passing + } + + control { + var integer v_val := 8; + f_caller(v_val); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_107.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_107.ttcn new file mode 100644 index 0000000..51f1314 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_107.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that expressions can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_107 { + + type component GeneralComp { + } + + function f_ret() return integer { + return 4; + } + + testcase TC_Sem_050402_actual_parameters_107(in template integer p_val) runs on GeneralComp { + if (match(9, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var integer v_val := 5; + execute(TC_Sem_050402_actual_parameters_107(10 + f_ret() - v_val)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_108.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_108.ttcn new file mode 100644 index 0000000..73097cc --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_108.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_108 { + + type component GeneralComp { + } + + template integer m_msg := 1; + + testcase TC_Sem_050402_actual_parameters_108(in template integer p_val) runs on GeneralComp { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_108(m_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_109.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_109.ttcn new file mode 100644 index 0000000..e6db40d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_109.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_109 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_109(in template integer p_val) runs on GeneralComp { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var template integer vm_msg := 2; + execute(TC_Sem_050402_actual_parameters_109(vm_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_110.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_110.ttcn new file mode 100644 index 0000000..fc7e1ab --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_110.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_110 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_110(in template integer p_val) runs on GeneralComp { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + execute(TC_Sem_050402_actual_parameters_110(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_111.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_111.ttcn new file mode 100644 index 0000000..f9e6a7b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_111.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_111 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_111(in template integer p_val) runs on GeneralComp { + if (match(4, 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_Sem_050402_actual_parameters_111(p_val)); // tested parameter passing + } + + control { + var template integer vm_val; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_112.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_112.ttcn new file mode 100644 index 0000000..d987ab2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_112.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as in formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters that are passed to in formal template parameters shall be literal +// values, module parameters, constants, variables, value or template returning (external) +// functions, formal value parameters (of in, inout or out parameterization) of the current +// scope or expressions composed of the above, as well as templates, template variables or +// formal template parameters (of in, inout or out parameterization) of the current scope. + +module Sem_050402_actual_parameters_112 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_112(in template integer p_val) runs on GeneralComp { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + execute(TC_Sem_050402_actual_parameters_112(p_val)); // tested parameter passing + } + + control { + var template integer vm_val := 5; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn new file mode 100644 index 0000000..3ac3b8d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_113.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 2; + } + + testcase TC_Sem_050402_actual_parameters_113() runs on GeneralComp { + var template integer vm_msg; + f_test(vm_msg); // tested parameter passing + if (match(2, vm_msg)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_113()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn new file mode 100644 index 0000000..03e9abf --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_114.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + } + + function f_test(out template integer p_val) { + p_val := 0; + } + + function f_caller(in template integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_050402_actual_parameters_114() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_114()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn new file mode 100644 index 0000000..7e9ceb5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_115.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 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 + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_050402_actual_parameters_115() 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_Sem_050402_actual_parameters_115()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn new file mode 100644 index 0000000..8588923 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_116.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + function f_test(out template integer p_val) { + p_val := 0; + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + if (match(0, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_050402_actual_parameters_116() 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_Sem_050402_actual_parameters_116()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn new file mode 100644 index 0000000..05a248d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_117.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.1 + ** @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 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 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; + } + + testcase TC_Sem_050402_actual_parameters_117() runs on GeneralComp { + var template 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_Sem_050402_actual_parameters_117()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn new file mode 100644 index 0000000..409a0af --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_118.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal template 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 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 { + } + + type record R { + integer field1 + } + + function f_test(out template integer p_val) { + p_val := ?; + } + + function f_caller(in template R p_param) { + f_test(p_param.field1); // tested parameter passing + if (match( { field1 := 0 }, p_param)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_118() runs on GeneralComp { + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_118()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn new file mode 100644 index 0000000..dcafcb9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_119.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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_Sem_050402_actual_parameters_119() runs on GeneralComp { + var template 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_Sem_050402_actual_parameters_119()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn new file mode 100644 index 0000000..10605e0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_120.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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 template 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_Sem_050402_actual_parameters_120() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_120()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn new file mode 100644 index 0000000..c13a819 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_121.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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 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 + if (match(0 , p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_050402_actual_parameters_121() 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_Sem_050402_actual_parameters_121()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn new file mode 100644 index 0000000..5b38fd2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_122.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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 template 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_Sem_050402_actual_parameters_122() 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_Sem_050402_actual_parameters_122()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn new file mode 100644 index 0000000..81f2be5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_123.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + 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_Sem_050402_actual_parameters_123() runs on GeneralComp { + var template 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_Sem_050402_actual_parameters_123()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn new file mode 100644 index 0000000..080bb64 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_124.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal template 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 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 { + + 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 template 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_Sem_050402_actual_parameters_124() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_124()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn new file mode 100644 index 0000000..7b89c52 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_125.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_125(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + control { + var template integer vm_msg := 2; + execute(TC_Sem_050402_actual_parameters_125(vm_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn new file mode 100644 index 0000000..10bcbff --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_126.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_126(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(in template integer p_val) { + execute(TC_Sem_050402_actual_parameters_126(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn new file mode 100644 index 0000000..1d078d0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_127.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_127(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(out template integer p_val) { + execute(TC_Sem_050402_actual_parameters_127(p_val)); // tested parameter passing + } + + control { + var template integer vm_val; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn new file mode 100644 index 0000000..2763418 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_128.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_128(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(inout template integer p_val) { + execute(TC_Sem_050402_actual_parameters_128(p_val)); // tested parameter passing + } + + control { + var template integer vm_val := 5; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn new file mode 100644 index 0000000..83b339d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_129.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @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 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 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_Sem_050402_actual_parameters_129(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + control { + var template R v_val := { field1 := 10 }; + execute(TC_Sem_050402_actual_parameters_129(v_val.field1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn new file mode 100644 index 0000000..91c3e20 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_130.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal template 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 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 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + testcase TC_Sem_050402_actual_parameters_130(out template integer p_val) runs on GeneralComp { + p_val := ?; + setverdict(pass); + } + + function f_caller(in template R p_param) { + execute(TC_Sem_050402_actual_parameters_130(p_param.field1)); // tested parameter passing + } + + control { + var template R mw_t := { field1 := 1 }; + f_caller(mw_t); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_131.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_131.ttcn new file mode 100644 index 0000000..db8b6fe --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_131.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_131 { + + type component GeneralComp { + } + + function f_test(inout template integer p_val) { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_131() runs on GeneralComp { + var template integer vm_msg := 2; + f_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_131()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_132.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_132.ttcn new file mode 100644 index 0000000..785e018 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_132.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_132 { + + type component GeneralComp { + } + + function f_test(inout template integer p_val) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_132() runs on GeneralComp { + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_132()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_133.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_133.ttcn new file mode 100644 index 0000000..f6c8363 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_133.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_133 { + + type component GeneralComp { + } + + function f_test(inout template integer p_val) { + if (match(4, 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 + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_133() 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_Sem_050402_actual_parameters_133()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_134.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_134.ttcn new file mode 100644 index 0000000..efb3a45 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_134.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_134 { + + type component GeneralComp { + } + + function f_test(inout template integer p_val) { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + f_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_134() 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_Sem_050402_actual_parameters_134()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn new file mode 100644 index 0000000..fa812ec --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_135.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that template variable element reference can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_135 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + 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(present) R v_val := { field1 := 10 }; + f_test(v_val.field1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_135()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn new file mode 100644 index 0000000..8bc3c76 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_136.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal template parameters of functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_136 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + function f_test(inout template(present) integer p_val) { + if (match(11, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template(present) R p_param) { + f_test(p_param.field1); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_136() runs on GeneralComp { + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_136()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_137.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_137.ttcn new file mode 100644 index 0000000..f9d2b23 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_137.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_137 { + + type component GeneralComp { + timer t := 0.0; + } + + 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_Sem_050402_actual_parameters_137() runs on GeneralComp { + var template integer vm_msg := 2; + t.start; + a_test(vm_msg); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_137()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_138.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_138.ttcn new file mode 100644 index 0000000..af9e1fa --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_138.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_138 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + function f_caller(in template integer p_val) runs on GeneralComp { + a_test(p_val); // tested parameter passing + } + + + testcase TC_Sem_050402_actual_parameters_138() runs on GeneralComp { + t.start; + f_caller(3); // this parameter passing is not a subject of the test + } + + control { + execute(TC_Sem_050402_actual_parameters_138()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_139.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_139.ttcn new file mode 100644 index 0000000..f1772f5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_139.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_139 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(4, p_val)) { 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_Sem_050402_actual_parameters_139() 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_Sem_050402_actual_parameters_139()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_140.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_140.ttcn new file mode 100644 index 0000000..6c41741 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_140.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_140 { + + type component GeneralComp { + timer t := 0.0; + } + + altstep a_test(inout template integer p_val) runs on GeneralComp { + []t.timeout { + if (match(5, p_val)) { 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_Sem_050402_actual_parameters_140() 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_Sem_050402_actual_parameters_140()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn new file mode 100644 index 0000000..70b26a4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_141.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that template variable element reference can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_141 { + + type component GeneralComp { + timer t := 0.0; + } + + type record R { + integer field1 + } + + altstep a_test(inout template(present) integer p_val) runs on GeneralComp { + []t.timeout { + if (match(10, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_050402_actual_parameters_141() runs on GeneralComp { + var template(present) R v_val := { field1 := 10 }; + t.start; + a_test(v_val.field1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_141()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn new file mode 100644 index 0000000..9c2d1cc --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_142.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal template parameters of altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_142 { + + type component GeneralComp { + timer t := 0.0; + } + + type record R { + integer field1 + } + + 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(present) R p_param) runs on GeneralComp { + a_test(p_param.field1); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_142() runs on GeneralComp { + t.start; + f_caller({field1 := 11 }); + } + + control { + execute(TC_Sem_050402_actual_parameters_142()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_143.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_143.ttcn new file mode 100644 index 0000000..d6bff3a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_143.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template variables can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_143 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_143(inout template integer p_val) runs on GeneralComp { + if (match(2, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + var template integer vm_msg := 2; + execute(TC_Sem_050402_actual_parameters_143(vm_msg)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_144.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_144.ttcn new file mode 100644 index 0000000..6ec7d68 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_144.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template in parameters can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_144 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_144(inout template integer p_val) runs on GeneralComp { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(in template integer p_val) { + execute(TC_Sem_050402_actual_parameters_144(p_val)); // tested parameter passing + } + + control { + f_caller(3); // this parameter passing is not a subject of the test + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_145.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_145.ttcn new file mode 100644 index 0000000..832d5b4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_145.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template out parameters can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_145 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_145(inout template integer p_val) runs on GeneralComp { + if (match(4, 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_Sem_050402_actual_parameters_145(p_val)); // tested parameter passing + } + + control { + var template integer vm_val; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_146.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_146.ttcn new file mode 100644 index 0000000..259532e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_146.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that template inout parameters can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_146 { + + type component GeneralComp { + } + + testcase TC_Sem_050402_actual_parameters_146(inout template integer p_val) runs on GeneralComp { + if (match(5, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + function f_caller(inout template integer p_val) { + execute(TC_Sem_050402_actual_parameters_146(p_val)); // tested parameter passing + } + + control { + var template integer vm_val := 5; + f_caller(vm_val); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn new file mode 100644 index 0000000..e803bae --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_147.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that template variable element reference can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_147 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + 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(present) R v_val := { field1 := 10 }; + execute(TC_Sem_050402_actual_parameters_147(v_val.field1)); // tested parameter passing + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn new file mode 100644 index 0000000..efd495e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_148.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that reference to elements of formal value parameters can be used as inout formal template parameters of test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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 Sem_050402_actual_parameters_148 { + + type component GeneralComp { + } + + type record R { + integer field1 + } + + 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(present) R p_param) { + execute(TC_Sem_050402_actual_parameters_148(p_param.field1)); // tested parameter passing + } + + control { + f_caller({field1 := 11 }); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_149.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_149.ttcn new file mode 100644 index 0000000..99abd4e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_149.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of in formal value parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_149 { + + 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); } + } + + testcase TC_Sem_050402_actual_parameters_149() runs on GeneralComp { + var R v_rec := { + field1 := 1, + field2 := { + subfield1 := 2, + subfield2 := 3 + } + } + f_test(v_rec.field2.subfield1); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_149()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_150.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_150.ttcn new file mode 100644 index 0000000..6179689 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_150.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of in formal template parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_150 { + + type component GeneralComp { + } + + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional + } + + template R mw_rec := { + field1 := 1, + field2 := ? + } + + function f_test(in template integer p_val) { + if (match(255, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_150() runs on GeneralComp { + f_test(mw_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + } + + control { + execute(TC_Sem_050402_actual_parameters_150()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_151.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_151.ttcn new file mode 100644 index 0000000..2fd19b6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_151.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of out formal value parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_151 { + + type component GeneralComp { + } + + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional + } + + function f_test(out integer p_val) { + p_val := 10; + } + + testcase TC_Sem_050402_actual_parameters_151() runs on GeneralComp { + var R v_rec := { + field1 := 1, + field2 := { + subfield1 := 2, + subfield2 := 3 + } + }; + f_test(v_rec.field2.subfield1); // tested parameter passing + if (v_rec.field2.subfield1 == 10) { setverdict(pass); } + else { setverdict(fail); } + + } + + control { + execute(TC_Sem_050402_actual_parameters_151()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_152.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_152.ttcn new file mode 100644 index 0000000..cf9600d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_152.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of out formal template parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_152 { + + 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; + } + + testcase TC_Sem_050402_actual_parameters_152() runs on GeneralComp { + var template R v_rec := { + field1 := 1, + field2 := ? + }; + f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + if (match(valueof(v_rec.field2.subfield1), 10) and match(0, v_rec.field2.subfield2)) { setverdict(pass); } + else { setverdict(fail); } + + } + + control { + execute(TC_Sem_050402_actual_parameters_152()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_153.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_153.ttcn new file mode 100644 index 0000000..512bc7e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_153.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of inout formal value parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_153 { + + type component GeneralComp { + } + + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional + } + + function f_test(inout integer p_val) { + if (p_val == 2) { setverdict(pass); } + else { setverdict(fail); } + p_val := 10; + } + + testcase TC_Sem_050402_actual_parameters_153() runs on GeneralComp { + var R v_rec := { + field1 := 1, + field2 := { + subfield1 := 2, + subfield2 := 3 + } + }; + f_test(v_rec.field2.subfield1); // tested parameter passing + if (v_rec.field2.subfield1 == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_153()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn new file mode 100644 index 0000000..c33760f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_154.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.4.2, verify that referencing rules are correctly applied to actual parameters of inout formal template parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_154 { + + type component GeneralComp { + } + + type record R { + integer field1, + record { + integer subfield1, + integer subfield2 + } field2 optional + } + + 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(present) R v_rec := { + field1 := 1, + field2 := ? + }; + f_test(v_rec.field2.subfield1); // tested parameter passing (using referencing rules specified at 15.6.2) + if (match(valueof(v_rec.field2.subfield1), 10) and match(0, v_rec.field2.subfield2)) { setverdict(pass); } + else { setverdict(fail); } + + } + + control { + execute(TC_Sem_050402_actual_parameters_154()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_155.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_155.ttcn new file mode 100644 index 0000000..ac23c47 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_155.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out formal parameters are passed to actual parameter in correct (list notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The values of out formal parameters are passed to the actual parameters in the same +// order as is the order of formal parameters in the definition of the parameterized +// TTCN-3 object. + +module Sem_050402_actual_parameters_155 { + + type component GeneralComp { + } + + function f_test(out integer p_val1, out integer p_val2, out integer p_val3) { + p_val1 := 1; + p_val2 := 2; + p_val3 := 3; + } + + testcase TC_Sem_050402_actual_parameters_155() runs on GeneralComp { + var integer v_val; + f_test(v_val, v_val, v_val); // tested parameter passing + if (v_val == 3) { setverdict(pass); } + else { setverdict(fail); } + + } + + control { + execute(TC_Sem_050402_actual_parameters_155()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_156.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_156.ttcn new file mode 100644 index 0000000..9915ba2 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_156.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that out formal parameters are passed to actual parameter in correct (assignment notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The values of out formal parameters are passed to the actual parameters in the same +// order as is the order of formal parameters in the definition of the parameterized +// TTCN-3 object. + +module Sem_050402_actual_parameters_156 { + + type component GeneralComp { + } + + function f_test(out integer p_val1, out integer p_val2, out integer p_val3) { + p_val1 := 1; + p_val2 := 2; + p_val3 := 3; + } + + testcase TC_Sem_050402_actual_parameters_156() runs on GeneralComp { + var integer v_val; + f_test(p_val3 := v_val, p_val2 := v_val, p_val1 := v_val); // tested parameter passing + if (v_val == 3) { setverdict(pass); } + else { setverdict(fail); } + + } + + control { + execute(TC_Sem_050402_actual_parameters_156()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_157.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_157.ttcn new file mode 100644 index 0000000..43fac9c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_157.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that component timers can be passed to timer parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_157 { + + type component GeneralComp { + timer tc_tmr := 5.0; + } + + function f_test(timer t_par) { + t_par.stop; + } + + testcase TC_Sem_050402_actual_parameters_157() runs on GeneralComp { + tc_tmr.start; + f_test(tc_tmr); // tested parameter passing + if (not tc_tmr.running) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_157()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_158.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_158.ttcn new file mode 100644 index 0000000..07ba9f0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_158.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that component timers can be passed to timer parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_158 { + + type component GeneralComp { + } + + function f_test(timer t_par) { + t_par.stop; + } + + testcase TC_Sem_050402_actual_parameters_158() runs on GeneralComp { + timer t_tmr := 5.0; + t_tmr.start; + f_test(t_tmr); // tested parameter passing + if (not t_tmr.running) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_158()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_159.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_159.ttcn new file mode 100644 index 0000000..872776e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_159.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that timer parameters can be passed to timer parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_159 { + + type component GeneralComp { + } + + function f_test(timer t_par) { + t_par.stop; + } + + function f_caller(timer t_par) { + f_test(t_par); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_159() runs on GeneralComp { + timer t_tmr := 5.0; + t_tmr.start; + f_caller(t_tmr); // this parameter passing is not a subject of the test + if (not t_tmr.running) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_159()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_160.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_160.ttcn new file mode 100644 index 0000000..c8f1c96 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_160.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that component ports can be passed to port parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_160 { + + type port IntPort message { + inout integer; + } + + type component GeneralComp { + port IntPort p; + } + + function f_test(IntPort p_port) { + p_port.stop; + } + + testcase TC_Sem_050402_actual_parameters_160() runs on GeneralComp { + f_test(p); // tested parameter passing + if (p.checkstate("Stopped")) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_160()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_161.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_161.ttcn new file mode 100644 index 0000000..18ab505 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_161.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that port parameters can be passed to port parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_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; + } + + function f_caller(IntPort p_port) { + f_test(p_port); // tested parameter passing + } + + testcase TC_Sem_050402_actual_parameters_161() runs on GeneralComp { + f_test(p); // this component port passing is not a subject of this test + if (p.checkstate("Stopped")) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_161()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_162.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_162.ttcn new file mode 100644 index 0000000..3501cd9 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_162.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters override default values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When a formal parameter has been defined with a default value or template, +// respectively, then it is not necessary to provide an actual parameter. + +module Sem_050402_actual_parameters_162 { + + type component GeneralComp { + } + + function f_test(integer p_val := 5) { + if (p_val != 5) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_162() runs on GeneralComp { + f_test(0); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_162()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_163.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_163.ttcn new file mode 100644 index 0000000..8918bb7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_163.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that default values are used if actual parameters are missing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When a formal parameter has been defined with a default value or template, +// respectively, then it is not necessary to provide an actual parameter. + +module Sem_050402_actual_parameters_163 { + + type component GeneralComp { + } + + function f_test(integer p_val := 5) { + if (p_val == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_163() runs on GeneralComp { + f_test(-); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_163()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_164.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_164.ttcn new file mode 100644 index 0000000..877fd80 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_164.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters override default templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When a formal parameter has been defined with a default value or template, +// respectively, then it is not necessary to provide an actual parameter. + +module Sem_050402_actual_parameters_164 { + + type component GeneralComp { + } + + function f_test(template integer p_val := (0..5)) { + if (match(10, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_164() runs on GeneralComp { + f_test(?); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_164()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_165.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_165.ttcn new file mode 100644 index 0000000..f349b78 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_165.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that default templates are used if actual parameters are missing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When a formal parameter has been defined with a default value or template, +// respectively, then it is not necessary to provide an actual parameter. + +module Sem_050402_actual_parameters_165 { + + type component GeneralComp { + } + + function f_test(template integer p_val := (0..5)) { + if (match(3, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_165() runs on GeneralComp { + f_test(-); // tested parameter passing + } + + control { + execute(TC_Sem_050402_actual_parameters_165()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_166.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_166.ttcn new file mode 100644 index 0000000..21f0672 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_166.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters are evaluated in order of their appearance (list notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameters are evaluated in the order of their appearance. + +module Sem_050402_actual_parameters_166 { + + type component GeneralComp { + var integer vc_counter := 0; + } + + function f_eval1() runs on GeneralComp return integer { + if (vc_counter == 0) + { + setverdict(pass); + vc_counter := vc_counter + 1; + } + else { setverdict(fail); } + return vc_counter; + } + + function f_eval2() runs on GeneralComp return integer { + if (vc_counter == 1) + { + setverdict(pass); + vc_counter := vc_counter + 1; + } + else { setverdict(fail); } + return vc_counter; + } + + function f_test(integer p_par1, integer p_par2) { + } + + testcase TC_Sem_050402_actual_parameters_166() runs on GeneralComp { + f_test(f_eval1(), f_eval2()); // tested feature: f_eval1 shall be called before f_eval2 + } + + control { + execute(TC_Sem_050402_actual_parameters_166()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_167.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_167.ttcn new file mode 100644 index 0000000..67a9481 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_167.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters are evaluated in order of their appearance (assignment notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameters are evaluated in the order of their appearance. + +module Sem_050402_actual_parameters_167 { + + type component GeneralComp { + var integer vc_counter := 0; + } + + function f_eval1() runs on GeneralComp return integer { + log("f_eval1"); + if (vc_counter == 0) + { + setverdict(pass); + vc_counter := vc_counter + 1; + } + else { setverdict(fail); } + return vc_counter; + } + + function f_eval2() runs on GeneralComp return integer { + log("f_eval2"); + if (vc_counter == 1) + { + setverdict(pass); + vc_counter := vc_counter + 1; + } + else { setverdict(fail); } + return vc_counter; + } + + function f_test(integer p_par1, integer p_par2) { + } + + testcase TC_Sem_050402_actual_parameters_167() runs on GeneralComp { + f_test(p_par2 := f_eval1(), p_par1 := f_eval2()); // tested feature: f_eval1 shall be called before f_eval2 + } + + control { + execute(TC_Sem_050402_actual_parameters_167()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_168.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_168.ttcn new file mode 100644 index 0000000..72a911f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_168.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that rules for referencing are applied to actual paremeters before passing to out formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Before passing the actual parameter, the rules for referencing the element on +// the left hand side of assignments are applied, expanding the structured value +// so that the referenced element becomes accessible (see clauses 6.2 and 15.6 for +// more details). + +module Sem_050402_actual_parameters_168 { + + type component GeneralComp { + var integer vc_index := 0; + } + + type record of integer RI; + + function f_test(out integer p_par1) runs on GeneralComp { + vc_index := 1; + p_par1 := 10; + } + + testcase TC_Sem_050402_actual_parameters_168() runs on GeneralComp { + var RI v_ri := { 1, 2 } + f_test(v_ri[vc_index]); // tested parameter passing + if (v_ri == { 10, 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_168()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_169.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_169.ttcn new file mode 100644 index 0000000..ccb6afe --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_169.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that rules for referencing are applied to actual paremeters before passing to inout formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Before passing the actual parameter, the rules for referencing the element on +// the left hand side of assignments are applied, expanding the structured value +// so that the referenced element becomes accessible (see clauses 6.2 and 15.6 for +// more details). + +module Sem_050402_actual_parameters_169 { + + type component GeneralComp { + var integer vc_index := 0; + } + + type record of integer RI; + + function f_test(inout integer p_par1) runs on GeneralComp { + vc_index := 1; + p_par1 := 10; + } + + testcase TC_Sem_050402_actual_parameters_169() runs on GeneralComp { + var RI v_ri := { 1, 2 } + f_test(v_ri[vc_index]); // tested parameter passing + if (v_ri == { 10, 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_169()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_170.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_170.ttcn new file mode 100644 index 0000000..0ec1287 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_170.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that default parameters are evaluated in order of the formal parameter list (list notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If for some formal parameters no actual parameter has been provided, their default +// values are taken and evaluated in the order of the formal parameter list. + +module Sem_050402_actual_parameters_170 { + + type component GeneralComp { + } + + function f_eval1() return integer { + setverdict(pass); + return 1; + } + + function f_eval2() return integer { + if (getverdict != pass) { setverdict(fail); } // if f_eval was called, the verdict would be already pass + return 2; + } + + function f_test(integer p_par1, integer p_par2 := f_eval1(), integer p_par3 := f_eval2()) { + } + + testcase TC_Sem_050402_actual_parameters_170() runs on GeneralComp { + f_test(0, -, -); // tested feature: f_eval1 shall be called before f_eval2 + } + + control { + execute(TC_Sem_050402_actual_parameters_170()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_171.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_171.ttcn new file mode 100644 index 0000000..b67ad7f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_171.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that default parameters are evaluated in order of the formal parameter list (assignment notation) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If for some formal parameters no actual parameter has been provided, their default +// values are taken and evaluated in the order of the formal parameter list. + +module Sem_050402_actual_parameters_171 { + + type component GeneralComp { + } + + function f_eval1() return integer { + setverdict(pass); + return 1; + } + + function f_eval2() return integer { + if (getverdict != pass) { setverdict(fail); } // if f_eval was called, the verdict would be already pass + return 2; + } + + function f_test(integer p_par1 := f_eval1(), integer p_par2, integer p_par3 := f_eval2()) { + } + + testcase TC_Sem_050402_actual_parameters_171() runs on GeneralComp { + f_test(p_par2 := 0); // tested feature: f_eval1 shall be called before f_eval2 + } + + control { + execute(TC_Sem_050402_actual_parameters_171()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_172.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_172.ttcn new file mode 100644 index 0000000..0fc7384 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_172.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that it is possible to use parametrized template with no parentheses if all parameters have default values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The empty brackets for instances of parameterized templates that have only parameters +// with default values are optional when no actual parameters are provided, i.e. all +// formal parameters use their default values. + +module Sem_050402_actual_parameters_172 { + + type component GeneralComp { + } + + template integer mw_int (integer p_val := 10):= (0..p_val); + + testcase TC_Sem_050402_actual_parameters_172() runs on GeneralComp { + if (match(5, mw_int)) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_172()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_173.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_173.ttcn new file mode 100644 index 0000000..e99114a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_173.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that it is possible to use parametrized template with empty parentheses + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The empty brackets for instances of parameterized templates that have only parameters +// with default values are optional when no actual parameters are provided, i.e. all +// formal parameters use their default values. + +module Sem_050402_actual_parameters_173 { + + type component GeneralComp { + } + + template integer mw_int (integer p_val := 10):= (0..p_val); + + testcase TC_Sem_050402_actual_parameters_173() runs on GeneralComp { + if (match(5, mw_int())) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_173()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_174.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_174.ttcn new file mode 100644 index 0000000..2fd6824 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_174.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameter values override default values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameter of a formal parameter with default value can be skipped by using +// dash "-" as actual parameter. + +module Sem_050402_actual_parameters_174 { + + type component GeneralComp { + } + + function f_test (integer p_val := 10) { + if (p_val != 10) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_174() runs on GeneralComp { + f_test(0); + } + + control { + execute(TC_Sem_050402_actual_parameters_174()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_175.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_175.ttcn new file mode 100644 index 0000000..65a05ce --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_175.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters in the beginning of list notation can be skipped + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameter of a formal parameter with default value can be skipped by using +// dash "-" as actual parameter. + +module Sem_050402_actual_parameters_175 { + + type component GeneralComp { + } + + function f_test (integer p_val1 := 10, integer p_val2) { + if (match(p_val1, 10) and match(p_val2, 2)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_175() runs on GeneralComp { + f_test(-, 2); + } + + control { + execute(TC_Sem_050402_actual_parameters_175()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_176.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_176.ttcn new file mode 100644 index 0000000..d2f879e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_176.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that multiple actual parameters of list notation can be skipped + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameter of a formal parameter with default value can be skipped by using +// dash "-" as actual parameter. + +module Sem_050402_actual_parameters_176 { + + type component GeneralComp { + } + + function f_test (integer p_val1, integer p_val2 := 20, integer p_val3, integer p_val4 := 40, integer p_val5) { + if ( match(p_val1, 1) and match(p_val2, 20) and match(p_val3, 3) and match(p_val4, 40) and match(p_val5, 5)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_176() runs on GeneralComp { + f_test(1, -, 3, -, 5); + } + + control { + execute(TC_Sem_050402_actual_parameters_176()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_177.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_177.ttcn new file mode 100644 index 0000000..db21942 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_177.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that actual parameters at the end of list notation can be explicitly skipped + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameter of a formal parameter with default value can be skipped by using +// dash "-" as actual parameter. + +module Sem_050402_actual_parameters_177 { + + type component GeneralComp { + } + + function f_test (integer p_val1, integer p_val2 := 20) { + if (match(p_val1, 1) and match(p_val2, 20)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_177() runs on GeneralComp { + f_test(1, -); + } + + control { + execute(TC_Sem_050402_actual_parameters_177()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_178.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_178.ttcn new file mode 100644 index 0000000..26e6c89 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_178.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that missing actual parameters at the end of list notation are considered to be skipped (single parameter) + ** @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 have default values and are left out. + +module Sem_050402_actual_parameters_178 { + + type component GeneralComp { + } + + function f_test (integer p_val1, integer p_val2 := 20) { + if (match(p_val1, 1) and match(p_val2, 20)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_178() runs on GeneralComp { + f_test(1); + } + + control { + execute(TC_Sem_050402_actual_parameters_178()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_179.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_179.ttcn new file mode 100644 index 0000000..9921ece --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_179.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that missing actual parameters at the end of list notation are considered to be skipped (multiple parameter) + ** @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 have default values and are left out. + +module Sem_050402_actual_parameters_179 { + + type component GeneralComp { + var integer vc_counter := 0; + } + + function f_test (integer p_val1, integer p_val2 := 20, integer p_val3 := 30, integer p_val4 := 40) { + if (match(p_val1, 1) and match(p_val2, 20) and match(p_val3, 30) and match(p_val4, 40)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_179() runs on GeneralComp { + f_test(1, -); + } + + control { + execute(TC_Sem_050402_actual_parameters_179()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_180.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_180.ttcn new file mode 100644 index 0000000..1d1af6d --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_180.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that assignment notation containing all parameters in declaration order is accepted + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For each formal parameter without default value, there shall be an actual parameter. + +module Sem_050402_actual_parameters_180 { + + type component GeneralComp { + } + + 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_Sem_050402_actual_parameters_180() runs on GeneralComp { + f_test(p_val1 := 1, p_val2 := "test", p_val3 := 3); + } + + control { + execute(TC_Sem_050402_actual_parameters_180()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_181.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_181.ttcn new file mode 100644 index 0000000..fb88c60 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_181.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that assignment notation containing all parameters in random order is accepted + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For each formal parameter without default value, there shall be an actual parameter. + +module Sem_050402_actual_parameters_181 { + + type component GeneralComp { + } + + 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_Sem_050402_actual_parameters_181() runs on GeneralComp { + f_test(p_val3 := 3, p_val1 := 1, p_val2 := "test"); + } + + control { + execute(TC_Sem_050402_actual_parameters_181()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_182.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_182.ttcn new file mode 100644 index 0000000..e65a23f --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_182.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that assignment notation can omit parameters with default value + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// In order to use the default value of a formal parameter, no assignment for this +// specific parameter shall be provided. + +module Sem_050402_actual_parameters_182 { + + type component GeneralComp { + } + + function f_test (integer p_val1 := 10, charstring p_val2, integer p_val3) { + if ( match(p_val1, 10) and match(p_val2, "test") and match(p_val3, 3)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_182() runs on GeneralComp { + f_test(p_val2 := "test", p_val3 := 3); + } + + control { + execute(TC_Sem_050402_actual_parameters_182()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_183.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_183.ttcn new file mode 100644 index 0000000..8bf67d7 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_183.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that compatible values can be passed to in formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The type of each actual parameter shall be compatible with the type of each +// corresponding formal parameter. + +module Sem_050402_actual_parameters_183 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + 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_Sem_050402_actual_parameters_183() runs on GeneralComp { + var R2 v_rec := { 1, 2 }; + f_test(v_rec); + } + + control { + execute(TC_Sem_050402_actual_parameters_183()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_184.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_184.ttcn new file mode 100644 index 0000000..c8e25f6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_184.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that compatible values can be passed from out formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The type of each actual parameter shall be compatible with the type of each +// corresponding formal parameter. + +module Sem_050402_actual_parameters_184 { + + type component GeneralComp { + } + + type record R1 { + integer field1, + integer field2 optional + } + + type record R2 { + integer elem1, + integer elem2 optional + } + + function f_test (out R1 p_val) { + p_val.field1 := 1; + p_val.field2 := 2; + } + + testcase TC_Sem_050402_actual_parameters_184() 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_Sem_050402_actual_parameters_184()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_185.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_185.ttcn new file mode 100644 index 0000000..bc6cab3 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_185.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with omit restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module Sem_050402_actual_parameters_185 { + + type component GeneralComp { + } + + function f_test (omit integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_185() runs on GeneralComp { + f_test(1); + } + + control { + execute(TC_Sem_050402_actual_parameters_185()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_186.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_186.ttcn new file mode 100644 index 0000000..dff1466 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_186.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with value restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module Sem_050402_actual_parameters_186 { + + type component GeneralComp { + } + + function f_test (template(value) integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_186() runs on GeneralComp { + f_test(1); + } + + control { + execute(TC_Sem_050402_actual_parameters_186()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_187.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_187.ttcn new file mode 100644 index 0000000..ba792c4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_187.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that compatible templates can be passed to template parameters with present restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters passed to restricted formal template parameters shall obey +// the restrictions given in clause 15.8. + +module Sem_050402_actual_parameters_187 { + + type component GeneralComp { + } + + function f_test (template(present) integer p_val) { + if (match(1, p_val)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_187() runs on GeneralComp { + f_test((0..10)); + } + + control { + execute(TC_Sem_050402_actual_parameters_187()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_188.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_188.ttcn new file mode 100644 index 0000000..f68a084 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_188.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that it is possible to use nested actual parameter lists + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_188 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 + } + + template integer mw_int (integer p_upper) := (0..p_upper); + + template R mw_rec(template integer p_field2) := { + field1 := 1, + field2 := p_field2 + } + + function f_test (template R p_match) { + if (match({1, 5}, p_match)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_188() runs on GeneralComp { + f_test(mw_rec(mw_int(10))); + } + + control { + execute(TC_Sem_050402_actual_parameters_188()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_189.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_189.ttcn new file mode 100644 index 0000000..e260719 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_189.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that empty actual parameter list can be used for functions with no parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_189 { + + type component GeneralComp { + } + + function f_test () { + setverdict(pass); + } + + testcase TC_Sem_050402_actual_parameters_189() runs on GeneralComp { + f_test(); + } + + control { + execute(TC_Sem_050402_actual_parameters_189()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_190.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_190.ttcn new file mode 100644 index 0000000..f3e6862 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_190.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that empty actual parameter list can be used for altsteps with no parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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. + +module Sem_050402_actual_parameters_190 { + + type component GeneralComp { + } + + altstep a_test () { + [] any timer.timeout { setverdict(pass); } + } + + testcase TC_Sem_050402_actual_parameters_190() runs on GeneralComp { + timer t_instant := 0.0; + t_instant.start; + a_test(); + } + + control { + execute(TC_Sem_050402_actual_parameters_190()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_191.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_191.ttcn new file mode 100644 index 0000000..d61e09e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_191.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that partially initialized values can be passed to in formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Unless specified differently in the relevant clause(s), actual parameters +// passed to in or inout formal parameters shall be at least partially +// initialized (for an exemption see e.g. clause 16.1.2 of the present document). + +module Sem_050402_actual_parameters_191 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + function f_test (R p_val) { + if (match(p_val.field1, 1) and not isbound(p_val.field2)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_191() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + f_test(v_rec); + } + + control { + execute(TC_Sem_050402_actual_parameters_191()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_192.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_192.ttcn new file mode 100644 index 0000000..1356e00 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_192.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that partially initialized values can be passed to inout formal parameters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Unless specified differently in the relevant clause(s), actual parameters +// passed to in or inout formal parameters shall be at least partially +// initialized (for an exemption see e.g. clause 16.1.2 of the present document). + +module Sem_050402_actual_parameters_192 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + function f_test (inout R p_val) { + if (match(p_val.field1, 1) and not isbound(p_val.field2)) { setverdict(pass); } + else { setverdict(fail); } + } + + testcase TC_Sem_050402_actual_parameters_192() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + f_test(v_rec); + } + + control { + execute(TC_Sem_050402_actual_parameters_192()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_193.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_193.ttcn new file mode 100644 index 0000000..a4b4a37 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_193.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that Example 1 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_193 { + + type component GeneralComp { + } + + // A function definition with a formal parameter list + function MyFunction(integer FormalPar1, boolean FormalPar2, bitstring FormalPar3) { + setverdict(pass); + } + + testcase TC_Sem_050402_actual_parameters_193() runs on GeneralComp { + // A function call with an actual parameter list + MyFunction(123, true,'1100'B); + // A function call with assignment notation for actual parameters + MyFunction(FormalPar1 := 123, FormalPar3 := '1100'B, FormalPar2 := true); + } + + control { + execute(TC_Sem_050402_actual_parameters_193()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_194.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_194.ttcn new file mode 100644 index 0000000..4d1e3f5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_194.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that Example 2 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_194 { + + type component GeneralComp { + } + + type integer MyTemplateType; + + template MyTemplateType MyGlobalTemplate := ?; + + function MyFunction(in template MyTemplateType MyValueParameter){ + setverdict(pass); + }; + // MyValueParameter is in parameter, the in keyword is optional + + testcase TC_Sem_050402_actual_parameters_194() runs on GeneralComp { + // A function call with an actual parameter + MyFunction(MyGlobalTemplate); + } + + control { + execute(TC_Sem_050402_actual_parameters_194()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_195.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_195.ttcn new file mode 100644 index 0000000..fa5b67e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_195.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the first part of the Example 3 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_195 { + + type component GeneralComp { + } + + function MyFunction(inout boolean MyReferenceParameter) { + // MyReferenceParameter is an inout parameter + setverdict(pass); + } + + testcase TC_Sem_050402_actual_parameters_195() runs on GeneralComp { + var boolean MyBooleanVariable := false; + // A function call with an actual parameter + MyFunction(MyBooleanVariable); + // The actual parameter can be read and set within the function + } + + control { + execute(TC_Sem_050402_actual_parameters_195()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_196.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_196.ttcn new file mode 100644 index 0000000..513a55b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_196.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the third part of the Example 3 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_196 { + + type component GeneralComp { + } + + type record of integer RoI; + + function f_swapElements (inout integer p_int1, inout integer p_int2) { + var integer v_tmp := p_int1; + p_int1 := p_int2; + p_int2 := v_tmp; + } + + testcase TC_Sem_050402_actual_parameters_196() runs on GeneralComp { + var RoI v_roi := { 0, 1, 2, 3, 4, 5 }; + f_swapElements(v_roi[0], v_roi[5]); // after the function call, v_roi is { 5, 1, 2, 3, 4, 0 } + if (v_roi == { 5, 1, 2, 3, 4, 0 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_196()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_197.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_197.ttcn new file mode 100644 index 0000000..3392dd4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_197.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the first part of the Example 3 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_197 { + + type component GeneralComp { + } + + function MyFunction(inout boolean MyReferenceParameter) { + // MyReferenceParameter is an inout parameter + setverdict(pass); + } + + testcase TC_Sem_050402_actual_parameters_197() runs on GeneralComp { + var boolean MyBooleanVariable := false; + // A function call with an actual parameter + MyFunction(MyBooleanVariable); + // The actual parameter can be read and set within the function + } + + control { + execute(TC_Sem_050402_actual_parameters_197()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_198.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_198.ttcn new file mode 100644 index 0000000..f8b7091 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_198.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the the Example 4 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_198 { + + type component GeneralComp { + } + + // A function definition with an empty parameter list shall be written as + function MyFunction() { setverdict(pass); } + + // A record definition with an empty parameter list shall be written as + type record MyRecord { } + // and shall be used as + template MyRecord Mytemplate := { } + + testcase TC_Sem_050402_actual_parameters_198() runs on GeneralComp { + // and shall be called as + MyFunction(); + } + + control { + execute(TC_Sem_050402_actual_parameters_198()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_199.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_199.ttcn new file mode 100644 index 0000000..e718999 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_199.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the Example 5 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_199 { + + type port P message { + inout MyMessageType; + } + + type component GeneralComp { + port P MyPCO; + } + + // Given the message definition + type record MyMessageType + { + integer field1, + charstring field2, + boolean field3 + } + + // A message template might be + template MyMessageType MyTemplate(integer MyValue) := + { + field1 := MyValue, + field2 := pattern "abc*xyz", + field3 := true + } + + testcase TC_Sem_050402_actual_parameters_199(template MyMessageType RxMsg) runs on GeneralComp { + MyPCO.send(MyMessageType:{7, "abcdefxyz", true }); + MyPCO.receive(RxMsg); + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_199(MyTemplate(7))); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn new file mode 100644 index 0000000..97a7988 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_200.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the Example 6 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_200 { + + type component GeneralComp { + } + + modulepar boolean logMessage := true; + function logMsg(@lazy charstring complex) { + if (logMessage) { + log(complex); + } + } + + function computeComplexMessage() return charstring { + // some complicated computation + setverdict(pass); + return "hello"; + } + + testcase TC_Sem_050402_actual_parameters_200() runs on GeneralComp { + logMsg(computeComplexMessage()); // computeComplexMessage() is only invoked if + // logMessage is true + } + + control { + execute(TC_Sem_050402_actual_parameters_200()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn new file mode 100644 index 0000000..8266a56 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_201.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the Example 7 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_201 { + + type component GeneralComp { + var integer v_id; + port MyPortType P; + } + + type record MyMessage { integer id, float number } + type port MyPortType message { inout MyMessage } + + function sendLazy(@lazy MyMessage pdu) runs on GeneralComp { + for (v_id := 1; v_id<9; v_id:=v_id+1){ + P.send(pdu); // the actual parameter passed to the formal parameter pdu is evaluated only in + // the first loop;let say rnd() returns 0.924946; the message { 1, 0.924946 } is + // sent out 8 times + } + setverdict(pass,"messages has been sent out") + } + function sendFuzzy(@fuzzy MyMessage pdu) runs on GeneralComp { + for (v_id := 1; v_id<9; v_id:=v_id+1){ + P.send(pdu); // the actual parameter passed to the formal parameter pdu is evaluated in each + // loop; let say rnd() returns 0.924946, 0.680497, 0.630836, 0.648681, 0.428501, + // 0.262539, 0.646990, 0.265262 in subsuent calls; the messages 1, 0.924946 }, + // {{ 2, 0.680497 }, { 3, 0.630836 }, { 4, 0.648681 }, { 5, 0.428501 }, + // { 6, 0.262539 }, { 7, 0.646990 } and { 8, 0.265262 } are sent out in sequence + } + setverdict(pass,"messages has been sent out") + } + + testcase TC_Sem_050402_actual_parameters_201() runs on GeneralComp system GeneralComp { + connect(self:P,self:P); + sendLazy({v_id, rnd()}); //note that at this point v_id is unintialized yet + sendFuzzy({v_id, rnd()}) + } + + control { + execute(TC_Sem_050402_actual_parameters_201()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn new file mode 100644 index 0000000..d49099e --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_202.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that the Example 8 can be executed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_050402_actual_parameters_202 { + + type component GeneralComp { + } + + function f_initValues (out integer p_par1, out integer p_par2) { + p_par1 := 1; + p_par2 := 2; + } + + testcase TC_Sem_050402_actual_parameters_202() runs on GeneralComp { + var integer v_var1; + f_initValues(p_par2 := v_var1, p_par1 := v_var1); + // After this function call, v_var1 will contain 2, as parameters are assigned in + // the same order as in the definition of the f_initValues function. Thus p_par1 is + // assigned first to v_var1 and p_par2 after that ovewriting the previous value. + if (v_var1 == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_050402_actual_parameters_202()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn new file mode 100644 index 0000000..89380e8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_203.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn new file mode 100644 index 0000000..92578c6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_204.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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 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_204()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn new file mode 100644 index 0000000..771c34a --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_205.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn new file mode 100644 index 0000000..5d958ed --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_206.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn new file mode 100644 index 0000000..e52fe72 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_207.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn new file mode 100644 index 0000000..b301801 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_208.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn new file mode 100644 index 0000000..7005861 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_209.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn new file mode 100644 index 0000000..60ced74 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_210.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn new file mode 100644 index 0000000..2bd7265 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_211.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn new file mode 100644 index 0000000..408487c --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_212.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn new file mode 100644 index 0000000..36a4ae5 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_213.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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 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_213()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn new file mode 100644 index 0000000..fcf9681 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_214.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn new file mode 100644 index 0000000..027f2f4 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_215.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn new file mode 100644 index 0000000..0db59f8 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_216.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn new file mode 100644 index 0000000..4903d84 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_217.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn new file mode 100644 index 0000000..7592831 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_218.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn new file mode 100644 index 0000000..af99b32 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_219.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn new file mode 100644 index 0000000..661eacd --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_220.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn new file mode 100644 index 0000000..e448a08 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_221.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn new file mode 100644 index 0000000..7313d76 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_222.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn new file mode 100644 index 0000000..ef70e42 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_223.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn new file mode 100644 index 0000000..a833953 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_224.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn new file mode 100644 index 0000000..740187b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_225.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn new file mode 100644 index 0000000..c9caf16 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_226.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_227.ttcn b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_227.ttcn new file mode 100644 index 0000000..964e59b --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/050402_actual_parameters/Sem_050402_actual_parameters_227.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:5.4.2, verify that mixed notation can be used + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Actual parameters can be provided ... in a mixed notation where the first parameters are given in list notation +// and additional parameters in assignment notation. +// The test is based on modified example 11 + +module Sem_050402_actual_parameters_227 { + + type component GeneralComp { + } + + function f_mixed (out integer p_par1, in integer p_par2 := 2, inout integer p_par3) { + p_par1 := 1 + p_par2; + if (p_par2 == 2 and p_par3 == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_050402_actual_parameters_227() runs on GeneralComp { + var integer v := 0; + // the following statements all have the same semantics: + f_mixed(-,2,v); + f_mixed(-,p_par2 := 2, p_par3 := v); + f_mixed(-,-,p_par3 := v); + f_mixed(-,p_par3 := v, p_par2 := 2); + + setverdict(pass); + } + + control { + execute(TC_Sem_050402_actual_parameters_227()); + } +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn new file mode 100644 index 0000000..dfbe7f6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSem_0504_parametrization_incompatibility_001.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4, Ensure that the IUT correctly handles received testcase parametrization type incompatibility. + ** @verdict pass reject + ***************************************************/ +module NegSem_0504_parametrization_incompatibility_001 { + +type enumerated MyEnumeratedType {e_black, e_white} +type integer address; + +type record MyRecord { + integer field1, + boolean field2, + address field3, + MyEnumeratedType field4, + integer field5 +} + + +type component GeneralComp { + +} + + +testcase TC_NegSem_0504_parametrization_incompatibility_001 ( + MyRecord ExpectedMatch, + integer p_integer := 0, + boolean p_boolean := true, + address p_address := null, + MyEnumeratedType p_enumerated := e_black, + template integer p_integerTemplate := ? + ) runs on GeneralComp { + + // MyRecord cannot be built from the default p_integerTemplate parameter + var MyRecord ReceivedRecord := {p_integer, p_boolean, p_address, p_enumerated, p_integerTemplate}; + + if ( ReceivedRecord == ExpectedMatch ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + var MyRecord DefaultValues := { + field1 := 0, + field2 := true, + field3 := null, + field4 := e_black, + field5 := 1 //any number can be used here to correspond with ? matching + } + + execute(TC_NegSem_0504_parametrization_incompatibility_001(DefaultValues)); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn new file mode 100644 index 0000000..3b420c6 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4, Ensure that the IUT rejects forbidden module parametrization types. + ** @verdict pass reject + ***************************************************/ +module NegSyn_0504_forbidden_parametrization_001 { + +modulepar { template integer INTEGER_MODULE_PARAMETER := 0 } + +type component GeneralComp { +} + + +testcase TC_NegSyn_0504_forbidden_parametrization_001() runs on GeneralComp { +} + +control{ + execute(TC_NegSyn_0504_forbidden_parametrization_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn new file mode 100644 index 0000000..5d829e0 --- /dev/null +++ b/core_language/05_basic_language_elements/0504_parametrization/0504_toplevel/NegSyn_0504_forbidden_parametrization_002.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.4, Ensure that the IUT rejects forbidden module parametrization types. + ** @verdict pass reject + ***************************************************/ +module NegSyn_0504_forbidden_parametrization_002 { + +modulepar { timer TIMER_MODULE_PARAMETER } + +type component GeneralComp { +} + + +testcase TC_NegSyn_0504_forbidden_parametrization_002() runs on GeneralComp { +} + +control{ + execute(TC_NegSyn_0504_forbidden_parametrization_002()); +} + +} diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_001.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_001.ttcn new file mode 100644 index 0000000..b5edff4 --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:5.5, Verify that an error is detected when two constants reference each other + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Direct and indirect cyclic definitions are not allowed with the exception of the +// following cases: +// a) for recursive type definitions (see clause 6.2); +// b) function and altstep definitions (i.e. recursive function or altstep calls); +// c) cyclic import definitions, if the imported definitions only form allowed cyclic +// definitions. +// The test is a copy of example 1 from the chapter 5.5 +module NegSem_0505_cyclic_definitions_001 { + + type record ARecordType { integer a, integer b }; + const ARecordType c_test1 := { 1 , c_test2.b}; // c_test1 refers to c_test2 + const ARecordType c_test2 := { 1 , c_test1.b}; // c_test2 refers to c_test1 + +} diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_002.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_002.ttcn new file mode 100644 index 0000000..c573013 --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/NegSem_0505_cyclic_definitions_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.5, Verify that an error is detected when a forbidded cyclic reference occurs in cyclic import + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Direct and indirect cyclic definitions are not allowed with the exception of the +// following cases: +// a) for recursive type definitions (see clause 6.2); +// b) function and altstep definitions (i.e. recursive function or altstep calls); +// c) cyclic import definitions, if the imported definitions only form allowed cyclic +// definitions. +// The test is a modification of example 1 from the chapter 5.5 that defines both constants +// in different modules. + +module NegSem_0505_cyclic_definitions_002 { + import from NegSem_0505_cyclic_definitions_002_import { const c_test1 } + type record ARecordType { integer a, integer b }; + const ARecordType c_test2 := { 1 , c_test1.b}; // c_test2 refers to c_test1 + + testcase TC_Sem_0505_cyclic_definitions_005() runs on GeneralComp system GeneralComp { + log(c_test2); + } + + control{ + execute(TC_Sem_0505_cyclic_definitions_005()); + } +} + +module NegSem_0505_cyclic_definitions_002_import { + import from NegSem_0505_cyclic_definitions_002 all; + const ARecordType c_test1 := { 1 , c_test2.b}; // c_test1 refers to c_test2 +} diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_001.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_001.ttcn new file mode 100644 index 0000000..1441dec --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_001.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.5, Ensure that the IUT correctly handles recursive functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0505_cyclic_definitions_001 { + +type component GeneralComp { +} + +function f_recursive(integer p_argument) return integer { + if(p_argument==0) { + return 1; + } + else { + return p_argument*f_recursive(p_argument-1); + } +} + +testcase TC_Sem_0505_cyclic_definitions_001() runs on GeneralComp { + if (f_recursive(10) == 3628800) { // checks 10! + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0505_cyclic_definitions_001()); +} + +} diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_002.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_002.ttcn new file mode 100644 index 0000000..402239c --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_002.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5.5, Ensure that the IUT correctly handles cyclic imports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_0505_cyclic_definitions_002 { + type integer MyInteger; + import from Sem_0505_cyclic_definitions_002_import { type MyIntegerList } + + +type component GeneralComp { +} + +testcase TC_Sem_0505_cyclic_definitions_002() runs on GeneralComp { + var MyIntegerList v_list := {1,2}; + + if ( match(v_list, { 1, 2})) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0505_cyclic_definitions_002()); +} + +} + +module Sem_0505_cyclic_definitions_002_import { + import from Sem_0505_cyclic_definitions_002 { type MyInteger } + type record of MyInteger MyIntegerList; +} diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_003.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_003.ttcn new file mode 100644 index 0000000..b4089fc --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_003.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:5.5, Verify that cyclic import containing cyclic function calls is allowed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Direct and indirect cyclic definitions are not allowed with the exception of the +// following cases: +// a) for recursive type definitions (see clause 6.2); +// b) function and altstep definitions (i.e. recursive function or altstep calls); +// c) cyclic import definitions, if the imported definitions only form allowed cyclic +// definitions. +// In particular, the combination of c and b is tested + +module Sem_0505_cyclic_definitions_003 { + import from Sem_0505_cyclic_definitions_003_import { function f_factImp; } + type component GeneralComp { + } + + function f_fact(integer p_argument) return integer { + if(p_argument==0) { + return 1; + } + else { + return p_argument*f_factImp(p_argument-1); + } + } + + testcase TC_Sem_0505_cyclic_definitions_003() runs on GeneralComp { + if (f_fact(10) == 3628800) { // checks 10! + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_0505_cyclic_definitions_003()); + } + +} + +module Sem_0505_cyclic_definitions_003_import { + import from Sem_0505_cyclic_definitions_003 { function f_fact; } + function f_factImp(integer p_argument) return integer { + if(p_argument==0) { + return 1; + } + else { + return p_argument*f_fact(p_argument-1); + } + } + +} \ No newline at end of file diff --git a/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn new file mode 100644 index 0000000..e467cd1 --- /dev/null +++ b/core_language/05_basic_language_elements/0505_cyclic_definitions/Sem_0505_cyclic_definitions_004.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:5.5, Verify that cyclic altsteps are allowed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Direct and indirect cyclic definitions are not allowed with the exception of the +// following cases: +// b) ... altstep definitions (i.e. recursive ... altstep calls); + +module Sem_0505_cyclic_definitions_004 { + type port P message { + inout integer; + } + type component GeneralComp { + var integer vc_receiveCounter := 0; + timer t_tmr := 1.0; + port P p1; + } + + altstep a_test() runs on GeneralComp { + [] p1.receive(integer:(0..3)) { + vc_receiveCounter := vc_receiveCounter + 1; + a_test(); + } + [] p1.receive(integer:?) { + if (vc_receiveCounter == 4) { + setverdict(pass); + } else { + setverdict(fail); + } + } + [] t_tmr.timeout { + setverdict(fail); + } + } + + testcase TC_Sem_0505_cyclic_definitions_004() runs on GeneralComp system GeneralComp { + connect(self:p1, self:p1); + for (var integer i := 0; i < 5; i := i + 1) { + p1.send(i); + } + t_tmr.start; + a_test(); + } + + control{ + execute(TC_Sem_0505_cyclic_definitions_004()); + } +} diff --git a/core_language/05_basic_language_elements/05_toplevel/NegSyn_05_TopLevel_001.ttcn b/core_language/05_basic_language_elements/05_toplevel/NegSyn_05_TopLevel_001.ttcn new file mode 100755 index 0000000..d4636cb --- /dev/null +++ b/core_language/05_basic_language_elements/05_toplevel/NegSyn_05_TopLevel_001.ttcn @@ -0,0 +1,12 @@ + +const integer wrongTopLevel := 1; + +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:5, Ensure that when the IUT loads a module containing some definitions before the module declaration then the module is rejected. + ** @verdict pass reject + *****************************************************************/ +module NegSyn_05_TopLevel_001 { + +} diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_001.ttcn new file mode 100644 index 0000000..4e78de7 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_001.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign float to integer values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_001 { + const integer c_i1 := 0.0; // not an integer value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_002.ttcn new file mode 100644 index 0000000..750a5c0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_002.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign boolean to integer values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_002 { + const integer c_i1 := true; // not an integer value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_003.ttcn new file mode 100644 index 0000000..ea479f6 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_003.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign integer to float values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_003 { + const float c_f1 := 0; // not a float value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_004.ttcn new file mode 100644 index 0000000..bd94fff --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_004.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign boolean to float values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_004 { + const float c_f1 := true; // not a float value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_005.ttcn new file mode 100644 index 0000000..76f86b2 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_005.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign verdicttype to float values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_005 { + const float c_f1 := pass; // not a float value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_006.ttcn new file mode 100644 index 0000000..e28c53c --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/NegSyn_060100_SimpleBasicTypes_006.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign integer to verdicttype values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060100_SimpleBasicTypes_006 { + const verdicttype c_v1 := 1; // not a verdict +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_001.ttcn new file mode 100644 index 0000000..79ff5cb --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign and read integer values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060100_SimpleBasicTypes_001 { + + const integer c_i := 5; + + type component GeneralComp {} + + testcase TC_Sem_610_SimpleBasicTypes_001() runs on GeneralComp { + if (c_i == 5){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_610_SimpleBasicTypes_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_002.ttcn new file mode 100644 index 0000000..f482b9c --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign and read large integer values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060100_SimpleBasicTypes_002 { + + const integer c_i := 50000000000000; + + type component GeneralComp {} + + testcase TC_Sem_610_SimpleBasicTypes_002() runs on GeneralComp { + if (c_i == 50000000000000){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_610_SimpleBasicTypes_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_003.ttcn new file mode 100644 index 0000000..bb3f9d7 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign and read float values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060100_SimpleBasicTypes_003 { + + const float c_f := 5.12E-5; + + type component GeneralComp {} + + testcase TC_Sem_610_SimpleBasicTypes_003() runs on GeneralComp { + if (c_f > 5E-5){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_610_SimpleBasicTypes_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_004.ttcn new file mode 100644 index 0000000..863ebbe --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign and read large float values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060100_SimpleBasicTypes_004 { + + const float c_f := 5.23E200; + + type component GeneralComp {} + + testcase TC_Sem_610_SimpleBasicTypes_004() runs on GeneralComp { + if (c_f > 1E200){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_610_SimpleBasicTypes_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_005.ttcn new file mode 100644 index 0000000..19917a3 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Sem_060100_SimpleBasicTypes_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign and read verdicts + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060100_SimpleBasicTypes_005 { + + const verdicttype c_v := inconc; + + type component GeneralComp {} + + testcase TC_Sem_610_SimpleBasicTypes_005() runs on GeneralComp { + if (c_v == inconc){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_610_SimpleBasicTypes_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_001.ttcn new file mode 100644 index 0000000..a5b73c9 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_001.ttcn @@ -0,0 +1,11 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign different integer values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_001 { + const integer c_i1 := 0; + const integer c_i2 := 1; + const integer c_i3 := -5; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_002.ttcn new file mode 100644 index 0000000..c194f09 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_002.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign large integer values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_002 { + const integer c_i1 := 10000000000000; // large positive 10^13 + const integer c_i2 := -10000000000000; // large negative -10^13 +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_003.ttcn new file mode 100644 index 0000000..3032b66 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_003.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign different float values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_003 { + const float c_f1 := 0.0; + const float c_f2 := 131E57; + const float c_f3 := 131E-57; + const float c_f4 := -502E55; + const float c_f5 := -502E-55; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn new file mode 100644 index 0000000..e2dae64 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_004.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Assign small and large float values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_004 { + const float c_f1 := 2E256; // large positive 2^256 + const float c_f2 := -2E256; // large negative -2^256 + const float c_f3 := 2E-256; // small positive 2^-256 + const float c_f4 := -2E-256; // small negative -2^256 +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn new file mode 100644 index 0000000..0a79fbf --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_005.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Accept float mantisa for float values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_005 { + const float c_f1 := 2.0E2; + const float c_f2 := -2.1E-1; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn new file mode 100644 index 0000000..2dc3fc2 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060100_simple_basic_types_and_values/Syn_060100_SimpleBasicTypes_006.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.0, Accept all verdict values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060100_SimpleBasicTypes_006 { + const verdicttype c_v1 := pass; + const verdicttype c_v2 := fail; + const verdicttype c_v4 := inconc; + const verdicttype c_v5 := none; + const verdicttype c_v6 := error; +} \ No newline at end of file diff --git a/core_language/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/core_language/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 0000000..9e3618e --- /dev/null +++ b/core_language/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,32 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring elements + ** @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 octetstring v_b := '100010'O; + v_b[1] := '11'O; //error: only individual elements can be accessed + if (v_b == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_001()); + } +} \ No newline at end of file diff --git a/core_language/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/core_language/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 0000000..b881227 --- /dev/null +++ b/core_language/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,32 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring elements + ** @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 octetstring v_b := '100010'O; + v_b[6] := '01'O; //error: index outside of range + if (v_b == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail, "v_b:",v_b); + } + } + + control{ + execute(TC_NegSem_06010101_AccessStringElements_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_001.ttcn new file mode 100644 index 0000000..1a836ef --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_001.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access universal charstring elements + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * For assigning an element to the end of a string, the length of the string should be used as + * index. Trying to assign an element to the end of a string with an index larger than the + * length of the string shall cause an error. +*/ + +module NegSyn_06010101_AccessStringElements_001 { + + type component GeneralComp {} + + testcase TC_NegSyn_06010101_AccessStringElements_001() runs on GeneralComp { + var universal charstring v_b := "AbCdE"; + + v_b[1] := "FF"; // incorrect legth + } + + control{ + execute(TC_NegSyn_06010101_AccessStringElements_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_002.ttcn new file mode 100644 index 0000000..71d1455 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/NegSyn_06010101_AccessStringElements_002.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring elements + ** @verdict pass reject + ***************************************************/ +/* The following requirements are tested: + * For initializing an uninitialized string with a single element, + * the index value zero (0) can be used as index. Trying to assign a + * single element to an uninitialized string with an index which is + * not zero (0) shall cause an error. +*/ + +module NegSyn_06010101_AccessStringElements_002 { + + type component GeneralComp {} + + testcase TC_NegSyn_06010101_AccessStringElements_002() runs on GeneralComp { + var universal charstring v_b := ""; + v_b[2] := "AB"; //error: incorrect index + } + + control{ + execute(TC_NegSyn_06010101_AccessStringElements_002()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..b1128f2 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_001 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_001() runs on GeneralComp { + var bitstring v_b := '10001'B; + v_b[2] := '1'B; + if (v_b == '10101'B){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_001()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..f51ce97 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access octetstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_002 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_002() runs on GeneralComp { + var octetstring v_b := '100010'O; + v_b[2] := '01'O; + if (v_b == '100001'O){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_002()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..3c60d75 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_003 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_003() runs on GeneralComp { + var hexstring v_b := '10001'H; + v_b[2] := '1'H; + if (v_b == '10101'H){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_004.ttcn new file mode 100644 index 0000000..652e032 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_004.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access bitstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_004 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_004() runs on GeneralComp { + var bitstring v_b := ''B; + v_b[0] := '1'B; + v_b[1] := '0'B; + v_b[2] := '1'B; + v_b[3] := '0'B; + v_b[4] := '1'B; + if (v_b == '10101'B){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_005.ttcn new file mode 100644 index 0000000..43e9fa7 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_005.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access hexstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_005 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_005() runs on GeneralComp { + var hexstring v_b := '00000'H; + v_b[0] := '1'H; + v_b[1] := '0'H; + v_b[2] := '1'H; + v_b[3] := '0'H; + v_b[4] := '1'H; + if (v_b == '10101'H){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_006.ttcn new file mode 100644 index 0000000..0eff853 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_006.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access octetstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_006 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_006() runs on GeneralComp { + var octetstring v_b := ''O; + v_b[0] := '10'O; + v_b[1] := '01'O; + if (v_b == '1001'O){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_007.ttcn new file mode 100644 index 0000000..45287af --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_007.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access charstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_007 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_007() runs on GeneralComp { + var charstring v_b := "abc"; + v_b[2] := "d"; + if (v_b == "abd"){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_008.ttcn new file mode 100644 index 0000000..d824516 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_008.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access charstring elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_008 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_008() runs on GeneralComp { + var universal charstring v_b := char (0, 0, 40, 20); + v_b[0] := "d"; + if (v_b[0] == "d"){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_009.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_009.ttcn new file mode 100644 index 0000000..4d5e43a --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_009.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Access charstring elements with non printable characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_009 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_009() runs on GeneralComp { + var universal charstring v_b := char (0, 0, 1, 116); + + + if (v_b == "Ŵ" ){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_009()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_010.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_010.ttcn new file mode 100644 index 0000000..922765f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/06010101_accessing_individual_string_elements/Sem_06010101_AccessStringElements_010.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.1.1.1, Ensure that For initializing an uninitialized string with a single element, the index value zero (0) can be used as index. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010101_AccessStringElements_010 { + + type component GeneralComp {} + + testcase TC_Sem_06010101_AccessStringElements_010() runs on GeneralComp { + var universal charstring v_b :=""; + v_b[0] := "a"; + if (v_b == "a"){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010101_AccessStringElements_010()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_001.ttcn new file mode 100644 index 0000000..12ecdef --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_001.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign invalid bitstring value + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_001 { + const bitstring c_b1 := '2'B; // not an bitstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_002.ttcn new file mode 100644 index 0000000..d9a660f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_002.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign string to bitstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_002 { + const bitstring c_b1 := "1"; // not an bitstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_003.ttcn new file mode 100644 index 0000000..727035f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_003.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign octetstring to bitstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_003 { + const bitstring c_b1 := '01'O; // not an bitstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_004.ttcn new file mode 100644 index 0000000..83d4d38 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_004.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign invalid hexstring value + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_004 { + const hexstring c_b1 := '01H'O; // not an hexstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_005.ttcn new file mode 100644 index 0000000..185f3b9 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_005.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign string to hexstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_005 { + const hexstring c_b1 := "010"; // not an hexstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_006.ttcn new file mode 100644 index 0000000..6430eb1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_006.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign octetstring to hexstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_006 { + const hexstring c_b1 := '01'O; // not an hexstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_007.ttcn new file mode 100644 index 0000000..55583dd --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_007.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign invalid hexstring value + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_007 { + const octetstring c_b1 := '1FA'O; // not an octetstring value, odd number of nibbles +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_008.ttcn new file mode 100644 index 0000000..2289256 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_008.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign string to octetstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_008 { + const octetstring c_b1 := "F15A"; // not an octetstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_009.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_009.ttcn new file mode 100644 index 0000000..11055d6 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_009.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign hexstring to octetstring values + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_009 { + const octetstring c_b1 := 'FA'H; // not an octetstring value +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_010.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_010.ttcn new file mode 100644 index 0000000..c07aff4 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/NegSyn_060101_TopLevel_010.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign invalid hexstring value + ** @verdict pass reject + ***************************************************/ +module NegSyn_060101_TopLevel_010 { + const octetstring c_b1 := '1FAH'O; // not an octetstring value, H not valid +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_001.ttcn new file mode 100644 index 0000000..7ef65ef --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read bitstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_001 { + + const bitstring c_b := '10001'B; + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_001() runs on GeneralComp { + if (c_b == '10001'B){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_002.ttcn new file mode 100644 index 0000000..8ee60da --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read hexstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_002 { + + const hexstring c_h := 'E1F0A'H; + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_002() runs on GeneralComp { + if (c_h == 'e1f0a'H){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_003.ttcn new file mode 100644 index 0000000..6e92854 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read octetstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_003 { + + const octetstring c_o := 'E1F30A'O; + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_003() runs on GeneralComp { + if (c_o == 'e1f30a'O){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_004.ttcn new file mode 100644 index 0000000..ac265d1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_004.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_004 { + + const charstring c_s1 := "abcdef"; + const charstring c_s2 := "ab""cdef"; + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_004() runs on GeneralComp { + if (c_s1 == "abcdef"){ + setverdict(pass); + } + else { + setverdict(fail); + } + if (lengthof(c_s2) == 7){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn new file mode 100644 index 0000000..86b3d46 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_005 { + + const universal charstring c_s1 := char (0, 0, 40, 48) & char ( 0, 0, 1, 113); + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_005() runs on GeneralComp { + if (lengthof(c_s1) == 2) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn new file mode 100644 index 0000000..af2b8fc --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060101_TopLevel_006 { + + const universal charstring c_s1 := "the Braille character " & char (0, 0, 40, 48) & "looks like this"; + + type component GeneralComp {} + + testcase TC_Sem_611_TopLevel_006() runs on GeneralComp { + if (lengthof(c_s1) > 10) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_611_TopLevel_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn new file mode 100755 index 0000000..c75fe11 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_007.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign and read universal charstring using USI like notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + The UCS sequence identifier-like (USI-like) notation using their short identifiers of code point. The USI-like notation is composed of the keyword char followed by parentheses. The +parentheses enclose a comma-separated list of short identifiers . Each short identifier represents a single +character and it shall be composed of a letter U or u followed by an optional "+" PLUS SIGN character, +followed by 1..8 hexadecimal digits. +*/ + +module Sem_060101_TopLevel_007 { + + type component GeneralComp {} + + testcase TC_Sem_060101_TopLevel_007() runs on GeneralComp { + var universal charstring v_a := char(U0041); //USI notation for character "A" + var universal charstring v_b := char(U0171); //USI notation for character "ű" + var universal charstring v_c := char(U41); //USI notation for character "A" without leading zeroes + var universal charstring v_d := char(U+171,U41); //USI notation for character "ű" and "A" without leading zeroes and + sign notation + + + + if (match(v_a,"A") and + match(v_b,"ű") and + match(v_c,"A") and + match(v_d,"űA")) + { + setverdict(pass,"v_a:",v_a, "v_b:",v_b, "v_c:",v_c,"v_d:",v_d); + } + else { + setverdict(fail,"v_a:",v_a, "v_b:",v_b, "v_c:",v_c,"v_d:",v_d); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_008.ttcn b/core_language/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 100644 index 0000000..d2f71c3 --- /dev/null +++ b/core_language/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,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_009.ttcn b/core_language/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 100644 index 0000000..a3ae7d2 --- /dev/null +++ b/core_language/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,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_010.ttcn b/core_language/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 100644 index 0000000..110b084 --- /dev/null +++ b/core_language/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,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_011.ttcn b/core_language/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 100644 index 0000000..6a78b20 --- /dev/null +++ b/core_language/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,36 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_012.ttcn b/core_language/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 100644 index 0000000..b969609 --- /dev/null +++ b/core_language/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,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_013.ttcn b/core_language/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 100644 index 0000000..932872a --- /dev/null +++ b/core_language/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,35 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_014.ttcn b/core_language/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 100644 index 0000000..a186ff9 --- /dev/null +++ b/core_language/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,26 @@ +/*************************************************** + ** @author STF 521 + ** @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,"ABC\ DEF")) + { + setverdict(pass,"v_a:",v_a); + } + else { + setverdict(fail,"v_a:",v_a); + } + } + + control{ + execute(TC_Sem_060101_TopLevel_014()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Sem_060101_TopLevel_015.ttcn b/core_language/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 100644 index 0000000..2b219ad --- /dev/null +++ b/core_language/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,27 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn new file mode 100644 index 0000000..1d3f0b0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_001.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign different bitstring values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060101_TopLevel_001 { + const bitstring c_b1 := '0'B; + const bitstring c_b2 := '1'B; + const bitstring c_b3 := '01001'B; + const bitstring c_b4 := '000000000000000000000'B; + const bitstring c_b5 := '111111111111111111111'B; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn new file mode 100644 index 0000000..0e6961e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_002.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign different hexstring values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060101_TopLevel_002 { + const hexstring c_h1 := '0'H; + const hexstring c_h2 := '1FaB5'H; + const hexstring c_h3 := '07aDC4'H; + const hexstring c_h4 := '0000000000000000000000000'H; + const hexstring c_h5 := 'FFFFFFFFFFFFFFFFFFFFFFFFF'H; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn new file mode 100644 index 0000000..7a23da4 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060101_basic_string_types_and_values/060101_toplevel/Syn_060101_TopLevel_003.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.1, Assign different octetstring values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060101_TopLevel_003 { + const octetstring c_o1 := '00'O; + const octetstring c_o2 := '1Fa3B5'O; + const octetstring c_o3 := '07aDC4'O; + const octetstring c_o4 := '000000000000000000000000'O; + const octetstring c_o5 := 'FFFFFFFFFFFFFFFFFFFFFFFF'O; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NOTES b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NOTES new file mode 100644 index 0000000..b3f4afe --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NOTES @@ -0,0 +1,2 @@ +- TODO: missing positive semantic tests for all types except bitstring +- TODO: missing negative tests for universal charstring \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_001.ttcn new file mode 100644 index 0000000..641b8be --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted bitstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_001 { + type bitstring MyListOfBitStrings ('01'B, '10'B, '11'B); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_001() runs on GeneralComp { + var MyListOfBitStrings v_b := '00'B; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_002.ttcn new file mode 100644 index 0000000..cee1165 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_002.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted hexstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_002 { + type hexstring MyListOfHexStrings ('01'H, '10'H); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_002() runs on GeneralComp { + var MyListOfHexStrings v_h := '00'H; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_003.ttcn new file mode 100644 index 0000000..40246bf --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_003.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted octetstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_003 { + type octetstring MyListOfOctetStrings ('01'O, '10'O); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_003() runs on GeneralComp { + var MyListOfOctetStrings v_h := '00'O; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_004.ttcn new file mode 100644 index 0000000..4f62c37 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_004.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_004 { + type charstring MyCharstr ("a", "abc"); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_004() runs on GeneralComp { + var MyCharstr v_b := "d"; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_005.ttcn new file mode 100644 index 0000000..dc0caf1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_005.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted integer. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_005 { + type integer MyInt (1, 5); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_005() runs on GeneralComp { + var MyInt v_i := 2; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_006.ttcn new file mode 100644 index 0000000..55cdad6 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/NegSem_06010201_ListOfValues_006.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign values to restricted float. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010201_ListOfValues_006 { + type float MyFloat (1.0, 5.0); + + type component GeneralComp {} + + testcase TC_NegSem_06010201_ListOfValues_006() runs on GeneralComp { + var MyFloat v_f := 2.0; // value is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010201_ListOfValues_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/Sem_06010201_ListOfValues_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/Sem_06010201_ListOfValues_001.ttcn new file mode 100644 index 0000000..df81cdd --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010201_lists_of_values/Sem_06010201_ListOfValues_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.1, Assign invalid values to restricted bitstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010201_ListOfValues_001 { + type bitstring MyListOfBitStrings ('01'B, '10'B, '11'B); + + type component GeneralComp {} + + testcase TC_Sem_06010201_ListOfValues_001() runs on GeneralComp { + var MyListOfBitStrings v_b := '10'B; + if (v_b == '10'B){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_06010201_ListOfValues_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NOTES b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NOTES new file mode 100644 index 0000000..fd26073 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NOTES @@ -0,0 +1 @@ +- TODO: missing positive and negative semantic tests for all types except bitstring diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_001.ttcn new file mode 100644 index 0000000..87869cd --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted bitstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_001 { + type bitstring BitStrings1 ('0'B, '1'B ); + type bitstring BitStrings2 ('00'B, '01'B, '10'B, '10'B); + type bitstring BitStrings_1_2 (BitStrings1, BitStrings2); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_001() runs on GeneralComp { + var BitStrings_1_2 v_b := '11'B; // 11 is not defined by the type + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_002.ttcn new file mode 100644 index 0000000..ff6d735 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_002.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted hexstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_002 { + type hexstring HexStrings1 ('FE80'H, '01'H ); + type hexstring HexStrings2 ('00'H, '7F'H, 'B8'H, 'A0'H); + type hexstring HexStrings_1_2 (HexStrings1, HexStrings2); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_002() runs on GeneralComp { + var HexStrings_1_2 v_b; + v_b := 'FE70'H; //FE70 value is not defined by any hexstrings + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_003.ttcn new file mode 100644 index 0000000..0c710f0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_003.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted octetstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_003 { + type octetstring Firstoctetstrings('0036'O,'0050'O); //30 and 40 in decimal + type octetstring Secondtoctetstrings ('0074'O,'0120'O); //50 and 60 in decimal + type octetstring octetStrings_1_2 (Firstoctetstrings, Secondtoctetstrings); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_003() runs on GeneralComp { + var octetStrings_1_2 v_b; + v_b := '0014'O; // '0014'O value is not defined + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_004.ttcn new file mode 100644 index 0000000..1805685 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_004.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_004 { + type charstring Firstcharstrings("abc", "def"); + type charstring Secondcharstrings("ghi", "jkl"); + type charstring charStrings_1_2 (Firstcharstrings,Secondcharstrings); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_004() runs on GeneralComp { + var charStrings_1_2 v_b; + v_b := "xyz"; // invalid charsting + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_005.ttcn new file mode 100644 index 0000000..6521c63 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_005.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted universal charstrings. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_005 { + type universal charstring unicharString1 ("0" .. "9","A".."Z"); // charstring between "0" and "9" and "A".."Z" + type universal charstring unicharString2 ("a".."z"); // charstring between "a" to "z" + type universal charstring unicharStrings_1_2 (unicharString1, unicharString2); + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_005() runs on GeneralComp { + var unicharStrings_1_2 v_b; + v_b:="?"; // invalid + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_006.ttcn new file mode 100644 index 0000000..8ab99c0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_006.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted integers. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_006 { + type integer Integer1 (0..9 ); + type integer Integer2 (20..30); + type integer Integer_1_2 (Integer1, Integer2); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_006() runs on GeneralComp { + var Integer_1_2 v_b; + v_b := 15; //invalid + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_007.ttcn new file mode 100644 index 0000000..4c2b0cd --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_007.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted floats. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_007 { + type float Float1 (1.0E0..9E0); //float values between 1 and 9 + type float Float2 (2.0E1..3.0E1); //float values between 20 and 30 + type float Float_1_2 (Float1, Float2); + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_007() runs on GeneralComp { + var Float_1_2 v_b; + v_b := 15.5E0; //invalid + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_008.ttcn new file mode 100644 index 0000000..ab30cfb --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_008.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted boolean value. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_008 { + type boolean MyBoolean1 (false); //only "false" is accepted + + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_008() runs on GeneralComp { + var MyBoolean1 v_b; + v_b := true; // invalid + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010202_ListOfTypes_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_009.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_009.ttcn new file mode 100644 index 0000000..c9bfdc1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/NegSem_06010202_ListOfTypes_009.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign invalid values to list of types restricted verdicttype. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010202_ListOfTypes_009 { + type verdicttype Myverdict1 (pass, error); //only "pass" and "error" values are listed + type verdicttype Myverdict2 (inconc, none); //only "inconc" and "none" values are listed + type verdicttype Myverdict_1_2 (Myverdict1, Myverdict2); + + + type component GeneralComp {} + + testcase TC_NegSem_06010202_ListOfTypes_009() runs on GeneralComp { + var Myverdict_1_2 v_b; + v_b := fail; //invalid + setverdict(pass); + } + control{ + execute(TC_NegSem_06010202_ListOfTypes_009()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_001.ttcn new file mode 100644 index 0000000..c8b3414 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted bitstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_001 { + type bitstring BitStrings1 ('0'B, '1'B ); + type bitstring BitStrings2 ('00'B, '01'B, '10'B, '11'B); + type bitstring BitStrings_1_2 (BitStrings1, BitStrings2); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_001() runs on GeneralComp { + var BitStrings_1_2 v_b; + v_b := '10'B; + v_b := '1'B; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_002.ttcn new file mode 100644 index 0000000..8f403d4 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_002.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted hexstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_002 { + type hexstring HexStrings1 ('FE80'H, '01'H ); + type hexstring HexStrings2 ('00'H, '7F'H, 'B8'H, 'A0'H); + type hexstring HexStrings_1_2 (HexStrings1, HexStrings2); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_002() runs on GeneralComp { + var HexStrings_1_2 v_b; + v_b := 'FE80'H; //FE80 value is defined by the type HexStrings1 + v_b := '7F'H; //7F value is defined by the type HexStrings2 + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_003.ttcn new file mode 100644 index 0000000..d7b5dd1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_003.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted octetstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_003 { + type octetstring Firstoctetstrings('0036'O,'0050'O); //30 and 40 in decimal + type octetstring Secondtoctetstrings ('0074'O,'0120'O); //50 and 60 in decimal + type octetstring octetStrings_1_2 (Firstoctetstrings, Secondtoctetstrings); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_003() runs on GeneralComp { + var octetStrings_1_2 v_b; + v_b := '0074'O; // '0074'O value is defined by the type Secondtoctetstrings + v_b := '0050'O; //'0050'O value is defined by the type Firstoctetstrings + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_004.ttcn new file mode 100644 index 0000000..cb368f6 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_004.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted charstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_004 { + type charstring Firstcharstrings("abc", "def"); + type charstring Secondcharstrings("ghi", "jkl"); + type charstring charStrings_1_2 (Firstcharstrings,Secondcharstrings); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_004() runs on GeneralComp { + var charStrings_1_2 v_b; + v_b := "abc"; + v_b := "jkl"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_005.ttcn new file mode 100644 index 0000000..e80fb8d --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_005.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types unicharstring allows non-printable characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_005 { + type universal charstring unicharString1 ("0" .. "9","A".."Z"); // charstring between "0" and "9" and "A".."Z" + type universal charstring unicharString2 ("a".."z"); // charstring between "a" to "z" + type universal charstring unicharStrings_1_2 (unicharString1, unicharString2); + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_006() runs on GeneralComp { + var unicharStrings_1_2 v_b; + v_b :="5"; + v_b :="H"; + v_b:="j"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_006.ttcn new file mode 100644 index 0000000..900d535 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_006.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted integers. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_006 { + type integer Integer1 (0..9 ); + type integer Integer2 (20..30); + type integer Integer_1_2 (Integer1, Integer2); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_006() runs on GeneralComp { + var Integer_1_2 v_b; + v_b := 5; + v_b := 25; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_007.ttcn new file mode 100644 index 0000000..2b53b46 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_007.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted floats. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_007 { + type float Float1 (1.0E0..9E0); //float values between 1 and 9 + type float Float2 (2.0E1..3.0E1); //float values between 20 and 30 + type float Float_1_2 (Float1, Float2); + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_007() runs on GeneralComp { + var Float_1_2 v_b; + v_b := 5.5E0; //5.5 is between 1 and 9 + v_b := 2.55E1; //25.5 is between 20 and 30 + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_008.ttcn new file mode 100644 index 0000000..8dc1474 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_008.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted boolean value. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_008 { + type boolean MyBoolean1 (false,true); + + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_008() runs on GeneralComp { + var MyBoolean1 v_b; + v_b := false; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_009.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_009.ttcn new file mode 100644 index 0000000..d5a3fb4 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010202_lists_of_types/Sem_06010202_ListOfTypes_009.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.2, Assign values to list of types restricted verdicttype. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010202_ListOfTypes_009 { + type verdicttype Myverdict1 (pass, error); //only "pass" and "error" values are listed + type verdicttype Myverdict2 (inconc, none); //only "inconc" and "none" values are listed + type verdicttype Myverdict_1_2 (Myverdict1, Myverdict2); + + + type component GeneralComp {} + + testcase TC_Sem_06010202_ListOfTypes_009() runs on GeneralComp { + var Myverdict_1_2 v_b; + v_b := pass; + v_b := none; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010202_ListOfTypes_009()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_001.ttcn new file mode 100644 index 0000000..58550ad --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to restricted integer. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_001 { + type integer MyIntegerRange (0 .. 255); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_001() runs on GeneralComp { + var MyIntegerRange v_i := -1; // -1 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_002.ttcn new file mode 100644 index 0000000..35026b8 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_002.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to restricted integer. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_002 { + type integer MyIntegerRange (-infinity .. 0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_002() runs on GeneralComp { + var MyIntegerRange v_i := 1; // 1 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_003.ttcn new file mode 100644 index 0000000..c446be6 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_003.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assure that not_a_number is not allowed in float range subtyping. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_003 { + // causes an error as not_a_number is not allowed in range subtyping + type float MyFloatRange (-infinity .. not_a_number); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_003() runs on GeneralComp { + var MyFloatRange v_i; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_004.ttcn new file mode 100644 index 0000000..e857b51 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_004.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to restricted integer with exclusive bounds. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_004 { + type integer MyIntegerRange (!-3 .. 0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_004() runs on GeneralComp { + var MyIntegerRange v_i := -3; // -3 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_005.ttcn new file mode 100644 index 0000000..18ed515 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_005.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to restricted integer with exclusive bounds. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_005 { + type integer MyIntegerRange (-infinity .. !0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_005() runs on GeneralComp { + var MyIntegerRange v_i := 0; // 0 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_006.ttcn new file mode 100644 index 0000000..28a7c4d --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_006.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign range to boolean not permitted. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_006 { + // only restrictions for integer, float, charstring and universal charstring are allowed in ranges + type integer MyBooleanRange (false .. true); // should be rejected + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_006() runs on GeneralComp { + var MyBooleanRange v_b1; + v_b1 := true; + v_b1 := false; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_007.ttcn new file mode 100644 index 0000000..a83bcc0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_007.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_007 { + type charstring MyCharstringRange (!"a"..!"f"); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_007() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "a"; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_008.ttcn new file mode 100644 index 0000000..1373d1a --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_008.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_008 { + type charstring MyCharstringRange ("a"..!"f"); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_008() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "f"; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_009.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_009.ttcn new file mode 100644 index 0000000..9f9fa40 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_009.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_009 { + type charstring MyCharstringRange ("a".."f"); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_009() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "g"; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_009()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_010.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_010.ttcn new file mode 100644 index 0000000..ab33052 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_010.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to restricted float. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_010 { + type float MyFloatRange (-infinity .. 0.0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_010() runs on GeneralComp { + var MyFloatRange v_f := 1.0; // 1.0 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_010()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_011.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_011.ttcn new file mode 100644 index 0000000..544fa5e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_011.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to range restricted float. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_011 { + type float MyFloatRange (-5.0 .. 0.0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_011() runs on GeneralComp { + var MyFloatRange v_f := 10.0; // 10.0 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_011()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_012.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_012.ttcn new file mode 100644 index 0000000..ddcfbb1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_012.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid values to range excluded restricted float. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_012 { + type float MyFloatRange (-1.0 .. !10.0); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_012() runs on GeneralComp { + var MyFloatRange v_f := 10.0; // 10.0 is outside range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_012()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_013.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_013.ttcn new file mode 100644 index 0000000..3a571d5 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_013.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained universal charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_013 { + type universal charstring MyUCharString (char(0, 0, 1, 111) .. !char(0, 0, 1, 113)); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_013() runs on GeneralComp { + var MyUCharString v_uc1; + v_uc1 := char(0, 0, 1, 100); // out of range + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_013()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_014.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_014.ttcn new file mode 100644 index 0000000..15bc69b --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_014.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained universal charstring with mixed bounds. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_014 { + type universal charstring MyUCharString (char(0, 0, 1, 111) .. !char(0, 0, 1, 113)); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_014() runs on GeneralComp { + var MyUCharString v_uc1; + v_uc1 := char(0, 0, 1, 113); // 113 is excluded + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_014()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_015.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_015.ttcn new file mode 100644 index 0000000..099f0ee --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_015.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign invalid value to range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_015 { + type charstring MyCharstringRange ("a".."f"); + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_015() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "abcgef"; // g not allowed + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_015()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_016.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_016.ttcn new file mode 100644 index 0000000..06e3374 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_016.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Invalid value infinity for range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_016 { + type charstring MyCharstringRange ("a"..infinity); // infinity not allowed for charstring + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_016() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "abcgef"; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_016()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_017.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_017.ttcn new file mode 100644 index 0000000..9ca0abd --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/NegSem_06010203_Ranges_017.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Invalid value -infinity for range constrained charstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010203_Ranges_017 { + type charstring MyCharstringRange (-infinity.."d"); // -infinity not allowed for charstring + + type component GeneralComp {} + + testcase TC_NegSem_06010203_Ranges_017() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "abcgef"; + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010203_Ranges_017()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_001.ttcn new file mode 100644 index 0000000..9b18f5f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_001.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted integer. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_001 { + type integer MyIntegerRange (0 .. 255); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_001() runs on GeneralComp { + var MyIntegerRange v_i; + v_i := 0; + v_i := 100; + v_i := 255; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_002.ttcn new file mode 100644 index 0000000..1cc44b5 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to infinity range restricted integer. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_002 { + type integer MyIntegerRange1 (-infinity .. 0); + type integer MyIntegerRange2 (0 .. infinity); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_002() runs on GeneralComp { + var MyIntegerRange1 v_i1; + var MyIntegerRange2 v_i2; + v_i1 := 0; + v_i1 := -100; + v_i1 := -200000; + v_i2 := 0; + v_i2 := 100; + v_i2 := 200000; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_003.ttcn new file mode 100644 index 0000000..fadbd74 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_003.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted integer with exclusive bounds. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_003 { + type integer MyIntegerRange1 (!0 .. 255); + type integer MyIntegerRange2 (0 .. !255); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_003() runs on GeneralComp { + var MyIntegerRange1 v_i1; + var MyIntegerRange2 v_i2; + v_i1 := 1; // 0 not allowed + v_i1 := 100; + v_i1 := 255; + v_i2 := 0; + v_i2 := 100; + v_i2 := 254; // 255 not allowed + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_004.ttcn new file mode 100644 index 0000000..4defcd8 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_004.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted cahrstring with inclusive bounds. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_004 { + type charstring MyCharstringRange ("a".."f"); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_004() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "a"; + v_c1 := "c"; + v_c1 := "f"; + v_c1 := "acdef"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_005.ttcn new file mode 100644 index 0000000..7b639d7 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_005.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted cahrstring with exclusive bounds. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_005 { + type charstring MyCharstringRange (!"a"..!"f"); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_005() runs on GeneralComp { + var MyCharstringRange v_c1; + v_c1 := "b"; + v_c1 := "c"; + v_c1 := "d"; + v_c1 := "e"; + v_c1 := "bcde"; + v_c1 := "bbeeebccdee"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_006.ttcn new file mode 100644 index 0000000..3276205 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted cahrstring with mixed bounds. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_006 { + type charstring MyCahrstringRange (!"a".."f"); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_006() runs on GeneralComp { + var MyCahrstringRange v_c1; + v_c1 := "b"; + v_c1 := "c"; + v_c1 := "d"; + v_c1 := "e"; + v_c1 := "f"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_007.ttcn new file mode 100644 index 0000000..b83e87e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_007.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted universal charstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_007 { + type universal charstring MyUCharString (char(0, 0, 1, 111) .. char(0, 0, 1, 113)); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_007() runs on GeneralComp { + var MyUCharString v_uc1; + v_uc1 := char(0, 0, 1, 111); + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_008.ttcn new file mode 100644 index 0000000..19ee20a --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010203_ranges/Sem_06010203_Ranges_008.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.1.2.3, Assign values to range restricted universal charstring with mixed bounds. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010203_Ranges_008 { + // Defines a string type of any length with each character within the range (111 or 112) + type universal charstring MyUCharString (char(0, 0, 1, 111) .. !char(0, 0, 1, 113)); + + type component GeneralComp {} + + testcase TC_Sem_06010203_Ranges_008() runs on GeneralComp { + var MyUCharString v_uc1; + v_uc1 := char(0, 0, 1, 111); + v_uc1 := char(0, 0, 1, 112); + v_uc1 := char(0, 0, 1, 112) & char(0, 0, 1, 112); + v_uc1 := char(0, 0, 1, 112) & char(0, 0, 1, 111) & char(0, 0, 1, 112); + setverdict(pass); + } + + control{ + execute(TC_Sem_06010203_Ranges_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NOTES b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NOTES new file mode 100644 index 0000000..fd26073 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NOTES @@ -0,0 +1 @@ +- TODO: missing positive and negative semantic tests for all types except bitstring diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_001.ttcn new file mode 100644 index 0000000..9cdb018 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted bitstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_001 { + type bitstring BitStrings length(1 .. 2); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_001() runs on GeneralComp { + var BitStrings v_b := '111'B; // value length 3 != type length is 1 or 2 + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_002.ttcn new file mode 100644 index 0000000..5b4bc15 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_002.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted bitstring. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_002 { + type bitstring BitStrings length(2); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_002() runs on GeneralComp { + var BitStrings v_b := '111'B; // value length 3 != type length is 2 + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_003.ttcn new file mode 100644 index 0000000..d112ffb --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_003.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted hexstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_003 { + type hexstring HexStrings1 length(3); //3 hexadecimal digits + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_003() runs on GeneralComp { + var HexStrings1 v_b1; + v_b1 := 'FE00'H; //invalid length 4 + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_004.ttcn new file mode 100644 index 0000000..623e68e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_004.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted hexstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_004 { + type hexstring HexStrings1 length(2 .. infinity); //hexadecimal digits between 2 and 5 + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_004() runs on GeneralComp { + var HexStrings1 v_b1; + v_b1 := 'A'H; //invalid length 1 + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_005.ttcn new file mode 100644 index 0000000..e86fa23 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_005.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted octetstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_005 { + type octetstring ocStrings1 length(4); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_005() runs on GeneralComp { + var ocStrings1 v_b1; + v_b1 := 'FE8001'O; //3 octets invalid length + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_006.ttcn new file mode 100644 index 0000000..9622ab3 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_006.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted octetstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_006 { + type octetstring ocStrings1 length(2..infinity); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_006() runs on GeneralComp { + var ocStrings1 v_b1; + v_b1 := 'FE'O; //1 octet invalid length + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_007.ttcn new file mode 100644 index 0000000..c689f9c --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_007.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted charstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_007{ + type charstring myStrings1 length(2..infinity); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_007() runs on GeneralComp { + var myStrings1 v_b1; + v_b1 := "a"; //1 charc. length + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_008.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_008.ttcn new file mode 100644 index 0000000..b37c19e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSem_06010204_StringLenghtRestrict_008.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign invalid values to length restricted charstring + ** @verdict pass reject + ***************************************************/ +module NegSem_06010204_StringLenghtRestrict_008{ + type charstring myStrings1 length(2); + + type component GeneralComp {} + + testcase TC_NegSem_06010204_StringLenghtRestrict_008() runs on GeneralComp { + var myStrings1 v_b1; + v_b1 := "abc"; //2 characters length req. + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010204_StringLenghtRestrict_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_001.ttcn new file mode 100644 index 0000000..0d5f8f5 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_001.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, upper boundary should be greater than lower boundary in string lenght restictions + ** @verdict pass reject + ***************************************************/ +module NegSyn_06010204_StringLenghtRestrict_001 { + type hexstring HexStrings1 length(3 .. 1); // upper bounder is smaller than lower bound + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_002.ttcn new file mode 100644 index 0000000..411b78a --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/NegSyn_06010204_StringLenghtRestrict_002.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, boundary integers should be non negative integers + ** @verdict pass reject + ***************************************************/ +module NegSyn_06010204_StringLenghtRestrict_001 { + type hexstring HexStrings1 length(0 .. -5); // negative boundary for length + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_001.ttcn new file mode 100644 index 0000000..8c8cab3 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign values to list of types restricted bitstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010204_StringLenghtRestrict_001 { + type bitstring BitStrings1 length(1 .. 2); + type bitstring BitStrings2 length(5); + type bitstring BitStrings3 length(0 .. infinity); + + type component GeneralComp {} + + testcase TC_Sem_06010204_StringLenghtRestrict_001() runs on GeneralComp { + var BitStrings1 v_b1; + var BitStrings2 v_b2; + var BitStrings3 v_b3; + v_b1 := '10'B; + v_b1 := '1'B; + v_b2 := '10000'B; + v_b3 := '111111'B; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010204_StringLenghtRestrict_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_002.ttcn new file mode 100644 index 0000000..fe00089 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign values to list of types restricted hexstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010204_StringLenghtRestrict_002 { + type hexstring HexStrings1 length(1 .. 2); + type hexstring HexStrings2 length(4); + type hexstring HexStrings3 length(0 .. infinity); + + type component GeneralComp {} + + testcase TC_Sem_06010204_StringLenghtRestrict_002() runs on GeneralComp { + var HexStrings1 v_b1; + var HexStrings2 v_b2; + var HexStrings3 v_b3; + v_b1 := 'F'H; + v_b1 := 'FE'H; + v_b2 := 'FE80'H; + v_b3 := 'FFFFFFFFFF'H; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010204_StringLenghtRestrict_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_003.ttcn new file mode 100644 index 0000000..f692f62 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_003.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign values to list of types restricted octetstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010204_StringLenghtRestrict_003 { + type octetstring ocStrings1 length(2 .. 4); + type octetstring ocStrings2 length(4); + type octetstring ocStrings3 length(0 .. infinity); + + type component GeneralComp {} + + testcase TC_Sem_06010204_StringLenghtRestrict_003() runs on GeneralComp { + var ocStrings1 v_b1; + var ocStrings2 v_b2; + var ocStrings3 v_b3; + v_b1 := 'FE80'O; //2 octets + v_b1 := 'FE8001'O; //3 octets + v_b2 := 'FE800201'O; //4 octets + v_b3 := 'FE830043'O; //4 octets + setverdict(pass); + } + + control{ + execute(TC_Sem_06010204_StringLenghtRestrict_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_004.ttcn new file mode 100644 index 0000000..6305b67 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010204_string_length_restrictions/Sem_06010204_StringLenghtRestrict_004.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.1.2.4, Assign values to list of types restricted charstring. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010204_StringLenghtRestrict_004 { + type charstring myStrings1 length(2 .. 4); //length between 2 and 4 characters + type charstring myStrings2 length(4); //fixed length 4 characters + type charstring myStrings3 length(0 .. infinity); //unlimited character length + + type component GeneralComp {} + + testcase TC_Sem_06010204_StringLenghtRestrict_004() runs on GeneralComp { + var myStrings1 v_b1; + var myStrings2 v_b2; + var myStrings3 v_b3; + v_b1 := "ab"; //2 characters + v_b1 := "abc"; //3 characters + v_b2 := "efgh"; //fixed 4 characters + v_b3 := "abcdefghijklm"; //unlimited + setverdict(pass); + } + + control{ + execute(TC_Sem_06010204_StringLenghtRestrict_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NOTES b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NOTES new file mode 100644 index 0000000..ffe1dc1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NOTES @@ -0,0 +1 @@ +- TODO: missing positive and negative semantic tests for universal charstring diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSem_06010205_StringPattern_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSem_06010205_StringPattern_001.ttcn new file mode 100644 index 0000000..823e46e --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSem_06010205_StringPattern_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign invalid values to pattern restricted character strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_06010205_StringPattern_001 { + type charstring MyString (pattern "?bc*xyz"); + + type component GeneralComp {} + + testcase TC_NegSem_06010205_StringPattern_001() runs on GeneralComp { + var MyString v_c := "abcyz"; // value missing x + setverdict(pass); + } + + control{ + execute(TC_NegSem_06010205_StringPattern_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_001.ttcn new file mode 100755 index 0000000..9da118a --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_001.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign values to pattern restricted character strings without @nocase modifier. + ** @verdict pass reject, noexecution + ***************************************************/ + +module NegSyn_06010205_StringPattern_001 { + type charstring MyString (pattern "abc*xyz"); //without @nocase + + type component GeneralComp {} + + testcase TC_NegSyn_06010205_StringPattern_001() runs on GeneralComp { + var MyString v_c; + v_c := "ABc1234xYz"; //error value is out of constraint: ABc + } + + control{ + execute(TC_NegSyn_06010205_StringPattern_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_002.ttcn new file mode 100755 index 0000000..409e819 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/NegSyn_06010205_StringPattern_002.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign quadruple values to pattern restricted character strings. + ** @verdict pass reject, noexecution + ***************************************************/ + +module NegSyn_06010205_StringPattern_002 { + type charstring MyString (pattern "\q{0,0,1,116}abc"); //error: not a legal character for the TTCN 3 charstring type + + + type component GeneralComp {} + + testcase TC_NegSyn_06010205_StringPattern_002() runs on GeneralComp { + var MyString v_c := "Ŵabc"; //error: not a legal character of the TTCN 3 charstring type + } + + control{ + execute(TC_NegSyn_06010205_StringPattern_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_001.ttcn new file mode 100644 index 0000000..ecc6c36 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign values to pattern restricted character strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010205_StringPattern_001 { + type charstring MyString (pattern "abc*xyz"); + + type component GeneralComp {} + + testcase TC_Sem_06010205_StringPattern_001() runs on GeneralComp { + var MyString v_c; + v_c := "abcxyz"; + v_c := "abc123xyz"; + v_c := "abc:xyz"; + v_c := "abc...xyz"; + v_c := "abc*xyz"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010205_StringPattern_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_002.ttcn new file mode 100644 index 0000000..ce84c65 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign values to pattern restricted character strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06010205_StringPattern_002 { + type charstring MyString (pattern "abc?xyz"); + + type component GeneralComp {} + + testcase TC_Sem_06010205_StringPattern_002() runs on GeneralComp { + var MyString v_c; + v_c := "abc1xyz"; + v_c := "abc:xyz"; + v_c := "abc.xyz"; + v_c := "abc*xyz"; + v_c := "abc?xyz"; + setverdict(pass); + } + + control{ + execute(TC_Sem_06010205_StringPattern_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_003.ttcn new file mode 100755 index 0000000..5646139 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010205_pattern_subtyping_of_character_string_types/Sem_06010205_StringPattern_003.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.1.2.5, Assign values to pattern restricted character strings with @nocase modifier. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: +When the "@nocase" modifier is used after the pattern keyword, the matching is evaluated in a case insensitive way. +*/ + +module Sem_06010205_StringPattern_003 { + type charstring MyString (pattern @nocase "abc*xyz"); // with @nocase modifier now characters from "A...Z" is also allowed + + type component GeneralComp {} + + testcase TC_Sem_06010205_StringPattern_003() runs on GeneralComp { + + var MyString v_c; + + //valid: + v_c := "ABc1234xyz"; + v_c := "aBC:xYz"; + v_c := "AbC.xyZ"; + v_c := "ABc*xYZ"; + v_c := "ABC?XYZ"; + setverdict(pass,"The resuls is: ",v_c); + } + + control{ + execute(TC_Sem_06010205_StringPattern_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_001.ttcn new file mode 100644 index 0000000..432f4a7 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.1, Assign invalid values to mixed restricted floats. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020601_MixingSubtype_001 { + type float lessThanPiAndNaN (-infinity .. 3142E-3, not_a_number); + + type component GeneralComp {} + + testcase TC_NegSem_0601020601_MixingSubtype_001() runs on GeneralComp { + var lessThanPiAndNaN v_f := 4.0; // value out of range + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020601_MixingSubtype_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_002.ttcn new file mode 100644 index 0000000..4dacfd3 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/NegSem_0601020601_MixingSubtype_002.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.1, Assign invalid values to mixed restricted integers. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020601_MixingSubtype_002 { + type integer MyInt (1, 5, 10, 100 .. infinity); + + type component GeneralComp {} + + testcase TC_NegSem_0601020601_MixingSubtype_002() runs on GeneralComp { + var MyInt v_i := 6; // value out of range + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020601_MixingSubtype_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_001.ttcn new file mode 100644 index 0000000..2d8235d --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.1, Assign values to mixed restricted floats. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020601_MixingSubtype_001 { + type float lessThanPiAndNaN (-infinity .. 3142E-3, not_a_number); + + type component GeneralComp {} + + testcase TC_Sem_0601020601_MixingSubtype_001() runs on GeneralComp { + var lessThanPiAndNaN v_f; + v_f := 3.14E0; + v_f := 0.0; + v_f := -4E40; + v_f := not_a_number; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020601_MixingSubtype_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_002.ttcn new file mode 100644 index 0000000..49f8bed --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020601_mixing_patterns_lists_and_ranges/Sem_0601020601_MixingSubtype_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.1, Assign values to mixed restricted integers. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020601_MixingSubtype_002 { + type integer MyInt (1, 5, 10, 100 .. infinity); + + type component GeneralComp {} + + testcase TC_Sem_0601020601_MixingSubtype_002() runs on GeneralComp { + var MyInt v_i; + v_i := 1; + v_i := 5; + v_i := 10; + v_i := 100; + v_i := 1000; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020601_MixingSubtype_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NOTES b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NOTES new file mode 100644 index 0000000..ffe1dc1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NOTES @@ -0,0 +1 @@ +- TODO: missing positive and negative semantic tests for universal charstring diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_001.ttcn new file mode 100644 index 0000000..4b96e0f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted character strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_001 { + type charstring MyString (pattern "?bc*xyz") length (5 .. 8); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_001() runs on GeneralComp { + var MyString v_c := "abcyz"; // value missing x + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_002.ttcn new file mode 100644 index 0000000..e6a0150 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_002.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted character strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_002 { + type charstring MyString (pattern "?bc*xyz") length (5 .. 8); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_002() runs on GeneralComp { + var MyString v_c := "abc123xyz"; // value length 9 exceeds 8 + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_003.ttcn new file mode 100644 index 0000000..c490bc0 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_003.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted character strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_003 { + type charstring MyString ("a".."z") length (3 .. 8); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_003() runs on GeneralComp { + var MyString v_c := "abc1xyz"; // char 1 not allowed + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_004.ttcn new file mode 100644 index 0000000..21e8cf1 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_004.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted bit strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_004 { + type bitstring MyString ('111'B, '101010'B, '111111'B) length (4 .. 8); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_004() runs on GeneralComp { + var MyString v_c := '111'B; // value lenght 3 not allowed + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_005.ttcn new file mode 100644 index 0000000..ce6f521 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_005.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted hex strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_005 { + type hexstring MyString ('1F1'H, '103A10'H, '111111'H) length (4 .. 8); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_005() runs on GeneralComp { + var MyString v_c := '1F1'H; // value lenght 3 not allowed + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_006.ttcn new file mode 100644 index 0000000..f715fa3 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/NegSem_0601020602_StringMixing_006.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign invalid values to mixed restricted octet strings. + ** @verdict pass reject + ***************************************************/ +module NegSem_0601020602_StringMixing_006 { + type octetstring MyString ('FF1111'O, '101010A3'O, 'FFFFFFFFFF'O) length (4); + + type component GeneralComp {} + + testcase TC_NegSem_0601020602_StringMixing_006() runs on GeneralComp { + var MyString v_c := 'FF1111'O; // value lenght 3 not allowed + setverdict(pass); + } + + control{ + execute(TC_NegSem_0601020602_StringMixing_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_001.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_001.ttcn new file mode 100644 index 0000000..1471097 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted character strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_001 { + type charstring MyString (pattern "abc*xyz") length (5 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_001() runs on GeneralComp { + var MyString v_c; + v_c := "abcxyz"; + v_c := "abc12xyz"; + v_c := "abc:xyz"; + v_c := "abc..xyz"; + v_c := "abc*xyz"; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_002.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_002.ttcn new file mode 100644 index 0000000..bf9ca0d --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_002.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted character strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_002 { + type charstring MyString ("a".."z") length (3 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_002() runs on GeneralComp { + var template MyString v_c; + v_c := "abc"; + v_c := "abcdefgh"; + v_c := pattern "abc?def"; + v_c := pattern "abc*xyz"; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_003.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_003.ttcn new file mode 100644 index 0000000..19ee2ef --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_003.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted character strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_003 { + type charstring MyString ("abcdef", "abc", "123abc") length (3 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_003() runs on GeneralComp { + var MyString v_c; + v_c := "123abc"; + v_c := "abc"; + v_c := "abcdef"; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_004.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_004.ttcn new file mode 100644 index 0000000..b79c216 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_004.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted bit strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_004 { + type bitstring MyString ('111'B, '101010'B, '111111'B) length (3 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_004() runs on GeneralComp { + var MyString v_c; + v_c := '111'B; + v_c := '101010'B; + v_c := '111111'B; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_005.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_005.ttcn new file mode 100644 index 0000000..063c441 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_005.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted hex strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_005 { + type hexstring MyString ('1F1'H, '103A10'H, '111111'H) length (3 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_005() runs on GeneralComp { + var MyString v_c; + v_c := '1F1'H; + v_c := '103A10'H; + v_c := '111111'H; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_006.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_006.ttcn new file mode 100644 index 0000000..46c9121 --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_006.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to mixed restricted octet strings. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0601020602_StringMixing_006 { + type octetstring MyString ('FF1111'O, '101010A3'O, 'FFFFFFFFFF'O) length (3 .. 8); + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_006() runs on GeneralComp { + var MyString v_c; + v_c := 'FF1111'O; + v_c := '101010A3'O; + v_c := 'FFFFFFFFFF'O; + setverdict(pass); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_007.ttcn b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_007.ttcn new file mode 100755 index 0000000..e93426f --- /dev/null +++ b/core_language/06_types_and_values/0601_basic_types_and_values/060102_subtyping_of_basic_types/06010206_mixing_subtyping_mechanisms/0601020602_using_length_restriction_with_other_constraints/Sem_0601020602_StringMixing_007.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.1.2.6.2, Assign values to pattern restricted character strings using @nocase modifier + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: +When the "@nocase" modifier is used after the pattern keyword, the matching is evaluated in a case insensitive way +*/ + +module Sem_0601020602_StringMixing_007 { + type charstring unicharString (pattern "[a-z]#(1,5)") length (1..5); // charstring between "a".."z" and length from 1 to 5 + type charstring unicharString_nocase (pattern @nocase "[a-z]#(1,5)") length (1..5); // with @nocase modifier now characters from "A...Z" is also allowed + + type component GeneralComp {} + + testcase TC_Sem_0601020602_StringMixing_007() runs on GeneralComp { + var unicharString v_a; //without @nocase modifier + var unicharString_nocase v_b; //with @nocase modifier + v_a :="abxyz"; + v_b :=v_a; //v_b :="abxyz"; + v_b :="AbXyZ"; + + setverdict(pass,"The result is: ",v_b); + } + + control{ + execute(TC_Sem_0601020602_StringMixing_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_001.ttcn new file mode 100644 index 0000000..5f03d78 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, The dot notation used in record type definitions is correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_06020101_ReferencingRecordFields_001 { + +type component GeneralComp { +} + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + type R ConstrainedRecord ({1, omit}, {2, "xyz"}, {3, "zyx"}) ; + + type ConstrainedRecord.field1 MyInteger; + +testcase TC_NegSem_06020101_ReferencingRecordFields_001() runs on GeneralComp { + + var MyInteger v_int := 11; // assignment from outside of the carried over (1 .. 10) range constraint + +} + +control { + execute(TC_NegSem_06020101_ReferencingRecordFields_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_002.ttcn new file mode 100644 index 0000000..332b7f6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that record fields cannot reference themselves + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Fields of record type definitions shall not reference themselves. + +module NegSem_06020101_ReferencingRecordFields_002 { + + type component GeneralComp { + } + + type record R { + integer field1, + R.field2 field2 optional, // this circular reference is NOT ALLOWED + boolean field3 + } + + testcase TC_NegSem_06020101_ReferencingRecordFields_002() runs on GeneralComp { + var R v_rec := { field1 := 1, field2 := omit, field3 := true }; + if (v_rec.field1 == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_06020101_ReferencingRecordFields_002()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_003.ttcn new file mode 100644 index 0000000..ebab189 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_003.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that referencing uninitialized record on the right hand of an assignment is not allowed + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Referencing a subfield of an uninitialized or omitted record field or value on the right +// hand side of an assignment shall cause an error. + +module NegSem_06020101_ReferencingRecordFields_003 { + + type component GeneralComp { + } + + type record R { + record { + integer subfield1 + } field1, + charstring field2 optional + } + + testcase TC_NegSem_06020101_ReferencingRecordFields_003() runs on GeneralComp { + var R v_rec; + v_rec.field2 := "abc"; + if (v_rec.field1.subfield1 == 5) { + setverdict(fail); + } else { + setverdict(pass); + } + } + + control { + execute(TC_NegSem_06020101_ReferencingRecordFields_003()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_004.ttcn new file mode 100644 index 0000000..42d4861 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/NegSem_06020101_ReferencingRecordFields_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that referencing omitted record on the right hand of an assignment is not allowed + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Referencing a subfield of an uninitialized or omitted record field or value on the right +// hand side of an assignment shall cause an error. + +module NegSem_06020101_ReferencingRecordFields_004 { + + type component GeneralComp { + } + + type record R { + record { + integer subfield1 + } field1 optional, + charstring field2 optional + } + + testcase TC_NegSem_06020101_ReferencingRecordFields_004() runs on GeneralComp { + var R v_rec; + v_rec.field1 := omit; + v_rec.field2 := "abc"; + if (v_rec.field1.subfield1 == 5) { + setverdict(fail); + } else { + setverdict(pass); + } + } + + control { + execute(TC_NegSem_06020101_ReferencingRecordFields_004()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_001.ttcn new file mode 100644 index 0000000..d0c410b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, The dot notation used in record type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06020101_ReferencingRecordFields_001 { + +type component GeneralComp { +} + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + type R ConstrainedRecord ({1, omit}, {2, "xyz"}, {3, "zyx"}) ; + + type ConstrainedRecord.field1 MyInteger; + +testcase TC_Sem_06020101_ReferencingRecordFields_001() runs on GeneralComp { + + var MyInteger v_int := 9; // v_int is allowed in (1 .. 10) range + + if (v_int==9) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06020101_ReferencingRecordFields_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_002.ttcn new file mode 100644 index 0000000..9442623 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_002.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, The dot notation used in record type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06020101_ReferencingRecordFields_002 { + +type component GeneralComp { +} + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + type R ConstrainedRecord ({1, omit}, {2, "xyz"}, {3, "zyx"}) ; + + type ConstrainedRecord.field2 MyChar; + +testcase TC_Sem_06020101_ReferencingRecordFields_002() runs on GeneralComp { + + var MyChar v_char := "abc"; // any character string is allowed + + if (v_char=="abc") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06020101_ReferencingRecordFields_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_003.ttcn new file mode 100644 index 0000000..ab535f3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, The dot notation used in record type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06020101_ReferencingRecordFields_003 { + +type component GeneralComp { +} + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + type R.field1 MyInteger; + +testcase TC_Sem_06020101_ReferencingRecordFields_003() runs on GeneralComp { + + var MyInteger v_int := 9; // v_int is allowed in (1 .. 10) range + + if (v_int==9) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06020101_ReferencingRecordFields_003()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_004.ttcn new file mode 100644 index 0000000..bf46e7b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, The dot notation used in record type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06020101_ReferencingRecordFields_004 { + +type component GeneralComp { +} + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + + type R.field2 MyChar; + +testcase TC_Sem_06020101_ReferencingRecordFields_004() runs on GeneralComp { + + var MyChar v_char := "abc"; // any character string is allowed + + if (v_char=="abc") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06020101_ReferencingRecordFields_004()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_005.ttcn new file mode 100644 index 0000000..5a4fd9b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_005.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that dot notation can be used for referencing elements on the right hand side of an assignement + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements of a record shall be referenced by the dot notation TypeIdOrExpression.ElementId, +// where TypeIdOrExpression resolves to the name of a structured type or an expression of +// a structured type such as variable, formal parameter, module parameter, constant, template, +// or function invocation. ElementId shall resolve to the name of a field in the structured +// type. + +module Sem_06020101_ReferencingRecordFields_005 { + + type component GeneralComp { + } + + type record R { + integer field1 (1 .. 10), + charstring field2 optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_005() runs on GeneralComp { + var R v_rec := { field1 := 5, field2 := "abc" }; + if (v_rec.field1 == 5) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_005()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_006.ttcn new file mode 100644 index 0000000..9932bee --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_006.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that dot notation can be used for referencing sub-elements on the right hand side of an assignement + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements of a record shall be referenced by the dot notation TypeIdOrExpression.ElementId, +// where TypeIdOrExpression resolves to the name of a structured type or an expression of +// a structured type such as variable, formal parameter, module parameter, constant, template, +// or function invocation. ElementId shall resolve to the name of a field in the structured +// type. + +module Sem_06020101_ReferencingRecordFields_006 { + + type component GeneralComp { + } + + type record R { + record { + integer subfield1 + } field1, + charstring field2 optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_006() runs on GeneralComp { + var R v_rec := { field1 := { subfield1 := 5 }, field2 := "abc" }; + if (v_rec.field1.subfield1 == 5) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_006()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_007.ttcn new file mode 100644 index 0000000..051ae94 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_007.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that dot notation can be used for referencing function invocation results + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements of a record shall be referenced by the dot notation TypeIdOrExpression.ElementId, +// where TypeIdOrExpression resolves to the name of a structured type or an expression of +// a structured type such as variable, formal parameter, module parameter, constant, template, +// or function invocation. ElementId shall resolve to the name of a field in the structured +// type. + +module Sem_06020101_ReferencingRecordFields_007 { + + type component GeneralComp { + } + + type record R { + record { + integer subfield1 + } field1, + charstring field2 optional + } + + function f_retVal() return R { + return { field1 := { subfield1 := 5 }, field2 := "abc" }; + } + + testcase TC_Sem_06020101_ReferencingRecordFields_007() runs on GeneralComp { + if (f_retVal().field1.subfield1 == 5) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_007()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_008.ttcn new file mode 100644 index 0000000..3a68ecd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_008.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that mandatory fields are created and uninitialized when expanding uninitialized record values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_008 { + + type component GeneralComp { + } + + type record R { + integer field1, + charstring field2 + } + + testcase TC_Sem_06020101_ReferencingRecordFields_008() runs on GeneralComp { + var R v_rec; + v_rec.field2 := "abc"; + if (isbound(v_rec) and not isbound(v_rec.field1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_008()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_009.ttcn new file mode 100644 index 0000000..583c32a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_009.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that optional fields are created and uninitialized when expanding uninitialized record values (explicit omit) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_009 { + + type component GeneralComp { + } + + type record R { + integer field1 optional, + charstring field2 + } + + testcase TC_Sem_06020101_ReferencingRecordFields_009() runs on GeneralComp { + var R v_rec; + v_rec.field2 := "abc"; + if (isbound(v_rec) and not isbound(v_rec.field1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_009()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_010.ttcn new file mode 100644 index 0000000..cbee894 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_010.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that optional fields are created and omitted when expanding uninitialized record values (implicit omit) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_010 { + + type component GeneralComp { + } + + type record R { + integer field1 optional, + charstring field2 + } + + testcase TC_Sem_06020101_ReferencingRecordFields_010() runs on GeneralComp { + var R v_rec; + v_rec.field2 := "abc"; + if (v_rec == { omit, "abc" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_010()); + } +} with { optional "implicit omit" } diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_011.ttcn new file mode 100644 index 0000000..d551273 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_011.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that referencing fields nested deep inside uninitialized record invokes expansion + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_011 { + + type component GeneralComp { + } + + type record R { + record { + record { + integer nested1, + integer nested2 + } subfield1, + integer subfield2 + } field1, + charstring field2 + } + + testcase TC_Sem_06020101_ReferencingRecordFields_011() runs on GeneralComp { + var R v_rec; + v_rec.field1.subfield1.nested1 := 0; + if (isbound(v_rec) and isbound(v_rec.field1) and not isbound(v_rec.field2) and + isbound(v_rec.field1.subfield1) and not isbound(v_rec.field1.subfield2) and + v_rec.field1.subfield1.nested1 == 0 and not isbound(v_rec.field1.subfield1.nested2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_011()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_012.ttcn new file mode 100644 index 0000000..1ae5439 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_012.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that expansion of uninitialized record values works when other constructive types are involved + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_012 { + + type component GeneralComp { + } + + type record R { + union { + record { + integer nested1, + integer nested2 + } option1[2], + integer option2 + } field1, + charstring field2 + } + + testcase TC_Sem_06020101_ReferencingRecordFields_012() runs on GeneralComp { + var R v_rec; + v_rec.field1.option1[0].nested1 := 0; + if (isbound(v_rec) and isbound(v_rec.field1) and not isbound(v_rec.field2) and + match(v_rec.field1.option1[0].nested1, 0) and not isbound(v_rec.field1.option1[0].nested2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_012()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_013.ttcn new file mode 100644 index 0000000..f6fc746 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_013.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that mandatory fields are created and uninitialized when expanding omitted record values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_013 { + + type component GeneralComp { + } + + type record R { + record { + integer field1, + charstring field2 + } sub optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_013() runs on GeneralComp { + var R v_rec; + v_rec.sub := omit; + v_rec.sub.field2 := "abc"; + if (isbound(v_rec.sub) and not isbound(v_rec.sub.field1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_013()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_014.ttcn new file mode 100644 index 0000000..873e3e4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_014.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that optional fields are created and uninitialized when expanding omitted record values (explicit omit) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_014 { + + type component GeneralComp { + } + + type record R { + record { + integer field1 optional, + charstring field2 + } sub optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_014() runs on GeneralComp { + var R v_rec; + v_rec.sub := omit; + v_rec.sub.field2 := "abc"; + if (isbound(v_rec.sub) and not isbound(v_rec.sub.field1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_014()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_015.ttcn new file mode 100644 index 0000000..d2a2302 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_015.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that optional fields are created and omitted when expanding omitted record values (implicit omit) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_015 { + + type component GeneralComp { + } + + type record R { + record { + integer field1 optional, + charstring field2 + } sub optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_015() runs on GeneralComp { + var R v_rec; + v_rec.sub := omit; + v_rec.sub.field2 := "abc"; + if (v_rec.sub == { omit, "abc" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_015()); + } +} with { optional "implicit omit" } diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_016.ttcn new file mode 100644 index 0000000..e8e78ce --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_016.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that referencing fields nested deep inside omitted record invokes expansion + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_016 { + + type component GeneralComp { + } + + type record R { + record { + record { + record { + integer nested1, + integer nested2 + } subfield1, + integer subfield2 + } field1, + charstring field2 + } sub optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_016() runs on GeneralComp { + var R v_rec; + v_rec.sub := omit; + v_rec.sub.field1.subfield1.nested1 := 0; + if (isbound(v_rec.sub) and isbound(v_rec.sub.field1) and not isbound(v_rec.sub.field2) and + isbound(v_rec.sub.field1.subfield1) and not isbound(v_rec.sub.field1.subfield2) and + match(v_rec.sub.field1.subfield1.nested1, 0) and not isbound(v_rec.sub.field1.subfield1.nested2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_016()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_017.ttcn new file mode 100644 index 0000000..1f4cf17 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/06020101_referencing_fields_of_record_type/Sem_06020101_ReferencingRecordFields_017.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.1.1, verify that expansion of omitted record values works when other constructive types are involved + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing a field of an uninitialized record value or field or omitted field +// (including omitting a field at a higher level of the embedding hierarchy) on the left +// hand side of an assignment, the reference shall recursively be expanded up to and +// including the depth of the referenced subfield as follows: +// a) When expanding a value or value field of record type, the subfield referenced in +// the dot notation shall be set to present and all unreferenced mandatory subfields shall +// be left uninitialized; when the assignment is used in a scope where the optional +// attribute is equal to "explicit omit", all unreferenced optional subfields shall be +// left undefined. When the assignment is used in a scope where the optional attribute is +// equal to "implicit omit", all unreferenced optional subfields shall be set to omit. +// b) Expansion of record of/set of/array, union and set values and intermediate fields +// shall follow the rules of item a) in clauses 6.2.3 and 6.2.5.1, and clause 6.2.2.1 +// correspondingly. +// At the end of the expansion, the value at the right hand side of the assignment shall +// be assigned to the referenced subfield. + +module Sem_06020101_ReferencingRecordFields_017 { + + type component GeneralComp { + } + + type record R { + record { + union { + record { + integer nested1, + integer nested2 + } option1[2], + integer option2 + } field1, + charstring field2 + } sub optional + } + + testcase TC_Sem_06020101_ReferencingRecordFields_017() runs on GeneralComp { + var R v_rec; + v_rec.sub := omit; + v_rec.sub.field1.option1[0].nested1 := 0; + if (isbound(v_rec) and isbound(v_rec.sub.field1) and not isbound(v_rec.sub.field2) and + match(v_rec.sub.field1.option1[0].nested1, 0) and not isbound(v_rec.sub.field1.option1[0].nested2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020101_ReferencingRecordFields_017()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSem_060201_RecordTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSem_060201_RecordTypeValues_001.ttcn new file mode 100644 index 0000000..98dead0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSem_060201_RecordTypeValues_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451, re-numbering done by STF 470 and 487 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060201_RecordTypeValues_001 { + +type component GeneralComp { +} + + type record R { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_NegSem_060201_RecordTypeValues_001() runs on GeneralComp { + + var R v_assigned := { 1, 2 } with { optional "implicit omit" } + template R m_check := { 1, omit, 2, omit, omit } + + if (match(v_assigned,m_check)) { //cannot match undefined components of v_assigned + setverdict(pass); + } + +} + +control { + execute(TC_NegSem_060201_RecordTypeValues_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_001.ttcn new file mode 100644 index 0000000..4db2342 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409, re-numbering done by STF470 + ** @version 0.0.1 + ** @purpose 1:6.2, The omit keyword shall not be used for mandatory fields. + ** @verdict pass reject + ***************************************************/ +module NegSyn_060201_RecordTypeValues_001 { + type record MyRecord { + integer field1, + MyRecord field2 optional, + integer field3 + } + const MyRecord c_rec := { + field1 := 5, + field2 := omit, + field3 := omit // not optional + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_002.ttcn new file mode 100644 index 0000000..da14aa4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/NegSyn_060201_RecordTypeValues_002.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409, re-numbering done by STF470 + ** @version 0.0.1 + ** @purpose 1:6.2, The omit keyword shall not be used for mandatory fields. + ** @verdict pass reject + ***************************************************/ +module NegSyn_060201_RecordTypeValues_002 { + type record MyRecord { + integer field1, + MyRecord field2 optional, + integer field3 + } + const MyRecord c_rec := { + field1 := 5, + field2 := -, + field3 := omit // not optional + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_001.ttcn new file mode 100644 index 0000000..5337d84 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_001.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 451, re-numbering done by STF 470 and 487 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060201_RecordTypeValues_001 { + +type component GeneralComp { +} + + type record R { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060201_RecordTypeValues_001() runs on GeneralComp { + + var R v_assigned := { 1, -, 2 } with { optional "implicit omit" } + template R m_check := { 1, omit, 2, omit, omit } + + if (match(v_assigned,m_check)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060201_RecordTypeValues_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_002.ttcn new file mode 100644 index 0000000..6740a79 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_002.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 451, re-numbering done by STF 470 and 487 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060201_RecordTypeValues_002 { + +type component GeneralComp { +} + + type record R { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + + const R c_assigned := { 1, -, 2 } with { optional "implicit omit" } + +testcase TC_Sem_060201_RecordTypeValues_002() runs on GeneralComp { + + template R m_check := { 1, omit, 2, omit, omit } + + if (match(c_assigned,m_check)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060201_RecordTypeValues_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_003.ttcn new file mode 100644 index 0000000..b68945b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 451, re-numbering done by STF 470 and 487 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060201_RecordTypeValues_003 { + +type component GeneralComp { +} + + type record R { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060201_RecordTypeValues_003() runs on GeneralComp { + + var R v_assigned := { 1, 2, 3 } with { optional "implicit omit" } + + if ( match(v_assigned.f1,1) + and match(v_assigned.f3,3) + and not ispresent(v_assigned.f4) + and not ispresent(v_assigned.f5) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060201_RecordTypeValues_003()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_004.ttcn new file mode 100644 index 0000000..2cd0c0b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Sem_060201_RecordTypeValues_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 451 (updated by STF 470, 487 and 521) + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060201_RecordTypeValues_004 { + +type component GeneralComp { +} + + type record R { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060201_RecordTypeValues_004() runs on GeneralComp { + + var R v_assigned := { 1, 2 } with { optional "implicit omit" } // f3 stays undefined + if (v_assigned.f1 == 1 and + v_assigned.f2 == 2 and + not isbound(v_assigned.f3) and + not ispresent(v_assigned.f4) and + not ispresent(v_assigned.f5)) { + setverdict(pass); + } else { setverdict(fail); } +} + +control { + execute(TC_Sem_060201_RecordTypeValues_004()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_001.ttcn new file mode 100644 index 0000000..1cb7953 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_001.ttcn @@ -0,0 +1,19 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2.1, The element identifiers are local to the record and shall be unique within the record (but do not have to be globally unique). + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060201_RecordTypeValues_001 { + const integer field2 := 4; // do not edit the name + + type record MyRecordType { + integer field1, + MyOtherRecordType field2 optional, + charstring field3 + } + type record MyOtherRecordType { + bitstring field1, + boolean field2 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_002.ttcn new file mode 100644 index 0000000..baa481c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060201_record_type_and_values/060201_toplevel/Syn_060201_RecordTypeValues_002.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2.1, Ensure that the IUT correctly handles empty record definitions. + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060201_RecordTypeValues_002 { + type record MyRecordType { + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_001.ttcn new file mode 100644 index 0000000..284600f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The dot notation used in set type definitions is correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060202_SetTypeValues_001 { + +type component GeneralComp { +} + + type set S { + integer field1 (1 .. 10), + charstring field2 optional + } + + type S ConstrainedSet ({1, omit}, {2, "xyz"}, {3, "zyx"}) ; + + type ConstrainedSet.field1 MyInteger; + +testcase TC_NegSem_060202_SetTypeValues_001() runs on GeneralComp { + + var MyInteger v_int := 11; // assignment from outside of the carried over (1 .. 10) range constraint + +} + +control { + execute(TC_NegSem_060202_SetTypeValues_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_002.ttcn new file mode 100644 index 0000000..dffd6a5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSem_060202_SetTypeValues_002.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060202_SetTypeValues_002 { + +type component GeneralComp { +} + + type set S { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_NegSem_060202_SetTypeValues_002() runs on GeneralComp { + + var S v_assigned := { 1, 2 } with { optional "implicit omit" } + template S m_check := { 1, omit, 2, omit, omit } + + if (match(v_assigned,m_check)) { //cannot match undefined components of v_assigned + setverdict(pass); + } + +} + +control { + execute(TC_NegSem_060202_SetTypeValues_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_001.ttcn new file mode 100644 index 0000000..c7b4691 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @purpose 1:6.2, The omit keyword shall not be used for mandatory fields. + ** @verdict pass reject + ***************************************************/ +module NegSyn_060202_SetTypeValues_001 { + type set MySet { + integer field1, + MySet field2 optional, + integer field3 + } + const MySet c_set := { + field1 := 5, + field2 := omit, + field3 := omit // not optional + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_002.ttcn new file mode 100644 index 0000000..8d02d3c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/NegSyn_060202_SetTypeValues_002.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @purpose 1:6.2, The omit keyword shall not be used for mandatory fields. + ** @verdict pass reject + ***************************************************/ +module NegSyn_060202_SetTypeValues_002 { + type record MySet { + integer field1, + MySet field2 optional, + integer field3 + } + const MySet c_set := { + field1 := 5, + field2 := -, + field3 :=omit // not optional + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_001.ttcn new file mode 100644 index 0000000..03f655b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The dot notation used in set type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_001 { + +type component GeneralComp { +} + + type set S { + integer field1 (1 .. 10), + charstring field2 optional + } + + type S ConstrainedSet ({1, omit}, {2, "xyz"}, {3, "zyx"}) ; + + type ConstrainedSet.field1 MyInteger; + +testcase TC_Sem_060202_SetTypeValues_001() runs on GeneralComp { + + var MyInteger v_int := 9; // v_int is allowed in (1 .. 10) range + + if (v_int==9) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_002.ttcn new file mode 100644 index 0000000..d8e8f73 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_002.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The dot notation used in set type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_002 { + +type component GeneralComp { +} + + type set S { + integer field1 (1 .. 10), + charstring field2 optional + } + + type S ConstrainedSet ({1, omit}, {2, "xyz"}, {3, "zyx"}); + + type ConstrainedSet.field2 MyChar; + +testcase TC_Sem_060202_SetTypeValues_002() runs on GeneralComp { + + var MyChar v_char := "abc"; // any character string is allowed + + if (v_char=="abc") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_003.ttcn new file mode 100644 index 0000000..068aa80 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The dot notation used in set type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_003 { + +type component GeneralComp { +} + + type set S { + integer field1 (1 .. 10), + charstring field2 optional + } + + type S.field1 MyInteger; + +testcase TC_Sem_060202_SetTypeValues_003() runs on GeneralComp { + + var MyInteger v_int := 9; // v_int is allowed in (1 .. 10) range + + if (v_int==9) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_003()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_004.ttcn new file mode 100644 index 0000000..4774b13 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The dot notation used in set type definitions is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_004 { + +type component GeneralComp { +} + + type set S { + integer field1 (1 .. 10), + charstring field2 optional + } + + + type S.field2 MyChar; + +testcase TC_Sem_060202_SetTypeValues_004() runs on GeneralComp { + + var MyChar v_char := "abc"; // any character string is allowed + + if (v_char=="abc") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_004()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_005.ttcn new file mode 100644 index 0000000..e83e103 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_005 { + +type component GeneralComp { +} + + type set S { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060202_SetTypeValues_005() runs on GeneralComp { + + var S v_assigned := { 1, -, 2 } with { optional "implicit omit" } + template S m_check := { 1, omit, 2, omit, omit } + + if (match(v_assigned,m_check)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_005()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_006.ttcn new file mode 100644 index 0000000..e5fcbf4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_006.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_006 { + +type component GeneralComp { +} + + type set S { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + + const S c_assigned := { 1, -, 2 } with { optional "implicit omit" } + +testcase TC_Sem_060202_SetTypeValues_006() runs on GeneralComp { + + template S m_check := { 1, omit, 2, omit, omit } + + if (match(c_assigned,m_check)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_006()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_007.ttcn new file mode 100644 index 0000000..ce73a30 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_007.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF470 + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_007 { + +type component GeneralComp { +} + + type record S { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060202_SetTypeValues_007() runs on GeneralComp { + + var S v_assigned := { 1, 2, 3 } with { optional "implicit omit" } + + if ( match(v_assigned.f1,1) + and match(v_assigned.f3,3) + and not ispresent(v_assigned.f4) + and not ispresent(v_assigned.f5) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060202_SetTypeValues_007()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_008.ttcn new file mode 100644 index 0000000..c50ab62 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Sem_060202_SetTypeValues_008.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF470 (updated by STF 521) + ** @version 0.0.1 + ** @desc Test cases for clause 6.2 + ** @purpose 1:6.2, Ensure that assignments with "implicit omit" attribute are correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060202_SetTypeValues_008 { + +type component GeneralComp { +} + + type set S { + integer f1, + integer f2 optional, + integer f3, + integer f4 optional, + integer f5 optional + } + +testcase TC_Sem_060202_SetTypeValues_008() runs on GeneralComp { + + var S v_assigned := { 1, 2 } with { optional "implicit omit" } //f3 stays undefined + if (v_assigned.f1 == 1 and + v_assigned.f2 == 2 and + not isbound(v_assigned.f3) and + not ispresent(v_assigned.f4) and + not ispresent(v_assigned.f5)) { + setverdict(pass); + } else { setverdict(fail); } +} + +control { + execute(TC_Sem_060202_SetTypeValues_008()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_001.ttcn new file mode 100644 index 0000000..d727b09 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_001.ttcn @@ -0,0 +1,19 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, The element identifiers are local to the set and shall be unique within the record (but do not have to be globally unique). + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060202_SetTypeValues_001 { + const integer field2 := 4; // do not edit the name + + type set MySetType { + integer field1, + MyOtherSetType field2 optional, + charstring field3 + } + type set MyOtherSetType { + bitstring field1, + boolean field2 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_002.ttcn new file mode 100644 index 0000000..58bb451 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060202_set_type_and_values/Syn_060202_SetTypeValues_002.ttcn @@ -0,0 +1,10 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.2, Ensure that the IUT correctly handles empty set definitions. + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_060202_SetTypeValues_002 { + type set MySetType { + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_001.ttcn new file mode 100644 index 0000000..c3f896e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, ensure that the inner type referencing is correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060203_records_and_sets_of_single_types_001 { + + type component GeneralComp { + } + + type record length (5) of record of integer ConstrainedStructure (1 .. 10); + type ConstrainedStructure[-] RecordOfInt; + +testcase TC_NegSem_060203_records_and_sets_of_single_types_001() runs on GeneralComp { + + var RecordOfInt v_rec := { 8, 11, 2, 3, 4, 5, 6, 7 }; // a value is outside the restricted range + +} + +control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_002.ttcn new file mode 100644 index 0000000..948b7bc --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, ensure that the inner type referencing is correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060203_records_and_sets_of_single_types_002 { + + type component GeneralComp { + } + + type record of record length (5) of integer ConstrainedStructure (1 .. 10); + type ConstrainedStructure[-] RecordOfInt; + +testcase TC_NegSem_060203_records_and_sets_of_single_types_002() runs on GeneralComp { + + var RecordOfInt v_rec := { 8, 1, 2, 3, 4, 5, 6, 7 }; // a record is longer than the restricted length + +} + +control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_003.ttcn new file mode 100644 index 0000000..5bf5149 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_003.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, negative index applied to a record of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_003 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_003() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + var integer i := v_rec[-1]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_003()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_004.ttcn new file mode 100644 index 0000000..65f2bcc --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_004.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, negative index applied to a set of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_004 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_004() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + var integer i := v_set[-1]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_004()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_005.ttcn new file mode 100644 index 0000000..978dbcd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_005.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, negative index applied to a record of value on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_005 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_005() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec[-1] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_005()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_006.ttcn new file mode 100644 index 0000000..4bb940f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_006.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, negative index applied to a set of value on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_006 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_006() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set[-1] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_006()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_007.ttcn new file mode 100644 index 0000000..a25b911 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_007.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, wrong index type applied to a record of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_007 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_007() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + var integer i := v_rec["0"]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_007()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_008.ttcn new file mode 100644 index 0000000..4eb40b5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_008.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, wrong index type applied to a set of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_008 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_008() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + var integer i := v_set["0"]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_008()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_009.ttcn new file mode 100644 index 0000000..f6a0893 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_009.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, wrong index type applied to a record of value on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_009 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_009() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec["0"] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_009()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_010.ttcn new file mode 100644 index 0000000..66c620f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_010.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, wrong index type applied to a set of value on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Implicit rule, formal requirement requested in CR 6646 (resolution expected +// in TTCN-3:2014) +module NegSem_060203_records_and_sets_of_single_types_010 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_010() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set["0"] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_010()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_011.ttcn new file mode 100644 index 0000000..3b4d625 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_011.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, record of index greater than the upper bound (left-hand side) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index value shall not exceed the limitation placed by length subtyping. + +// Note: right-hand side is not tested, because such an element is non-existent +// and it is impossible to find out whether expected error is caused by this +// this requirement or the rule concerning referencing non-existent elements. + +module NegSem_060203_records_and_sets_of_single_types_011 { + + type component GeneralComp { + } + + type record length (0..3) of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_011() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec[3] := 3; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_011()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_012.ttcn new file mode 100644 index 0000000..498a300 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_012.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, set of index greater than the upper bound (left-hand side) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index value shall not exceed the limitation placed by length subtyping. + +// Note: right-hand side is not tested, because such an element is non-existent +// and it is impossible to find out whether expected error is caused by this +// this requirement or the rule concerning referencing non-existent elements. + +module NegSem_060203_records_and_sets_of_single_types_012 { + + type component GeneralComp { + } + + type set length (0..3) of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_012() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set[3] := 3; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_012()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_013.ttcn new file mode 100644 index 0000000..32164cc --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_013.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, wrong index type applied to a record of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If the value of the element indicated by the index at the right-hand of an +// assignment is undefined (uninitialized), this shall cause a semantic or +// run-time error.) +module NegSem_060203_records_and_sets_of_single_types_013 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_013() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + var integer i := v_rec[3]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_013()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_014.ttcn new file mode 100644 index 0000000..f299f8b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_014.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, wrong index type applied to a record of value on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If the value of the element indicated by the index at the right-hand of an +// assignment is undefined (uninitialized), this shall cause a semantic or +// run-time error.) +module NegSem_060203_records_and_sets_of_single_types_014 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_014() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + var integer i := v_set[3]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_014()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_015.ttcn new file mode 100644 index 0000000..69b5159 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_015.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify than an error is generated when sending a partially initialized record of value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Undefined elements are permitted only in transient states (while the value +// remains invisible). Sending a record of value with undefined elements shall +// cause a test case error. + +module NegSem_060203_records_and_sets_of_single_types_015 { + + type record of integer RoI; + + type port P message { + inout RoI + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_060203_records_and_sets_of_single_types_015() runs on GeneralComp { + var template RoI mw_sendingTemplate := {0, -, 2}; + p.send(mw_sendingTemplate); // error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_060203_records_and_sets_of_single_types_015()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_016.ttcn new file mode 100644 index 0000000..365a3f7 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_016.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on right hand side (less items than record-of dimension) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_016 { + + type component GeneralComp { + } + + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_016() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[3] := { 1, 0, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_016()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_017.ttcn new file mode 100644 index 0000000..40527ba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_017.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on left hand side (less items than record-of dimension) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_017 { + + type component GeneralComp { + } + + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_017() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[3] := { 1, 0, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_017()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_018.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_018.ttcn new file mode 100644 index 0000000..8bc336f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_018.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on right hand side (less items than record-of dimension) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_018 { + + type component GeneralComp { + } + + type record length(3) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_018() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_018()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_019.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_019.ttcn new file mode 100644 index 0000000..9a3265a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_019.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on left hand side (less items than record-of dimension) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_019 { + + type component GeneralComp { + } + + type record length(3) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_019() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_019()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_020.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_020.ttcn new file mode 100644 index 0000000..32b4a73 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_020.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size set-of as a record-of value index on right hand side + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_020 { + + type component GeneralComp { + } + + type set length(2) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_020() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_020()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_021.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_021.ttcn new file mode 100644 index 0000000..f1f4673 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_021.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size set-of as a record-of value index on left hand side + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_021 { + + type component GeneralComp { + } + + type set length(2) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_021() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_021()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_022.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_022.ttcn new file mode 100644 index 0000000..9e16f2a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_022.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, variable-size record-of as a record-of value index on right hand side + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_022 { + + type component GeneralComp { + } + + type record of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_022() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_022()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_023.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_023.ttcn new file mode 100644 index 0000000..a6d5c3e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSem_060203_records_and_sets_of_single_types_023.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, variable-size record-of as a record-of value index on left hand side (less items than record-of dimension) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module NegSem_060203_records_and_sets_of_single_types_023 { + + type component GeneralComp { + } + + type record of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_NegSem_060203_records_and_sets_of_single_types_023() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060203_records_and_sets_of_single_types_023()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSyn_060203_records_and_sets_of_single_types_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSyn_060203_records_and_sets_of_single_types_001.ttcn new file mode 100644 index 0000000..881520f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/NegSyn_060203_records_and_sets_of_single_types_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, ensure that value list cannot contain an empty assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// No empty assignment is allowed (e.g. two commas, the second immediately +// following the first or only with white space between them). +module NegSyn_060203_records_and_sets_of_single_types_001 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_NegSyn_060203_records_and_sets_of_single_types_001() runs on GeneralComp { + + var RecordOfInt v_rec := { 0, , 2 }; // syntax error expected + + } + + control { + execute(TC_NegSyn_060203_records_and_sets_of_single_types_001()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_001.ttcn new file mode 100644 index 0000000..b901d36 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, ensure that the inner type referencing is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060203_records_and_sets_of_single_types_001 { + + type component GeneralComp { + } + + type record length (5) of record of integer ConstrainedStructure (1 .. 10); + type ConstrainedStructure[-] RecordOfInt; //references the inner record of integer(1..10) + +testcase TC_Sem_060203_records_and_sets_of_single_types_001() runs on GeneralComp { + + var RecordOfInt v_rec := { 8, 1, 2, 3, 4, 5, 6, 7, 9 }; // any record length is allowed + + if (v_rec[7]==7) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060203_records_and_sets_of_single_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_002.ttcn new file mode 100644 index 0000000..b5caa93 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_002.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify assignment of explicitly identified elements to record of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When the assignment notation is used for record of s, elements +// wished to be changed are identified explicitly and either a value +// or the not used symbol "-" can be assigned to them... +// At initialization, only the elements to be assigned values shall be +// specified... It is also possible to leave fields explicitly unspecified +// using the not used symbol "-". +module Sem_060203_records_and_sets_of_single_types_002 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_002() runs on GeneralComp { + + var RoI v_rec := { + [0] := 0, + [1] := 1, + [2] := - + }; + + if (match(v_rec[0], 0) and match(v_rec[1], 1) and not isbound(v_rec[2])) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_002()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_003.ttcn new file mode 100644 index 0000000..4c45fdb --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_003.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify assignment of explicitly identified elements to set of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When the assignment notation is used for set of s, elements +// wished to be changed are identified explicitly and either a value +// or the not used symbol "-" can be assigned to them... +// At initialization, only the elements to be assigned values shall be +// specified... It is also possible to leave fields explicitly unspecified +// using the not used symbol "-". +module Sem_060203_records_and_sets_of_single_types_003 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_003() runs on GeneralComp { + + var SoI v_set := { + [0] := 0, + [1] := 1, + [2] := - + }; + + if (match(v_set[0], 0) and match(v_set[1], 1) and not isbound(v_set[2])) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_003()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_004.ttcn new file mode 100644 index 0000000..61eeaac --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of missing elements in assignment notation for record of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When the assignment notation is used for record of s, ... +// fields, not referred to in the notation, shall remain unchanged.... +// At initialization ... elements not mentioned are implicitly left +// uninitialized. +module Sem_060203_records_and_sets_of_single_types_004 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_004() runs on GeneralComp { + + var RoI v_rec := { + [1] := 1 + }; + + if (not isbound(v_rec[0]) and match(v_rec[1], 1)) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_004()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_005.ttcn new file mode 100644 index 0000000..71cb631 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of missing elements in assignment notation for set of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When the assignment notation is used for record of s, ... +// fields, not referred to in the notation, shall remain unchanged.... +// At initialization ... elements not mentioned are implicitly left +// uninitialized. +module Sem_060203_records_and_sets_of_single_types_005 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_005() runs on GeneralComp { + + var SoI v_set := { + [1] := 1 + }; + + if (not isbound(v_set[0]) and match(v_set[1], 1)) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_005()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_006.ttcn new file mode 100644 index 0000000..b278ad8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_006.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of missing and ignored elements during record of value re-assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When re-assigning a previously initialized value, using the not used symbol +// or just skipping a field or element in an assignment notation, will cause +// that field or element to remain unchanged. +module Sem_060203_records_and_sets_of_single_types_006 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_006() runs on GeneralComp { + + var RoI v_rec := { + [0] := 0, + [1] := -, + [2] := 2 + }; + v_rec := { + [1] := 1 + }; + if (v_rec == { 0, 1, 2 }) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060203_records_and_sets_of_single_types_006()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_007.ttcn new file mode 100644 index 0000000..3c5bd70 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_007.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of missing and ignored elements during record of value re-assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When re-assigning a previously initialized value, using the not used symbol +// or just skipping a field or element in an assignment notation, will cause +// that field or element to remain unchanged. +module Sem_060203_records_and_sets_of_single_types_007 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_007() runs on GeneralComp { + + var SoI v_set := { + [0] := 0, + [1] := -, + [2] := 2 + }; + v_set := { + [1] := 1 + }; + if (v_set == { 0, 1, 2 }) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_007()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_008.ttcn new file mode 100644 index 0000000..c7f4aa2 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_008.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of value list assignment used for initialization of record of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When using the value list notation, all elements in the structure shall +// be specified either with a value or the not used symbol "-". The first +// member of the list is assigned to the first element, the second list +// member is assigned to the second element, etc. +module Sem_060203_records_and_sets_of_single_types_008 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_008() runs on GeneralComp { + + var RoI v_rec := { 0, 1, - }; + if (match(v_rec[0], 0) and match(v_rec[1], 1) and not isbound(v_rec[2])) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_008()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_009.ttcn new file mode 100644 index 0000000..079f54c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_009.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of value list assignment used for initialization of set of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When using the value list notation, all elements in the structure shall +// be specified either with a value or the not used symbol "-". The first +// member of the list is assigned to the first element, the second list +// member is assigned to the second element, etc. +module Sem_060203_records_and_sets_of_single_types_009 { + + type component GeneralComp { + } + + type record of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_009() runs on GeneralComp { + + var SoI v_set := { 0, 1, - }; + if (match(v_set[0], 0) and match(v_set[1], 1) and not isbound(v_set[2])) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_009()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_010.ttcn new file mode 100644 index 0000000..c858f54 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_010.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of value list assignment used for update of record of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements to be left out of the assignment shall be explicitly skipped in the list +// by use of the not-used-symbol "-". Already initialized elements left without +// a corresponding list member in a value list notation (i.e. at the end of a list) +// are becoming uninitialized. In this way, a value with initialized elements can be +// made empty by using the empty value list notation ("{}"). +module Sem_060203_records_and_sets_of_single_types_010 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_010() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec := { 10, - }; + if (v_rec == { 10, 1 } ) { + setverdict(pass); + } + else { + setverdict(fail); + } + v_rec := {}; + if (lengthof(v_rec) == 0 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_010()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_011.ttcn new file mode 100644 index 0000000..3e78291 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_011.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of value list assignment used for update of set of values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements to be left out of the assignment shall be explicitly skipped in the list +// by use of the not-used-symbol "-". Already initialized elements left without +// a corresponding list member in a value list notation (i.e. at the end of a list) +// are becoming uninitialized. In this way, a value with initialized elements can be +// made empty by using the empty value list notation ("{}"). +module Sem_060203_records_and_sets_of_single_types_011 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_011() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set := { 10, - }; + if (v_set == { 10, 1 } ) { + setverdict(pass); + } + else { + setverdict(fail); + } + v_set := {}; + if (lengthof(v_set) == 0 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_011()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_012.ttcn new file mode 100644 index 0000000..592bd78 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_012.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of index notation applied to record of values on right-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notations can be used on the right-hand side of assignments. +// The index notation, when used on the right hand side, refers to the value of +// the identified element of a record of. +module Sem_060203_records_and_sets_of_single_types_012 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_012() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + var integer i := v_rec[1]; + if (i == 1 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_012()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_013.ttcn new file mode 100644 index 0000000..1a153be --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_013.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of index notation applied to set of values on right-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notations can be used on the right-hand side of assignments. +// The index notation, when used on the right hand side, refers to the value of +// the identified element of a record of. +module Sem_060203_records_and_sets_of_single_types_013 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_013() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + var integer i := v_set[1]; + if (i == 1 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_013()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_014.ttcn new file mode 100644 index 0000000..7a47f00 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_014.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of index notation applied to record of values on left-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notations can be used on the left-hand side of assignments. +// When it is used at the left hand side, only the value of the identified +// single element is changed, values assigned to other elements already remain +// unchanged. +module Sem_060203_records_and_sets_of_single_types_014 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_014() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec[1] := 10; + if (v_rec == { 0, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_014()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_015.ttcn new file mode 100644 index 0000000..55e282d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_015.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify handling of index notation applied to set of values on left-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notations can be used on the left-hand side of assignments. +// When it is used at the left hand side, only the value of the identified +// single element is changed, values assigned to other elements already remain +// unchanged. +module Sem_060203_records_and_sets_of_single_types_015 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_015() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set[1] := 10; + if (v_set == { 0, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_015()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_016.ttcn new file mode 100644 index 0000000..94d6c52 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_016.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify the first element of a record of value is accessible by an index notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The index of the first element shall be zero. +module Sem_060203_records_and_sets_of_single_types_016 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_016() runs on GeneralComp { + + var RoI v_rec := { 0, 1, 2 }; + v_rec[0] := 10; // first index on the left hand side + v_rec[1] := v_rec[0]; // first index on the right hand side + if (v_rec == { 10, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_016()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_017.ttcn new file mode 100644 index 0000000..fb2f92f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_017.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify the first element of a set of value is accessible by an index notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The index of the first element shall be zero. +module Sem_060203_records_and_sets_of_single_types_017 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_017() runs on GeneralComp { + + var SoI v_set := { 0, 1, 2 }; + v_set[0] := 10; // first index on the left hand side + v_set[1] := v_set[0]; // first index on the right hand side + if (v_set == { 10, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_017()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_019.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_019.ttcn new file mode 100644 index 0000000..c2f611c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_019.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, referencing non-existent element of record of value (left-hand side) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If an indexing operator at the left-hand side of an assignment refers to +// a non-existent element, the value at the right-hand side is assigned to +// the element and all elements with an index smaller than the actual index +// and without assigned value are created with an undefined value. +module Sem_060203_records_and_sets_of_single_types_019 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_019() runs on GeneralComp { + + var RoI v_rec := { 0, 1 }; + v_rec[3] := 3; // {0, 1, -, 3} + if (match(v_rec[0], 0) and + match(v_rec[1], 1) and + not isbound(v_rec[2]) and + match(v_rec[3], 3)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_019()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_020.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_020.ttcn new file mode 100644 index 0000000..21b2b20 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_020.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, referencing non-existent element of set of value (left-hand side) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If an indexing operator at the left-hand side of an assignment refers to +// a non-existent element, the value at the right-hand side is assigned to +// the element and all elements with an index smaller than the actual index +// and without assigned value are created with an undefined value. +module Sem_060203_records_and_sets_of_single_types_020 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_020() runs on GeneralComp { + + var SoI v_set := { 0, 1 }; + v_set[3] := 3; // {0, 1, -, 3} + if (match(v_set[0], 0) and + match(v_set[1], 1) and + not isbound(v_set[2]) and + match(v_set[3], 3)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_020()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_021.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_021.ttcn new file mode 100644 index 0000000..ab03939 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_021.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, referencing element of uninitialized record of value (left-hand side) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If an indexing operator at the left-hand side of an assignment refers to +// a non-existent element, the value at the right-hand side is assigned to +// the element and all elements with an index smaller than the actual index +// and without assigned value are created with an undefined value. +module Sem_060203_records_and_sets_of_single_types_021 { + + type component GeneralComp { + } + + type record of integer RoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_021() runs on GeneralComp { + + var RoI v_rec; + v_rec[2] := 2; // {-, -, 2} + if (not isbound(v_rec[0]) and + not isbound(v_rec[1]) and + match(v_rec[2], 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_021()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_022.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_022.ttcn new file mode 100644 index 0000000..e35d54f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_022.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3, referencing element of uninitialized set of value (left-hand side) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If an indexing operator at the left-hand side of an assignment refers to +// a non-existent element, the value at the right-hand side is assigned to +// the element and all elements with an index smaller than the actual index +// and without assigned value are created with an undefined value. +module Sem_060203_records_and_sets_of_single_types_022 { + + type component GeneralComp { + } + + type set of integer SoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_022() runs on GeneralComp { + + var SoI v_set; + v_set[2] := 2; // {-, -, 2} + if (not isbound(v_set[0]) and + not isbound(v_set[1]) and + match(v_set[2], 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_022()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_023.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_023.ttcn new file mode 100644 index 0000000..2329118 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_023.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on right hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_023 { + + type component GeneralComp { + } + + type record of record of integer RoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_023() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[2] := { 1, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_023()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_024.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_024.ttcn new file mode 100644 index 0000000..33c4ecf --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_024.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on left hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_024 { + + type component GeneralComp { + } + + type record of record of integer RoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_024() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[2] := { 1, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_024()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_025.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_025.ttcn new file mode 100644 index 0000000..ea871a1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_025.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on right hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_025 { + + type component GeneralComp { + } + + type record of record of record of integer RoRoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_025() runs on GeneralComp { + + var RoRoRoI v_rec := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var integer v_index[2] := { 1, 0 } + if (v_rec[v_index] == {4, 5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_025()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_026.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_026.ttcn new file mode 100644 index 0000000..edcc05a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_026.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a record-of value index on left hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_026 { + + type component GeneralComp { + } + + type record of record of record of integer RoRoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_026() runs on GeneralComp { + + var RoRoRoI v_rec := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var integer v_index[2] := { 1, 0 } + v_rec[v_index] := { 100, - }; + if (v_rec == {{{0, 1}, {2, 3}}, {{100, 5}, {7, 8}}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_026()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_027.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_027.ttcn new file mode 100644 index 0000000..a0764b9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_027.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on right hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_027 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_027() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + if (v_rec[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_027()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_028.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_028.ttcn new file mode 100644 index 0000000..8538cb9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_028.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on left hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_028 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type record of record of integer RoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_028() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + v_rec[v_index] := 10; + if (v_rec == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_028()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_029.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_029.ttcn new file mode 100644 index 0000000..68d6eba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_029.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on right hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_029 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type record of record of record of integer RoRoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_029() runs on GeneralComp { + + var RoRoRoI v_rec := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var Indexer v_index := { 1, 0 } + if (v_rec[v_index] == {4, 5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_029()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_030.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_030.ttcn new file mode 100644 index 0000000..546aa82 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_030.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a record-of value index on left hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_030 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type record of record of record of integer RoRoRoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_030() runs on GeneralComp { + + var RoRoRoI v_rec := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var Indexer v_index := { 1, 0 } + v_rec[v_index] := { 100, - }; + if (v_rec == {{{0, 1}, {2, 3}}, {{100, 5}, {7, 8}}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_030()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_031.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_031.ttcn new file mode 100644 index 0000000..15b593e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_031.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a set-of value index on right hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_031 { + + type component GeneralComp { + } + + type set of set of integer SoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_031() runs on GeneralComp { + + var SoSoI v_set := {{0, 1}, {2, 3}}; + var integer v_index[2] := { 1, 0 } + if (v_set[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_031()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_032.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_032.ttcn new file mode 100644 index 0000000..6881b3e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_032.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a set-of value index on left hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_032 { + + type component GeneralComp { + } + + type set of set of integer SoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_032() runs on GeneralComp { + + var SoSoI v_set := {{0, 1}, {2, 3}}; + var integer v_index[2] := { 1, 0 } + v_set[v_index] := 10; + if (v_set == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_032()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_033.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_033.ttcn new file mode 100644 index 0000000..548db8e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_033.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a set-of value index on right hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_033 { + + type component GeneralComp { + } + + type set of set of set of integer SoSoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_033() runs on GeneralComp { + + var SoSoSoI v_set := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var integer v_index[2] := { 1, 0 } + if (v_set[v_index] == {4, 5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_033()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_034.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_034.ttcn new file mode 100644 index 0000000..014ea01 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_034.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, array as a set-of value index on left hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_034 { + + type component GeneralComp { + } + + type set of set of set of integer SoSoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_034() runs on GeneralComp { + + var SoSoSoI v_set := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var integer v_index[2] := { 1, 0 } + v_set[v_index] := { 100, - }; + if (v_set == {{{0, 1}, {2, 3}}, {{100, 5}, {7, 8}}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_034()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_035.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_035.ttcn new file mode 100644 index 0000000..77f27cd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_035.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size set-of as a record-of value index on right hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_035 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type set of set of integer SoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_035() runs on GeneralComp { + + var SoSoI v_set := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + if (v_set[v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_035()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_036.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_036.ttcn new file mode 100644 index 0000000..f01e7ae --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_036.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size set-of as a record-of value index on left hand side (dimensions match) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_036 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type set of set of integer SoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_036() runs on GeneralComp { + + var SoSoI v_set := {{0, 1}, {2, 3}}; + var Indexer v_index := { 1, 0 } + v_set[v_index] := 10; + if (v_set == {{0, 1}, {10, 3}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_036()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_037.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_037.ttcn new file mode 100644 index 0000000..1c0131a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_037.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size set-of as a record-of value index on right hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_037 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type set of set of set of integer SoSoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_037() runs on GeneralComp { + + var SoSoSoI v_set := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var Indexer v_index := { 1, 0 } + if (v_set[v_index] == {4, 5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_037()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_038.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_038.ttcn new file mode 100644 index 0000000..bf4c690 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060203_records_and_sets_of_single_types/Sem_060203_records_and_sets_of_single_types_038.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.3, fixed-size record-of as a set-of value index on left hand side (less items than record-of dimension) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For nested record of or set of types, an array or record of integer restricted +// to a single size can be used as a short-hand notation for a nested index +// notation. + +module Sem_060203_records_and_sets_of_single_types_038 { + + type component GeneralComp { + } + + type record length(2) of integer Indexer; + type set of set of set of integer SoSoSoI; + + testcase TC_Sem_060203_records_and_sets_of_single_types_038() runs on GeneralComp { + + var SoSoSoI v_set := {{{0, 1}, {2, 3}}, {{4, 5, 6}, {7, 8}}}; + var Indexer v_index := { 1, 0 } + v_set[v_index] := { 100, - }; + if (v_set == {{{0, 1}, {2, 3}}, {{100, 5}, {7, 8}}}) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060203_records_and_sets_of_single_types_038()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_001.ttcn new file mode 100644 index 0000000..ae9e82f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, not unique identifiers in enumerated type declaration + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The identifiers of enumerated values shall be unique within the enumerated type +// (but do not have to be globally unique) and are consequently visible in the +// context of the given type only. + +module NegSem_060204_enumerated_type_and_values_001 { + + type enumerated MyFirstEnumType { + Monday, Tuesday, Wednesday, Thursday, Friday, Monday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_002.ttcn new file mode 100644 index 0000000..3495b9d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_002.ttcn @@ -0,0 +1,17 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, two equal user-assigned enumerated values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Each user-assigned integer number shall be distinct within a single enumerated +// type. + +module NegSem_060204_enumerated_type_and_values_002 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(2), Wednesday(2), Thursday, Friday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_003.ttcn new file mode 100644 index 0000000..ef8ed2d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value number directly (left hand side of assignments) + ** @verdict pass reject + ***************************************************/ + +// 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. These values are only used by the system to allow +// the use of relational operators. The user shall not directly use associated +// integer values but can access them and convert integer values into enumerated +// values by using the predefined functions enum2int and int2enum (see clauses +// 16.1.2, C.1.29 C.1.30 and C.1.4 C.1.4). + +module NegSem_060204_enumerated_type_and_values_003 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_003() runs on GeneralComp { + var EDays v_day0 := 0; // ordinal value shall not be accepted + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_003()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_004.ttcn new file mode 100644 index 0000000..cb9ed7d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value number directly (right hand side of assignments) + ** @verdict pass reject + ***************************************************/ + +// 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. These values are only used by the system to allow +// the use of relational operators. The user shall not directly use associated +// integer values but can access them and convert integer values into enumerated +// values by using the predefined functions enum2int and int2enum (see clauses +// 16.1.2, C.1.29 C.1.30 and C.1.4 C.1.4). + +module NegSem_060204_enumerated_type_and_values_004 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_004() runs on GeneralComp { + var EDays v_day0 := Monday; + var integer v_int := v_day0; + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_004()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_005.ttcn new file mode 100644 index 0000000..a9bd73e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_005.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value without implicit or explicit type reference + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For any instantiation or value reference of an enumerated type, the given +// type shall be implicitly or explicitly referenced. + +module NegSem_060204_enumerated_type_and_values_005 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_005() runs on GeneralComp { + if (Tuesday != Wednesday) { // no implicit or explicit reference to enumeration + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_005()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_006.ttcn new file mode 100644 index 0000000..841ded1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_006.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, modulepar with the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_006 { + + import from NegSem_060204_enumerated_type_and_values_006_import all; + + type component GeneralComp { + } + + modulepar EDays Monday := Tuesday; + + testcase TC_NegSem_060204_enumerated_type_and_values_006() runs on GeneralComp { + log(Monday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_006()); + } +} + +module NegSem_060204_enumerated_type_and_values_006_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_007.ttcn new file mode 100644 index 0000000..04dd9d7 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_007.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, formal parameter with the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_007 { + + import from NegSem_060204_enumerated_type_and_values_007_import all; + + type component GeneralComp { + } + + function f_test(EDays Monday) { + log(Monday); + } + + testcase TC_NegSem_060204_enumerated_type_and_values_007() runs on GeneralComp { + f_test(Tuesday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_007()); + } +} + +module NegSem_060204_enumerated_type_and_values_007_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_008.ttcn new file mode 100644 index 0000000..a258ac9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_008.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, constant with the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_008 { + + import from NegSem_060204_enumerated_type_and_values_008_import all; + + type component GeneralComp { + } + + const EDays Monday := Tuesday; + + testcase TC_NegSem_060204_enumerated_type_and_values_008() runs on GeneralComp { + log(Monday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_008()); + } +} + +module NegSem_060204_enumerated_type_and_values_008_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_009.ttcn new file mode 100644 index 0000000..cc37982 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_009.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, variable with the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_009 { + + import from NegSem_060204_enumerated_type_and_values_009_import all; + + type component GeneralComp { + } + + testcase TC_NegSem_060204_enumerated_type_and_values_009() runs on GeneralComp { + var EDays Monday := Tuesday; + log(Monday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_009()); + } +} + +module NegSem_060204_enumerated_type_and_values_009_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010.ttcn new file mode 100644 index 0000000..fe9ca01 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_010.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, template with the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_010 { + + import from NegSem_060204_enumerated_type_and_values_010_import all; + + type component GeneralComp { + } + + template EDays Monday := Tuesday; + + testcase TC_NegSem_060204_enumerated_type_and_values_010() runs on GeneralComp { + log(Monday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_010()); + } +} + +module NegSem_060204_enumerated_type_and_values_010_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn new file mode 100644 index 0000000..e846378 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_011.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, parameterized template with default parameters and the same name as one of enumerated values of the imported parent type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module NegSem_060204_enumerated_type_and_values_011 { + + import from NegSem_060204_enumerated_type_and_values_011_import all; + + type component GeneralComp { + } + + template EDays Monday(EDays p_par1 := Tuesday) := ( Friday, p_par1 ); + + testcase TC_NegSem_060204_enumerated_type_and_values_011() runs on GeneralComp { + log(Monday); + setverdict(pass); + } + + control { + execute(TC_NegSem_060204_enumerated_type_and_values_011()); + } +} + +module NegSem_060204_enumerated_type_and_values_011_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_013.ttcn new file mode 100644 index 0000000..d1a66c3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSem_060204_enumerated_type_and_values_013.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(-1), Tuesday(1), Wednesday(2), Thursday(3), Friday(5) + }; + + testcase TC_NegSem_060204_enumerated_type_and_values_013() 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_013()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_001.ttcn b/core_language/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 0000000..0e8e436 --- /dev/null +++ b/core_language/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,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, constant as user-assigned enumerated values + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Each enumerated value may optionally have a user-assigned integer value, which +// is defined after the name of the enumerated value in parenthesis. + +module NegSyn_060204_enumerated_type_and_values_002 { + + const integer c_int := 5; + type enumerated MyFirstEnumType { + Monday, Tuesday(c_int), Wednesday, Thursday, Friday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_002.ttcn new file mode 100644 index 0000000..c491517 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_002.ttcn @@ -0,0 +1,17 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, expression as user-assigned enumerated value + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Each enumerated value may optionally have a user-assigned integer value, which +// is defined after the name of the enumerated value in parenthesis. + +module NegSyn_060204_enumerated_type_and_values_003 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(2+3), Thursday, Friday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_004.ttcn new file mode 100644 index 0000000..bf4aa48 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/NegSyn_060204_enumerated_type_and_values_004.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 521 + ** @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_004 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(), Thursday, Friday + }; // error: non-empty integer literal required +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn new file mode 100644 index 0000000..cfda253 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, reusing enumerated value identifier in another enumerated type declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// The identifiers of enumerated values shall only be reused within other structured +// type definitions and shall not be used for identifiers of local or global +// visibility at the same or a lower level of the same branch of the scope hierarchy +// (see scope hierarchy in clause 5.2). + +module Sem_060204_enumerated_type_and_values_001 { + + type enumerated MyFirstEnumType { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + type enumerated MySecondEnumType { + Saturday, Sunday, Monday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn new file mode 100644 index 0000000..9871224 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_002.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, automatic 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. These values are only used by the system to allow +// the use of relational operators. The user shall not directly use associated +// integer values but can access them and convert integer values into enumerated +// values by using the predefined functions enum2int and int2enum (see clauses +// 16.1.2, C.1.29 C.1.30 and C.1.4 C.1.4). + +module Sem_060204_enumerated_type_and_values_002 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + + testcase TC_Sem_060204_enumerated_type_and_values_002() runs on GeneralComp { + var EDays v_day0 := Monday, v_day2 := Wednesday, v_day4 := Friday; + + if (enum2int(v_day0) == 0 and enum2int(v_day2) == 2 and enum2int(v_day4) == 4) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_002()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn new file mode 100644 index 0000000..263e88b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, 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. These values are only used by the system to allow +// the use of relational operators. The user shall not directly use associated +// integer values but can access them and convert integer values into enumerated +// values by using the predefined functions enum2int and int2enum (see clauses +// 16.1.2, C.1.29 C.1.30 and C.1.4 C.1.4). + +module Sem_060204_enumerated_type_and_values_003 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(-1), Tuesday(4), Wednesday(0), Thursday(6), Friday(20) + }; + + testcase TC_Sem_060204_enumerated_type_and_values_003() runs on GeneralComp { + var EDays v_day0 := Monday, v_day2 := Wednesday, v_day4 := Friday; + + if (enum2int(v_day0) == -1 and enum2int(v_day2) == 0 and enum2int(v_day4) == 20) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_003()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_004.ttcn new file mode 100644 index 0000000..c6d8293 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @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. These values are only used by the system to allow +// the use of relational operators. The user shall not directly use associated +// integer values but can access them and convert integer values into enumerated +// values by using the predefined functions enum2int and int2enum (see clauses +// 16.1.2, C.1.29 C.1.30 and C.1.4 C.1.4). + +module Sem_060204_enumerated_type_and_values_004 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday(1), Tuesday, Wednesday, Thursday(10), Friday + }; + + testcase TC_Sem_060204_enumerated_type_and_values_004() runs on GeneralComp { + var EDays v_day0 := Monday, v_day2 := Wednesday, v_day4 := Friday; + + if (enum2int(v_day0) == 1 and enum2int(v_day2) == 2 and enum2int(v_day4) == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_004()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn new file mode 100644 index 0000000..45ce502 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_005.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, using enumerated value with implicit type reference + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For any instantiation or value reference of an enumerated type, the given +// type shall be implicitly or explicitly referenced. + +module Sem_060204_enumerated_type_and_values_005 { + + type component GeneralComp { + } + + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; + + testcase TC_Sem_060204_enumerated_type_and_values_005() runs on GeneralComp { + var EDays v_day := Monday; + if (v_day == Monday) { //the type of variable v_day identifies the type context of EDays for the equality operator + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_005()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn new file mode 100644 index 0000000..2bb56dc --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, parameterized template without default parameters and with the same name as one of enumerated values of the imported parent type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When a TTCN-3 module parameter, formal parameter, constant, variable, +// non-parameterized template or parameterized template with all formal +// parameters having default values of an imported enumerated type is defined, +// the name of that definition shall not be the same as any of the enumerated +// values of that type. + +module Sem_060204_enumerated_type_and_values_006 { + + import from Sem_060204_enumerated_type_and_values_006_import all; + + type component GeneralComp { + } + + template EDays Monday(EDays p_par1) := ( Friday, p_par1 ); + + testcase TC_Sem_060204_enumerated_type_and_values_006() runs on GeneralComp { + setverdict(pass); + } + + control { + execute(TC_Sem_060204_enumerated_type_and_values_006()); + } +} + +module Sem_060204_enumerated_type_and_values_006_import { + type enumerated EDays { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Sem_060204_enumerated_type_and_values_007.ttcn b/core_language/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 0000000..f29c9cc --- /dev/null +++ b/core_language/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,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn new file mode 100644 index 0000000..5002eef --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, enumerated type declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// TTCN 3 supports enumerated types. Enumerated types are used to model types +// that take only a distinct named set of values. Such distinct values are called +// enumerated values. Each enumerated value shall have an identifier. + +module Syn_060204_enumerated_type_and_values_001 { + + type enumerated MyFirstEnumType { + Monday, Tuesday, Wednesday, Thursday, Friday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn new file mode 100644 index 0000000..64f7511 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060204_enumerated_type_and_values/Syn_060204_enumerated_type_and_values_002.ttcn @@ -0,0 +1,17 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.4, enumerated type declaration with user-assigned values + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Each enumerated value may optionally have a user-assigned integer value, which +// is defined after the name of the enumerated value in parenthesis. + +module Syn_060204_enumerated_type_and_values_002 { + + type enumerated MyFirstEnumType { + Monday, Tuesday(2), Wednesday(-1), Thursday, Friday + }; +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_001.ttcn new file mode 100644 index 0000000..a2320d3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_001.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, unknown union alternative in value dot notation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Alternatives of a union type shall be referenced by the dot notation +// TypeIdOrExpression.AlternativeId, where TypeIdOrExpression resolves to the name +// of a union type or an expression of a union type such as variable, formal +// parameter, module parameter, constant, template, or function invocation. +// AlternativeId shall resolve to the name of an alternative in the union type. + +module NegSem_06020501_referencing_fields_of_union_type_001 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_001() runs on GeneralComp { + var U v_union; + v_union.option3 := 1; + if (ischosen(v_union.option1) or ischosen(v_union.option2)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_002.ttcn new file mode 100644 index 0000000..2d0e69c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, unknown union alternative in extended type reference + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Alternatives of a union type shall be referenced by the dot notation +// TypeIdOrExpression.AlternativeId, where TypeIdOrExpression resolves to the name +// of a union type or an expression of a union type such as variable, formal +// parameter, module parameter, constant, template, or function invocation. +// AlternativeId shall resolve to the name of an alternative in the union type. + +module NegSem_06020501_referencing_fields_of_union_type_002 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + type U.option3 UnionItem; + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_002() runs on GeneralComp { + var UnionItem v_val := 1; + if (v_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_003.ttcn new file mode 100644 index 0000000..8fa4e16 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_003.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, union alternative referencing itself + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Alternatives of union type definitions shall not reference themselves. + +module NegSem_06020501_referencing_fields_of_union_type_003 { + type component GeneralComp { + } + + type union U { + integer option1, + U.option2 option2 + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_003() runs on GeneralComp { + var U v_union := { option1 := 1 }; + if (v_union == { option1 := 1}) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_004.ttcn new file mode 100644 index 0000000..94226a5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_004.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, union alternative referencing indirectly itself + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Alternatives of union type definitions shall not reference themselves. + +module NegSem_06020501_referencing_fields_of_union_type_004 { + type component GeneralComp { + } + + type union U { + integer option1, + U.option3 option2, + U.option2 option3 + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_004() runs on GeneralComp { + var U v_union := { option1 := 1 }; + if (v_union == { option1 := 1}) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_005.ttcn new file mode 100644 index 0000000..6cf59f8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_005.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, union alternative costraint passed through extended type reference + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If an alternative in a union type or a subtype of a union type is referenced by +// the dot notation, the resulting type is the set of values allowed for that +// alternative imposed by the constraints of the alternative declaration itself +// (i.e. any constraints applied to the union type itself are ignored). + +module NegSem_06020501_referencing_fields_of_union_type_005 { + type component GeneralComp { + } + + type union U { + integer option1 (1..10), + charstring option2 + } + + type U.option1 UnionItem; + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_005() runs on GeneralComp { + var UnionItem v_val := 100; + if (v_val == 100) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_006.ttcn new file mode 100644 index 0000000..e4a4df8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_006.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing not chosen alternative on right hand side of assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When an alternative of a union type is referenced on the right hand side of +// an assignment an error shall occur if the referenced alternative is not the +// currently chosen alternative or if the referenced union field or value is omitted +// or uninitialized. + +module NegSem_06020501_referencing_fields_of_union_type_006 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_006() runs on GeneralComp { + var U v_union := { option1 := 1 }; + if (v_union.option2 != "test") { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_007.ttcn new file mode 100644 index 0000000..c189f70 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_007.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing alternative of uninitialized union on right hand side of assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When an alternative of a union type is referenced on the right hand side of +// an assignment an error shall occur if the referenced alternative is not the +// currently chosen alternative or if the referenced union field or value is omitted +// or uninitialized. + +module NegSem_06020501_referencing_fields_of_union_type_007 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + type record R { + integer field1, + U field2 + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_007() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 5; + if (v_rec.field2.option1 != 100) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_008.ttcn new file mode 100644 index 0000000..01148ba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/NegSem_06020501_referencing_fields_of_union_type_008.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing alternative of omitted union on right hand side of assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// When an alternative of a union type is referenced on the right hand side of +// an assignment an error shall occur if the referenced alternative is not the +// currently chosen alternative or if the referenced union field or value is omitted +// or uninitialized. + +module NegSem_06020501_referencing_fields_of_union_type_008 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + type record R { + integer field1, + U field2 optional + } + + testcase TC_NegSem_06020501_referencing_fields_of_union_type_008() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 5; + v_rec.field2 := omit; + if (v_rec.field2.option1 != 100) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_06020501_referencing_fields_of_union_type_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_001.ttcn new file mode 100644 index 0000000..8d3b319 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_001.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.5.2, Ensure that union is initialized by dot notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_06020501_referencing_fields_of_union_type_001 { + type union MyUnionType + { + integer number, + charstring string + }; + + type component GeneralComp { + }; + + + testcase TC_Sem_06020501_referencing_fields_of_union_type_001 () runs on GeneralComp { + var MyUnionType v_mut ; + v_mut.number := 0; + + if (v_mut.number == 0) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_06020501_referencing_fields_of_union_type_001()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_002.ttcn new file mode 100644 index 0000000..1274e44 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, union alternative in extended type reference + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Alternatives of a union type shall be referenced by the dot notation +// TypeIdOrExpression.AlternativeId, where TypeIdOrExpression resolves to the name +// of a union type or an expression of a union type such as variable, formal +// parameter, module parameter, constant, template, or function invocation. +// AlternativeId shall resolve to the name of an alternative in the union type. + +module Sem_06020501_referencing_fields_of_union_type_002 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + type U.option1 UnionItem; + + testcase TC_Sem_06020501_referencing_fields_of_union_type_002() runs on GeneralComp { + var UnionItem v_val := 1; + if (v_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_06020501_referencing_fields_of_union_type_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_003.ttcn new file mode 100644 index 0000000..1687fda --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020501_referencing_fields_of_union_type/Sem_06020501_referencing_fields_of_union_type_003.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, union costraint not applied to extended type reference to its item + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If an alternative in a union type or a subtype of a union type is referenced by +// the dot notation, the resulting type is the set of values allowed for that +// alternative imposed by the constraints of the alternative declaration itself +// (i.e. any constraints applied to the union type itself are ignored). + +module Sem_06020501_referencing_fields_of_union_type_003 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + type U ConstrainedU ( {option1 := 1 }, { option1 := 2}); + type ConstrainedU.option1 UnionItem; + + testcase TC_Sem_06020501_referencing_fields_of_union_type_003() runs on GeneralComp { + var UnionItem v_val := 100; + if (v_val == 100) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_06020501_referencing_fields_of_union_type_003()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..0eef7a1 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing alternative on left hand side of assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing an alternative of a union type on the left hand side of +// an assignment, the referenced alternative shall become the chosen one. This rule +// shall apply recursively if the reference contains alternatives of nested unions, +// choosing all the referenced alternatives. + +module Sem_06020501_referencing_fields_of_union_type_004 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_Sem_06020501_referencing_fields_of_union_type_004() runs on GeneralComp { + var U v_union; + v_union.option1 := 1; + if (v_union.option1 == 1) { setverdict(pass); } + else { setverdict(fail); } + + v_union.option2 := "test"; + if (v_union.option2 == "test") { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_06020501_referencing_fields_of_union_type_004()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..3ab51b5 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing nested alternative on left hand side of assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing an alternative of a union type on the left hand side of +// an assignment, the referenced alternative shall become the chosen one. This rule +// shall apply recursively if the reference contains alternatives of nested unions, +// choosing all the referenced alternatives. + +module Sem_06020501_referencing_fields_of_union_type_005 { + type component GeneralComp { + } + + type union SubU { + integer suboption1, + charstring suboption2 + } + + type union U { + integer option1, + SubU option2 + } + + testcase TC_Sem_06020501_referencing_fields_of_union_type_005() runs on GeneralComp { + var U v_union; + v_union.option1 := 1; + if (v_union.option1 == 1) { setverdict(pass); } + else { setverdict(fail); } + + v_union.option2.suboption2 := "test"; + if (v_union.option2.suboption2 == "test") { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_06020501_referencing_fields_of_union_type_005()); + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..430731e --- /dev/null +++ b/core_language/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 @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.1, referencing field of structured alternative on left hand side of assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing an alternative of an uninitialized union value or field or +// omitted field (including omitting a field at a higher level of the embedding +// hierarchy) on the left hand side of an assignment, the reference shall +// recursively be expanded up to and including the depth of the referenced +// alternative as follows: +// a) When expanding a value or value field of union type, the alternative +// referenced in the dot notation becomes the chosen one. +// b) Expansion of record, record of, set, set of, and array values and intermediate +// fields shall follow the rules of item a) in clauses 6.2.1.1and 6.2.3, and clause +// 6.2.2.1 correspondingly. +// c) At the end of the expansion, the value at the right hand side of the assignment +// shall be assigned to the referenced alternative. + +module Sem_06020501_referencing_fields_of_union_type_006 { + type component GeneralComp { + } + + type record of integer RI; + type record R { + RI field1, + integer field2 + } + + type union U { + integer option1, + R option2 + } + + testcase TC_Sem_06020501_referencing_fields_of_union_type_006() runs on GeneralComp { + var U v_union; + v_union.option2.field1[1] := 10; + + if (ischosen(v_union.option2) and isbound(v_union.option2.field1) and + not isbound(v_union.option2.field2) and not isbound(v_union.option2.field1[0]) and + v_union.option2.field1[1] == 10) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_06020501_referencing_fields_of_union_type_006()); + } +} \ No newline at end of file diff --git a/core_language/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/core_language/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 0000000..d9b8dbc --- /dev/null +++ b/core_language/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,39 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} diff --git a/core_language/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/core_language/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 0000000..1ee934d --- /dev/null +++ b/core_language/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,41 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn new file mode 100644 index 0000000..669f7bd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/06020502_option_and_union/NegSyn_06020502_option_and_union_001.ttcn @@ -0,0 +1,17 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5.2, referencing alternative on left hand side of assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Optional fields are not allowed for the union type, which means that the optional +// keyword shall not be used with union types. + +module NegSyn_06020502_option_and_union_001 { + type union U { + integer option1, + charstring option2 optional + } +} \ No newline at end of file diff --git a/core_language/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 b/core_language/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 new file mode 100644 index 0000000..7d586b9 --- /dev/null +++ b/core_language/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 @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, union type declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// TTCN-3 supports the definition of types for union alternatives nested within +// the union definition, similar to the mechanism for record types described in +// clause 6.2.1.3. + +module Syn_06020503_nested_type_definition_for_field_types_001 { + + type union MyUnionType + { + record { + integer field1, + integer field2 optional + } option1, + record of integer option2, + union { + integer suboption1, + charstring suboption2 + } option3 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn new file mode 100644 index 0000000..959de2b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, assignment notation for union values with two items + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The assignment notation shall be used for union-s, and the notation shall assign +// a value to one field only. This field becomes the chosen field. + +module NegSem_060205_top_level_001 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_060205_top_level_001() runs on GeneralComp { + var U v_choice := { option1 := 1, option2 := "abc" }; + if (ischosen(v_choice.option1) or ischosen(v_choice.option2)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_060205_top_level_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_002.ttcn new file mode 100644 index 0000000..0acef9a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_002.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, assignment notation for union values with unknown alternative + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The assignment notation shall be used for union-s, and the notation shall assign +// a value to one field only. This field becomes the chosen field. + +module NegSem_060205_top_level_002 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_060205_top_level_002() runs on GeneralComp { + var U v_choice := { option1 := 10 }; + v_choice := { option3 := true }; + if (ischosen(v_choice.option1)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_060205_top_level_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_003.ttcn new file mode 100644 index 0000000..75e7871 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_003.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, "not used" symbol in union value notations + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Neither the not used symbol "-" nor omit is allowed in union value notations. + +module NegSem_060205_top_level_003 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_060205_top_level_003() runs on GeneralComp { + var U v_choice := { option1 := - }; + if (ischosen(v_choice.option1)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_060205_top_level_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_004.ttcn new file mode 100644 index 0000000..0f3c080 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_004.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, omit symbol in union value notations + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Neither the not used symbol "-" nor omit is allowed in union value notations. + +module NegSem_060205_top_level_004 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_NegSem_060205_top_level_004() runs on GeneralComp { + var U v_choice := { option1 := omit }; + if (ischosen(v_choice.option1) or ischosen(v_choice.option2)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_060205_top_level_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_005.ttcn new file mode 100644 index 0000000..c7a0f56 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSem_060205_top_level_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, value list notation used for union value definition + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The value list notation shall not be used for setting values of union types. + +module NegSem_060205_top_level_005 { + type component GeneralComp { + } + + type union U { + integer option1 + } + + testcase TC_NegSem_060205_top_level_005() runs on GeneralComp { + var U v_choice := { 1 }; + if (ischosen(v_choice.option1)) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_NegSem_060205_top_level_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSyn_060205_top_level_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSyn_060205_top_level_001.ttcn new file mode 100644 index 0000000..3b3b300 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/NegSyn_060205_top_level_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, union type declaration with two equal identifiers + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// TTCN-3 supports the union type. The union type is a collection of alternatives, +// each one identified by an identifier. Only one of the specified alternatives +// will ever be present in an actual union value. Union types are useful to model +// data which can take one of a finite number of known types. + +module NegSyn_060205_top_level_001 { + type union U { + integer option1, + charstring option2, + boolean option1 // error expected + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Sem_060205_top_level_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Sem_060205_top_level_001.ttcn new file mode 100644 index 0000000..95c64a0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Sem_060205_top_level_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, assignment notation for union values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The assignment notation shall be used for union-s, and the notation shall assign +// a value to one field only. This field becomes the chosen field. + +module Sem_060205_top_level_001 { + type component GeneralComp { + } + + type union U { + integer option1, + charstring option2 + } + + testcase TC_Sem_060205_top_level_001() runs on GeneralComp { + var U v_choice := { option1 := 1 }; + if (ischosen(v_choice.option1) and v_choice.option1 == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + execute(TC_Sem_060205_top_level_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_001.ttcn new file mode 100644 index 0000000..bc047ce --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, union type declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// TTCN-3 supports the union type. The union type is a collection of alternatives, +// each one identified by an identifier. Only one of the specified alternatives +// will ever be present in an actual union value. Union types are useful to model +// data which can take one of a finite number of known types. + +module Syn_060205_top_level_001 { + const integer number := 4; // to test rules on uniqueness of identifiers + + type union MyUnionType + { + integer number, + charstring string + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_002.ttcn new file mode 100644 index 0000000..f1cc320 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060205_unions/060205_toplevel/Syn_060205_top_level_002.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.5, union type declaration with single item + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// TTCN-3 supports the union type. The union type is a collection of alternatives, +// each one identified by an identifier. Only one of the specified alternatives +// will ever be present in an actual union value. Union types are useful to model +// data which can take one of a finite number of known types. + +module Syn_060205_top_level_002 { + type union U { + integer option1 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_001.ttcn new file mode 100644 index 0000000..33d5710 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_001.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that after redeclaration of an anytype value the old type and value are lost + ** @verdict pass reject + ***************************************************/ +module NegSem_060206_anytype_001 { + type component GeneralComp { + +var anytype Var1, Var2; + +} + +testcase TC_NegSem_060206_anytype_001() runs on GeneralComp { + +Var1.integer := 10; +Var2.float := 3.0E0; + +Var1.float := 5.5E0; +Var2.charstring := "abc"; // the new type of Var2 is charstring instead of float + + if ( match(Var1.integer, 10) and match(Var2.float, 3.0E0)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_NegSem_060206_anytype_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_002.ttcn new file mode 100644 index 0000000..5c970c3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSem_060206_anytype_002.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, Ensure that anytype can not be address type if not explicitly declareted in the module + ** @verdict pass reject + ***************************************************/ +module NegSem_060206_anytype_002 { + +type component GeneralComp { + + var anytype x; +} + + +testcase TC_NegSem_060206_anytype_002() runs on GeneralComp { + +x.address:=10; // error: address type is not declarated in the module explicitly + + + if (x.address==10) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_NegSem_060206_anytype_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_001.ttcn new file mode 100644 index 0000000..8801268 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can not be a default type + ** @verdict pass reject + ***************************************************/ + +module NegSyn_060206_anytype_001 { + +type default Mydef; + +type component GeneralComp { + var Mydef y:= null; + var anytype x; + +} + + +testcase TC_NegSyn_060206_anytype_001() runs on GeneralComp { + +x.Mydef := y; // default type is not allowed with anytype + + + + if (x.Mydef == null) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_NegSyn_060206_anytype_001()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_002.ttcn new file mode 100644 index 0000000..d17d4f0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype cannot be port type + ** @verdict pass reject + ***************************************************/ + + +module NegSyn_060206_anytype_002 { + + +type port MyPort message{ + address integer; + inout integer; +}; + +type component GeneralComp { +var anytype x; +port MyPort PCO1; + +} + + +testcase TC_NegSyn_060206_anytype_002() runs on GeneralComp { + +x.MyPort:= PCO1; // port type is not allowed with anytype + + +} + +control { + execute(TC_NegSyn_060206_anytype_002()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_003.ttcn new file mode 100644 index 0000000..0bb9ed6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/NegSyn_060206_anytype_003.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that component type not allowed for anytype + ** @verdict pass reject + ***************************************************/ + +module NegSyn_060206_anytype_003 { + +type component MyComp{ +var integer b; +} + +type component GeneralComp extends MyComp { + + var anytype c; + +} + + +testcase TC_NegSyn_060206_anytype_003() runs on GeneralComp { + +b := 10; + +c.MyComp:= b; // Component type is not allowed with anytype + + + +} + +control { + execute(TC_NegSyn_060206_anytype_003()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_001.ttcn new file mode 100644 index 0000000..0d9a152 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype comprise integer data type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_001 { + + + type component GeneralComp { + +var anytype Var1, Var2; +var integer Var3; +} + + +testcase TC_Sem_060206_anytype_001() runs on GeneralComp { + +Var1.integer := 10; +Var2:= {integer := Var1.integer + 3}; +Var3 := Var2.integer * 2; + + if (Var3==26) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_002.ttcn new file mode 100644 index 0000000..2ae5f5a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_002.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype comprise float data type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_002 { + type component GeneralComp { + +var anytype Var1, Var2; +var float Var3; + +} + +testcase TC_Sem_060206_anytype_002() runs on GeneralComp { + +Var1.float := 10.5; +Var2:= {float := Var1.float + 3.0}; +Var3 := Var2.float * 2.0; + + if (Var3==27.0) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_003.ttcn new file mode 100644 index 0000000..47c90a0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_003.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype comprise boolean data type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_003 { + type component GeneralComp { + +var anytype Var1, Var2,Var3; +var boolean Var4, Var5; + +} + +testcase TC_Sem_060206_anytype_003() runs on GeneralComp { + +Var1.boolean := true; +Var2.boolean:=true; +Var3.boolean := not Var1.boolean; // not true = false + +Var4 := Var1.boolean and Var2.boolean; // true and true = true +Var5 := Var1.boolean and Var3.boolean; // true and false = false + + if (match(Var4, true) and match(Var5, false)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_003()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_004.ttcn new file mode 100644 index 0000000..d11921f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_004.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype comprise verdicttype data type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_004 { + type component GeneralComp { + +var anytype Var1, Var2; +var verdicttype c; + +} + +testcase TC_Sem_060206_anytype_004() runs on GeneralComp { + +Var1.verdicttype := pass; +Var2.verdicttype:=fail; + +c :=Var1.verdicttype; + + if (match(c, pass) and match(Var2.verdicttype, fail)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_004()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_005.ttcn new file mode 100644 index 0000000..46b772d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_005.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype comprise bitstring and hexstring data type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_005 { + type component GeneralComp { + +var anytype Var1, Var2; +} + +testcase TC_Sem_060206_anytype_005() runs on GeneralComp { + +Var1.bitstring := '1010'B; +Var2.hexstring:='FE80'H; + + + if (match(Var1.bitstring, '1010'B) and match(Var2.hexstring, 'FE80'H)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_005()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_006.ttcn new file mode 100644 index 0000000..3529ab4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that ensure that anytype comprise octetstring and charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_006 { + + type component GeneralComp { + +var anytype MyVarOne, MyVarTwo; +var octetstring MyVarThree; +var charstring MyString1; +} + +testcase TC_Sem_060206_anytype_006() runs on GeneralComp { + +MyVarOne.octetstring := 'FF70'O; //a float in anytype +MyVarTwo.charstring :="abc"; // a charstring in the same anytype + +MyVarThree:=MyVarOne.octetstring; +MyString1:=MyVarTwo.charstring&"def"; // "abc" & "def" =>"abcdef" + + if ( match(MyVarThree, 'FF70'O) and match(MyString1, "abcdef") ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_006()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_007.ttcn new file mode 100644 index 0000000..a73987d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_007.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that ensure that anytype comprise universal charstring + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_007{ + + type component GeneralComp { + var anytype MyVarOne; + var universal charstring MyVarThree; + } + +testcase TC_Sem_060206_anytype_007() runs on GeneralComp { + + + MyVarOne.universal charstring := "FF80"; //a universal charstring in anytype + + MyVarThree:=MyVarOne.universal charstring; + + if (MyVarThree=="FF80") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_007()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_008.ttcn new file mode 100644 index 0000000..0eafdc1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_008.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype is a valid value inside an union + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_008 { + type component GeneralComp { + var anytype c; +} + +type union R + { + anytype cs1 //Union type R element is an anytype data + } + + +testcase TC_Sem_060206_anytype_008() runs on GeneralComp { + +c.R.cs1.charstring := "abc"; // The element of Uninon R becomes a charstring + + if (c.R.cs1.charstring =="abc") { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_008()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_009.ttcn new file mode 100644 index 0000000..62b11ca --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_009.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that record values can be anytype + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_009 { + + type record MyRec + { + anytype cs1 //Record type MyRec element is an anytype data + } + + type component GeneralComp { + var MyRec R; + var anytype c,d; +} + + + + +testcase TC_Sem_060206_anytype_009() runs on GeneralComp { + + +R.cs1.charstring:= "abc"; // cs1 in R record is now charstring +c.charstring :=R.cs1.charstring; // anytype c becomes a charstring + +R.cs1.integer:= 15; // cs1 in R record now integer +d.integer := R.cs1.integer; //anytype d becomes integer + + + if ( match(c.charstring, "abc") and match(d.integer, 15)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_009()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_010.ttcn new file mode 100644 index 0000000..6696d73 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_010.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can be an enum type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_010 { + type component GeneralComp { +} + +type enumerated Myenum +{ +FirstElement, +SecondElement +} + +testcase TC_Sem_060206_anytype_010() runs on GeneralComp { + +var anytype c; +c.Myenum:= FirstElement; // anytype c follows the type Myenum and the value of c should be FirstElement + + if (c.Myenum ==FirstElement) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_010()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_011.ttcn new file mode 100644 index 0000000..00252c0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_011.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can have an set value and set value can be anytype + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_011 { + type component GeneralComp { +} + +type set MySet +{ +integer First, +charstring Second, +anytype Third //3rd element of this type of set is anytype +} + +testcase TC_Sem_060206_anytype_011() runs on GeneralComp { + +var anytype c; +var MySet S; // Set S from type MySet + +c.MySet.Second := "abc"; // anytype c becomes a charstring +S.Third.float:=15.5; // The 3rd element in set S is now becomes a float with value 15.5 + + + if ( match(c.MySet.Second, "abc") and match(S.Third.float, 15.5)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_011()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_012.ttcn new file mode 100644 index 0000000..7fc73db --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_012.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that redeclaration of an anytype value works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_012 { + +type record R + { + anytype R1 // R Record type contains an anytype element. + }; + +type component GeneralComp { + +var anytype Var_1, Var_2,Var_3; +var R MyRec; + +} + +testcase TC_Sem_060206_anytype_012() runs on GeneralComp { + +Var_1.integer := 10; // Var_1 integer with value of 10 +Var_2.float := 3.0E0; // Var_2 float with value of 3.0 +MyRec.R1.float := 3.5E0; // record MyRec R1 element is now a float with value of 3.5 + +Var_3.float := MyRec.R1.float + Var_2.float; // Var_3 is float type = 3.5 + 3.0 + +// changing types: +Var_1.float := 5.5E0; // Var_1 float with value of 5.5 +Var_2.charstring := "abc"; // Var_2 charstring with value of "abc" +MyRec.R1.charstring := "def"; // record MyRec R1 element is now a charstring with value of "def" + + if (match(Var_1.float, 5.5E0) and match(Var_2.charstring, "abc") and match(Var_3.float, 6.5E0) + and match(MyRec.R1.charstring, "def")) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_012()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_013.ttcn new file mode 100644 index 0000000..bb72fb9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_013.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that address type is included to anytype (if it has been explicitly defined within that module) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_013 { + + +type integer address; // definition of address type globally + + +type component GeneralComp { + + var anytype x; +} + + +testcase TC_Sem_060206_anytype_013() runs on GeneralComp { + +x.address:=10; // anytype x now address type with value integer 10 + + + if (x.address==10) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_013()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_014.ttcn new file mode 100644 index 0000000..eff0f9f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_014.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can be record type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_014 { + +type record MyRec1{ + charstring field1, + boolean field2 }; + + +type component GeneralComp { + + var anytype x; // anytype x variable + + var MyRec1 y := { + field1:= "abc", + field2:= true }; // record y contains field1=abc and field2=true + +} + + +testcase TC_Sem_060206_anytype_014() runs on GeneralComp { + +x.MyRec1 := y; // anytype x now gets the type MyRec1 and the values given by y. + + + if (match(x.MyRec1.field1, "abc") and match(x.MyRec1.field2,true)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_014()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_015.ttcn new file mode 100644 index 0000000..3b62ce7 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_015.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can act as a set type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_015 { + +type set MySet{ + charstring field1, + boolean field2 }; + + +type component GeneralComp { + + var anytype x; // anytype x variable + + var MySet y := { + field1:= "abc", + field2:= true }; // Set y contains field1=abc and field2=true + +} + + +testcase TC_Sem_060206_anytype_015() runs on GeneralComp { + +x.MySet := y; // anytype x now gets the type MySet and the values given by y. + + + if ( match(x.MySet.field1, "abc") and match(x.MySet.field2, true)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_015()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_016.ttcn new file mode 100644 index 0000000..8157d17 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_016.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can act as an union + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_016 { + +type union MyUnion1 { +integer number, +charstring string +}; + + +type component GeneralComp { + + var anytype x; // anytype x variable + var MyUnion1 y; + +} + + +testcase TC_Sem_060206_anytype_0016() runs on GeneralComp { + +y.number:=11; +y.string := "abc"; // Union y contains field1=abc and field2=true + + +x.MyUnion1:= y; // anytype x now gets the type MyUnion1 and the values given by y. + + if (valueof(x.MyUnion1)==valueof(y)) + { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_0016()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_017.ttcn new file mode 100644 index 0000000..f488f26 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_017.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can comprise array type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_017 { + +type integer MyArray[1..3]; // MyArray type is an integer array with 3 elements + + +type component GeneralComp { + + var anytype x; // Anytype x variable + var MyArray y := {1,2,4}; // y array follows type MyArray with values 1,2,4 + +} + + +testcase TC_Sem_060206_anytype_0017() runs on GeneralComp { + +x.MyArray := y; // anytype x now follows type MyArray and gets the values of 1,2,4 as given in array y. + + + if (match(x.MyArray, {1,2,4})) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_0017()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_018.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_018.ttcn new file mode 100644 index 0000000..35de01b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_018.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype can comprise set of and record of types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060206_anytype_018 { + +type record of integer FirstRecordOf; // record of integers +type set of boolean FirstSetOf; // set of booleans + + +type component GeneralComp { + + var anytype x; // Anytype x and y variables + var anytype y; + + var FirstRecordOf MyVar1 := { 0, 5, 2, -, 6 }; // MyVar1 follows type FirstRecordOf with values 0,5,2,-,6 + var FirstSetOf MyVar2 := { true, -,-, false, true}; // MyVar2 follows type FirstSetOf with values true,-,-,false,true + +} + + +testcase TC_Sem_060206_anytype_0018() runs on GeneralComp { + +x.FirstRecordOf := MyVar1; // anytype x is now a record of type with values of MyVar1 +y.FirstSetOf := MyVar2; // anytype x is now a set of type with values of MyVar2 + + if (match(x.FirstRecordOf[0], 0) and match(x.FirstRecordOf[4], 6) + and match(y.FirstSetOf[0], true) and match(y.FirstSetOf[3], false) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_0018()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_019.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_019.ttcn new file mode 100644 index 0000000..0e96cb8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060206_anytype/Sem_060206_anytype_019.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.0.6, ensure that anytype (as a user defined type) can be imported from another module + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060206_anytype_019 { +import from Sem_060206_anytype_019_import all; // this contains a type (anytype) MyAnyType + +type component GeneralComp { +var MyAnyType x; // MyAnyType is an anytype defined in module Sem_060206_anytype_017_import +var MyAnyType y; +} + + +testcase TC_Sem_060206_anytype_019() runs on GeneralComp { + +x.float := 10.0E0; //anytype x is now a float with value 10.0 +y.bitstring := '1010'B; //anytype y is now a bitstring with value 1010 + + if (match(x.float, 10.0E0) and match(y.bitstring, '1010'B)) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060206_anytype_019()); +} + +} + + +module Sem_060206_anytype_019_import +{ + + type anytype MyAnyType; + + + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_001.ttcn new file mode 100644 index 0000000..a821284 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that the value limitation is correctly handled within array + ** @verdict pass reject + ***************************************************/ +module NegSem_060207_arrays_001 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + +testcase TC_NegSem_060207_arrays_001() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 11, 2, 3, 4}; // syntax error expected, value shall be between 1..10 + +} + +control { + execute(TC_NegSem_060207_arrays_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_002.ttcn new file mode 100644 index 0000000..6e8f3ea --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_002.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that the inner type referencing is correctly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_060207_arrays_002 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + +testcase TC_NegSem_060207_arrays_002() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4, 5, 6}; // array is longer than the restricted length + +} + +control { + execute(TC_NegSem_060207_arrays_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_003.ttcn new file mode 100644 index 0000000..f88dbba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_003.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, negative index applied to an array on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module NegSem_060207_arrays_003 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_003() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + var integer i := v_array1[-1]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_003()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_004.ttcn new file mode 100644 index 0000000..3ae8f38 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_004.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, negative index applied to an array on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module NegSem_060207_arrays_004 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_004() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + v_array1[-1] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_004()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_005.ttcn new file mode 100644 index 0000000..4273736 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, wrong index type applied to an array on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. +// [from 3.1] index notation: notation to access individual elements of record of, +// set of, array and string values or templates, where the element to be accessed +// is identified explicitly by an index value enclosed in square brackets ("[" and +// "]") which specifies the position of that element within the referenced value +// or template and the index value is either an integer value, array of integers +// or record of integers. + +module NegSem_060207_arrays_005 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_005() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + var integer i := v_array1["0"]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_005()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_006.ttcn new file mode 100644 index 0000000..89c1f7a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, wrong index type applied to an array on the left hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. +// [from 3.1] index notation: notation to access individual elements of record of, +// set of, array and string values or templates, where the element to be accessed +// is identified explicitly by an index value enclosed in square brackets ("[" and +// "]") which specifies the position of that element within the referenced value +// or template and the index value is either an integer value, array of integers +// or record of integers. + +module NegSem_060207_arrays_006 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_006() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + v_array1["0"] := 10; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_006()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_007.ttcn new file mode 100644 index 0000000..403fa24 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_007.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, array index greater than the upper bound (left-hand side) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index shall not exceed the limitations given by either the length or the +// upper bound of the index. + +module NegSem_060207_arrays_007 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_007() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + v_array1[5] := 3; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_007()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_008.ttcn new file mode 100644 index 0000000..d924538 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_008.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, wrong index type applied to an array on the right hand side of an assignment + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index shall not exceed the limitations given by either the length or the +// upper bound of the index. + +module NegSem_060207_arrays_008 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSem_060207_arrays_008() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 9, 2, 3, 4}; + var integer i := v_array1[5]; // error expected + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_008()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_009.ttcn new file mode 100644 index 0000000..58c5639 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_009.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify than an error is generated when sending a partially initialized array + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Sending an array value with undefined elements shall cause an error. + +module NegSem_060207_arrays_009 { + + type integer MyArrayType1[5] (1 .. 10); + + type port P message { + inout MyArrayType1 + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_060207_arrays_009() runs on GeneralComp { + var template MyArrayType1 m_array1 := { 8, 9, -, 3, 4}; + p.send(m_array1); // error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_060207_arrays_009()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_010.ttcn new file mode 100644 index 0000000..eefb38a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_010.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that the value limitation is correctly handled within array + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The values of array elements shall be compatible with the corresponding +// variable or type declaration. + +module NegSem_060207_arrays_010 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + +testcase TC_NegSem_060207_arrays_010() runs on GeneralComp { + + var MyArrayType1 v_array1 := { + [0] := 8, + [1] := 0,// error expected, value shall be between 1..10 + [2] := 2, + [2] := 3, + [2] := 4 + }; + +} + +control { + execute(TC_NegSem_060207_arrays_010()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_011.ttcn new file mode 100644 index 0000000..443cbc2 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_011.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, runtime resolved constant in array type declaration + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_011 { + + type component GeneralComp { + } + + function f() return integer { + if (rnd() < 0.5) { return 5; } + else { return 10; } + } + + const integer c_dimension := f(); + type integer Arr[c_dimension]; + + testcase TC_NegSem_060207_arrays_011() runs on GeneralComp { + var Arr v_arr; + v_arr[0] := 1; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_011()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_012.ttcn new file mode 100644 index 0000000..fb63403 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_012.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, runtime resolved constant in array variable declaration + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_012 { + + type component GeneralComp { + } + + function f() return integer { + if (rnd() < 0.5) { return 5; } + else { return 10; } + } + + const integer c_dimension := f(); + + testcase TC_NegSem_060207_arrays_012() runs on GeneralComp { + var integer v_arr[c_dimension]; + v_arr[0] := 1; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_012()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_013.ttcn new file mode 100644 index 0000000..8957c70 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_013.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, variable in array variable declaration + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_013 { + + type component GeneralComp { + } + + function f() return integer { + if (rnd() < 0.5) { return 5; } + else { return 10; } + } + + testcase TC_NegSem_060207_arrays_013() runs on GeneralComp { + var integer v_dimension := f(); + var integer v_arr[v_dimension]; + v_arr[0] := 1; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_013()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_014.ttcn new file mode 100644 index 0000000..69b6597 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_014.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, modulepar in array variable declaration + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_014 { + + type component GeneralComp { + } + + function f() return integer { + if (rnd() < 0.5) { return 5; } + else { return 10; } + } + + modulepar integer PX_DIMENSION := 5; + + testcase TC_NegSem_060207_arrays_014() runs on GeneralComp { + var integer v_arr[PX_DIMENSION]; + v_arr[0] := 1; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_014()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_015.ttcn new file mode 100644 index 0000000..470b4c5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_015.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, zero dimension array + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_015 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_015() runs on GeneralComp { + var integer v_arr[0] := {}; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_015()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_016.ttcn new file mode 100644 index 0000000..9dfcb74 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_016.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, array with negative dimension + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_016 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_016() runs on GeneralComp { + var integer v_arr[3][-1]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_016()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_017.ttcn new file mode 100644 index 0000000..64001f1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_017.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, zero in array dimension (range notation) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_017 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_017() runs on GeneralComp { + var integer v_arr[0..2] := { 2, 3, 4 }; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_017()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_018.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_018.ttcn new file mode 100644 index 0000000..9e101f5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_018.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, negative value in array dimension (range notation) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_018 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_018() runs on GeneralComp { + const integer c_lower := 2 - 4; + var integer v_arr[c_lower .. 1]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_018()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_019.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_019.ttcn new file mode 100644 index 0000000..2579a42 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_019.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, float instead of integer in array dimension + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module NegSem_060207_arrays_019 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_019() runs on GeneralComp { + var integer v_arr[2.0]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_019()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_020.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_020.ttcn new file mode 100644 index 0000000..cbb5da1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_020.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, integer array with too many items as multidimensional array index + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An array or record of integer restricted to a single size can be used in the +// index notation as a short-hand for the repeated index notation. + +module NegSem_060207_arrays_020 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_020() runs on GeneralComp { + var integer v_rhindexes[3] := { 0, 1, 0 }, v_lhindexes[3] := { 1, 2, 0 } + var integer v_arr[2][3] := { { 1, 2, 3 }, { 4, 5, 6 } }; + // testing both RH and LH side: + v_arr[v_lhindexes] := v_arr[v_rhindexes]; + if (v_arr == { { 1, 2, 3 }, { 4, 5, 2} }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_060207_arrays_020()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_021.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_021.ttcn new file mode 100644 index 0000000..16d49c9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_021.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, variable-size record of integer as multidimensional array index + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An array or record of integer restricted to a single size can be used in the +// index notation as a short-hand for the repeated index notation. + +module NegSem_060207_arrays_021 { + + type component GeneralComp { + } + + type record length(1..2) of integer RI; + + testcase TC_NegSem_060207_arrays_021() runs on GeneralComp { + var RI v_rhindexes := { 0, 1 }, v_lhindexes := { 1, 2 } + var integer v_arr[2][3] := { { 1, 2, 3 }, { 4, 5, 6 } }; + // testing both RH and LH side: + v_arr[v_lhindexes] := v_arr[v_rhindexes]; + if (v_arr == { { 1, 2, 3 }, { 4, 5, 2} }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_060207_arrays_021()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_022.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_022.ttcn new file mode 100644 index 0000000..bcde09c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_022.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using lower than allowed custom array index on the right hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module NegSem_060207_arrays_022 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_022() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + var boolean v_bool := v_arr[0] == 0; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_022()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_023.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_023.ttcn new file mode 100644 index 0000000..d71b951 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_023.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using lower than allowed custom array index on the left hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module NegSem_060207_arrays_023 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_023() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + v_arr[0] := 0; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_023()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_024.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_024.ttcn new file mode 100644 index 0000000..c5251f0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_024.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using greater than allowed custom array index on the right hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index shall not exceed the limitations given by either the length or the +// upper bound of the index. + +module NegSem_060207_arrays_024 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_024() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + var boolean v_bool := v_arr[6] == 6; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_024()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_025.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_025.ttcn new file mode 100644 index 0000000..885e572 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_025.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using greater than allowed custom array index on the left hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The index shall not exceed the limitations given by either the length or the +// upper bound of the index. + +module NegSem_060207_arrays_025 { + + type component GeneralComp { + } + + testcase TC_NegSem_060207_arrays_025() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + v_arr[6] := 6; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_025()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_026.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_026.ttcn new file mode 100644 index 0000000..55a6252 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_026.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, referencing uninitialized array element on the right hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// : If the value of the element indicated by the index at the right hand of +// an assignment is undefined or if the index notation is applied to an uninitialized +// or omitted array value on the right hand side of an assignment, error shall be +// caused. + +module NegSem_060207_arrays_026 { + + type component GeneralComp { + } + + type record R { + integer field1[3], + boolean field2 + } + + testcase TC_NegSem_060207_arrays_026() runs on GeneralComp { + var integer v_arr[3], v_int; + v_arr[2] := 1; + v_int := v_arr[0]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_026()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_027.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_027.ttcn new file mode 100644 index 0000000..40f4b1b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_027.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, referencing element of uninitialized arrays on the right hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// : If the value of the element indicated by the index at the right hand of +// an assignment is undefined or if the index notation is applied to an uninitialized +// or omitted array value on the right hand side of an assignment, error shall be +// caused. + +module NegSem_060207_arrays_027 { + + type component GeneralComp { + } + + type record R { + integer field1[3], + boolean field2 + } + + testcase TC_NegSem_060207_arrays_027() runs on GeneralComp { + var R v_rec := { -, true } + var integer v_int := v_rec.field1[0]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_027()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_028.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_028.ttcn new file mode 100644 index 0000000..b8f8d0c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSem_060207_arrays_028.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, referencing element of omitted arrays on the right hand side of assignments + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// : If the value of the element indicated by the index at the right hand of +// an assignment is undefined or if the index notation is applied to an uninitialized +// or omitted array value on the right hand side of an assignment, error shall be +// caused. + +module NegSem_060207_arrays_028 { + + type component GeneralComp { + } + + type record R { + integer field1[3] optional, + boolean field2 + } + + testcase TC_NegSem_060207_arrays_028() runs on GeneralComp { + var R v_rec := { omit, true } + var integer v_int := v_rec.field1[0]; + setverdict(pass); + } + + control { + execute(TC_NegSem_060207_arrays_028()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_001.ttcn new file mode 100644 index 0000000..2299237 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that array cannot contain an empty assignment + ** @verdict pass reject + ***************************************************/ + +module NegSyn_060207_arrays_001 { + + type component GeneralComp { + } + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSyn_060207_arrays_001() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, , 2, 3, 4}; // syntax error expected + + } + + control { + execute(TC_NegSyn_060207_arrays_001()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn new file mode 100644 index 0000000..d41ad7b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that array field cannot contain an empty index + ** @verdict pass reject + ***************************************************/ +module NegSyn_060207_arrays_002 { + + type component GeneralComp { + } + + + type integer MyArrayType1[5] (1 .. 10); + + testcase TC_NegSyn_060207_arrays_002() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 10, 2, 3, 4}; + v_array1[] := 10; // error expected - missing index + } + + control { + execute(TC_NegSyn_060207_arrays_002()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn new file mode 100644 index 0000000..c916a59 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_003.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that array field cannot contain an empty index + ** @verdict pass reject + ***************************************************/ +module NegSyn_060207_arrays_002 { + + type component GeneralComp { + } + + + type integer MyArrayType1[5] (1 .. 10); + + + testcase TC_NegSyn_060207_arrays_002() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 10, 2, 3, 4}; + var integer i :=v_array1[];// error expected - missing index + } + + control { + execute(TC_NegSyn_060207_arrays_002()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn new file mode 100644 index 0000000..c802e1d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_004.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, infinity in array variable dimension + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Array dimensions may also be specified using ranges (with inclusive +// boundaries only). In such cases, the lower and upper values of the range +// define the lower and upper index values. Such an array is corresponding to +// a record of with a fixed length restriction computed as the difference +// between upper and lower index bound plus 1 and indexing starting from the +// lower bound of the array definition. + +module NegSyn_060207_arrays_004 { + + control { + var integer v_arr[1..infinity]; + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn new file mode 100644 index 0000000..628f53e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/NegSyn_060207_arrays_005.ttcn @@ -0,0 +1,15 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:6.2.7, Ensur 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/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn new file mode 100644 index 0000000..d3b12d8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_001.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify that value list notation can be used for an array + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060207_arrays_001 { + +// The following requirement is tested: +// When the value list notation is used, the first value of the list is assigned to +// the first element of the array (the element with index 0 or the lower bound if +// an index range has been given), the second value to the next element, etc. + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + +testcase TC_Sem_060207_arrays_001() runs on GeneralComp { + + var MyArrayType1 v_array1 := { 8, 1, 2 }; + if (v_array1[2]==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060207_arrays_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn new file mode 100644 index 0000000..a409863 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_002.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify assignment of explicitly identified elements to arrays + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Values may be assigned individually by a value list notation or indexed notation +// or more than one or all at once by a value list notation or index assignment +// notation. +// Elements to be left out from the assignment shall be explicitly skipped in the +// list by using dash. + +module Sem_060207_arrays_002 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_002() runs on GeneralComp { + + var MyArrayType1 v_array1 := { + [0] := 8, + [1] := 1, + [2] := - + }; + + if (match(v_array1[0], 8) and match(v_array1[1], 1) and not isbound(v_array1[2]) + and lengthof (v_array1 & {2}) == 4) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_002()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn new file mode 100644 index 0000000..ee53e1b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_003.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify handling of missing elements in assignment notation for arrays + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For using the assignment notation for arrays, the rules described in 6.2.3 are +// valid for arrays as well. + +module Sem_060207_arrays_003 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_003() runs on GeneralComp { + + var MyArrayType1 v_array1 := { + [1] := 1 + }; + + if (not isbound(v_array1[0]) and match(v_array1[1], 1)) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_060207_arrays_003()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_004.ttcn new file mode 100644 index 0000000..d38b029 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_004.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify handling of missing and ignored elements during an array re-assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements to be left out from the assignment shall be explicitly skipped in the +// list by using dash. + +module Sem_060207_arrays_004 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_004() runs on GeneralComp { + + var MyArrayType1 v_array1 := { + [0] := 8, + [1] := -, + [2] := 2 + } + + v_array1[1] := 1; + + if (v_array1 == { 8, 1, 2 }) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060207_arrays_004()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_005.ttcn new file mode 100644 index 0000000..5b12454 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_005.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify handling of value list assignment used for initialization of arrays + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Elements to be left out from the assignment shall be explicitly skipped in the +// list by using dash. + +module Sem_060207_arrays_005 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_005() runs on GeneralComp { + var MyArrayType1 v_array1 := {8, -, 2} + if (match(v_array1[0], 8) and match(v_array1[2], 2) and not isbound(v_array1[1]) + and lengthof (v_array1 & {2}) == 4) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_005()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_006.ttcn new file mode 100644 index 0000000..48394a5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_006.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.4, verify handling of value list assignment used for update of arrays + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When the value list notation is used, the first value of the list is assigned to +// the first element of the array (the element with index 0 or the lower bound if +// an index range has been given), the second value to the next element, etc. + +module Sem_060207_arrays_006 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_006() runs on GeneralComp { + + var MyArrayType1 v_array1 := {8, -, 2} + v_array1 := {8, 1, 2}; + if (v_array1 == { 8, 1, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_006()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_007.ttcn new file mode 100644 index 0000000..09f0bc8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_007.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify handling of index notation applied to array on right-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand side +// of assignments. The index of the first element shall be zero or the lower bound +// if an index range has been given. + +module Sem_060207_arrays_007 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_007() runs on GeneralComp { + + var MyArrayType1 v_array1 := {8, 1, 2} + var integer i := v_array1[1]; + if (i == 1 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_007()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_008.ttcn new file mode 100644 index 0000000..e2efbd3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_008.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify handling of index notation applied to array on left-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Indexed value notation can be used on both the right-hand side and left-hand side +// of assignments. The index of the first element shall be zero or the lower bound +// if an index range has been given. + +module Sem_060207_arrays_008 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_008() runs on GeneralComp { + + var MyArrayType1 v_array1 := {8, 1, 2} + v_array1[1] := 10; + if (v_array1 == { 8, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_008()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_009.ttcn new file mode 100644 index 0000000..4017870 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_009.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.3.2, verify the first element of an array is accessible by an index notation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The index of the first element shall be zero. +module Sem_060207_arrays_009 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_009() runs on GeneralComp { + + var MyArrayType1 v_array1 := {10, 1, 2}; + v_array1[0] := 10; // first index on the left hand side + v_array1[1] := v_array1[0]; // first index on the right hand side + if (v_array1 == { 10, 10, 2} ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_009()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_010.ttcn new file mode 100644 index 0000000..1b6ad9d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_010.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, verify that arrays can be used to specify record of type and they are compatible + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Arrays can be used in TTCN-3 as a shorthand notation to specify record of types. + +module Sem_060207_arrays_010 { + + type component GeneralComp { + } + + type integer MyArrayType1[3]; + type record length (3) of integer MyRecordOfType1; + + testcase TC_Sem_060207_arrays_010() runs on GeneralComp { + + var MyArrayType1 a1 := {7, 8, 9}; + var MyRecordOfType1 r1 := {7, 8, 9}; + + if (r1 == a1) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_010()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_011.ttcn new file mode 100644 index 0000000..188d35a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_011.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, index notation applied to omitted array field on left hand side of assignment + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// All elements in an array value that are not set explicitly are undefined. +// When referencing an element of an uninitialized array value or field or +// omitted field on the left hand side of an assignment, the rules for record +// of values specified in 6.2.3 apply. + +module Sem_060207_arrays_011 { + + type component GeneralComp { + } + + type record R { + integer field1[3] optional + } + + testcase TC_Sem_060207_arrays_011() runs on GeneralComp { + + var R v_rec := { field1 := omit }; + v_rec.field1[2] := 3; + + if (not isbound(v_rec.field1[0]) and not isbound(v_rec.field1[1]) and + v_rec.field1[2] == 3) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_011()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_012.ttcn new file mode 100644 index 0000000..9c5885e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_012.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, referencing element of uninitialized array (left-hand side) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// All elements in an array value that are not set explicitly are undefined. When +// referencing an element of an uninitialized array value or field or omitted field +// on the left hand side of an assignment, the rules for record of values specified +// in 6.2.3 apply. + +module Sem_060207_arrays_012 { + + type component GeneralComp { + } + + type integer MyArrayType1[3] (1 .. 10); + + testcase TC_Sem_060207_arrays_012() runs on GeneralComp { + + var MyArrayType1 v_array1; + v_array1[2] := 2; // {-, -, 2} + if (not isbound(v_array1[0]) and + not isbound(v_array1[1]) and + match(v_array1[2], 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060207_arrays_012()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_013.ttcn new file mode 100644 index 0000000..be8614e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_013.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.7, ensure that the two dimensional array type referencing is correctly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060207_arrays_013 { + +// The following requirement is tested: +// Individual elements of multi-dimensional arrays can be accessed by repeated use of +// the index notation. +// For assigning values to multi-dimensional arrays, each dimension that is assigned +// shall resolve to a set of values enclosed in curly braces. + + type component GeneralComp { + } + + + type integer MyArrayType1[2][3] (1 .. 10); + + +testcase TC_Sem_060207_arrays_013() runs on GeneralComp { + + var MyArrayType1 v_array1 := {{8, 10, 9}, + {2, 3, 4}}; + + if (v_array1[1][1]==3) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060207_arrays_013()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_014.ttcn new file mode 100644 index 0000000..7acd445 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_014.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:6.2.7, verify assignment of explicitly identified elements to two dimensional array + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When specifying values for multi-dimensional arrays, the leftmost dimension +// corresponds to the outermost structure of the value, and the rightmost dimension to +// the innermost structure. + +module Sem_060207_arrays_014 { + + type component GeneralComp { + } + + + type integer MyArrayType1[2][3] (1 .. 10); + + +testcase TC_Sem_060207_arrays_014() runs on GeneralComp { + + var MyArrayType1 v_array1; + v_array1[0][0] := 8; + v_array1[0][1] := 10; + v_array1[0][2] := 9; + v_array1[1][0] := 2; + v_array1[1][1] := 3; + //v_array1[1][2] := -; // NOT ALLOWED!!! + + if (match(v_array1[0][0], 8) and match(v_array1[1][0], 2) and not isbound(v_array1[1][2]) + and match(lengthof (v_array1), 2) and match(lengthof (v_array1[0]), 3)) + { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_060207_arrays_014()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_015.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_015.ttcn new file mode 100644 index 0000000..8a3a36e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_015.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, constant expression in array dimension + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module Sem_060207_arrays_015 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_015() runs on GeneralComp { + var integer v_arr[9 - 3 * 2] := { 0, 1, 2 }; + setverdict(pass); + } + + control { + execute(TC_Sem_060207_arrays_015()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_016.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_016.ttcn new file mode 100644 index 0000000..229c78c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_016.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, predefined function in array dimension + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Array dimensions shall be specified using constant expressions, which shall +// evaluate to a positive integer values. Constants used in the constant +// expressions shall meet with the restrictions in clause 10. + +module Sem_060207_arrays_016 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_016() runs on GeneralComp { + var integer v_arr[float2int(3.14159265359)] := { 0, 1, 2}; + log(v_arr); + setverdict(pass); + } + + control { + execute(TC_Sem_060207_arrays_016()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_017.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_017.ttcn new file mode 100644 index 0000000..84df27b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_017.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, integer array as multidimensional array index + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An array or record of integer restricted to a single size can be used in the +// index notation as a short-hand for the repeated index notation. + +module Sem_060207_arrays_017 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_017() runs on GeneralComp { + var integer v_rhindexes[2] := { 0, 1 }, v_lhindexes[2] := { 1, 2 } + var integer v_arr[2][3] := { { 1, 2, 3 }, { 4, 5, 6 } }; + // testing both RH and LH side: + v_arr[v_lhindexes] := v_arr[v_rhindexes]; + if (v_arr == { { 1, 2, 3 }, { 4, 5, 2} }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_017()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_018.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_018.ttcn new file mode 100644 index 0000000..05c5c3a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_018.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, fixed-size record of integer as multidimensional array index + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An array or record of integer restricted to a single size can be used in the +// index notation as a short-hand for the repeated index notation. + +module Sem_060207_arrays_018 { + + type component GeneralComp { + } + + type record length(2) of integer RI; + + testcase TC_Sem_060207_arrays_018() runs on GeneralComp { + var RI v_rhindexes := { 0, 1 }, v_lhindexes := { 1, 2 } + var integer v_arr[2][3] := { { 1, 2, 3 }, { 4, 5, 6 } }; + // testing both RH and LH side: + v_arr[v_lhindexes] := v_arr[v_rhindexes]; + if (v_arr == { { 1, 2, 3 }, { 4, 5, 2} }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_018()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_019.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_019.ttcn new file mode 100644 index 0000000..15b3c56 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_019.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, integer array as multidimensional array index (less items than dimension count) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An array or record of integer restricted to a single size can be used in the +// index notation as a short-hand for the repeated index notation. + +module Sem_060207_arrays_019 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_019() runs on GeneralComp { + var integer v_rhindexes[2] := { 0, 1 }, v_lhindexes[2] := { 1, 0 } + var integer v_arr[2][2][3] := { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; + // testing both RH and LH side: + v_arr[v_lhindexes] := v_arr[v_rhindexes]; + if (v_arr == { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 4, 5, 6 }, { 10, 11, 12 } } }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_019()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_020.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_020.ttcn new file mode 100644 index 0000000..025c070 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_020.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using custom array index on the right hand side of assignments + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module Sem_060207_arrays_020 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_020() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + if (v_arr[2] == 2) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_020()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_021.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_021.ttcn new file mode 100644 index 0000000..f8d5231 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_021.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using custom array index on the left hand side of assignments + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Indexed value notation can be used on both the right-hand side and left-hand +// side of assignments. The index of the first element shall be zero or the lower +// bound if an index range has been given. + +module Sem_060207_arrays_021 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_021() runs on GeneralComp { + var integer v_arr[2..5] := { 2, 3, 4, 5 }; + v_arr[2] := 200; + if (v_arr == { 200, 3, 4, 5 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_021()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_022.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_022.ttcn new file mode 100644 index 0000000..6b75d87 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_022.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using less indexes than array dimensions on the right hand side of assignments + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The use of array slices of multi-dimensional arrays, i.e. when the number of +// indexes of the array value is less than the number of dimensions in the +// corresponding array definition, is allowed. Indexes of array slices shall +// correspond to the dimensions of the array definition from left to right (i.e. +// the first index of the slice corresponds to the first dimension of the definition). +// Slice indexes shall conform to the related array definition dimensions. + +module Sem_060207_arrays_022 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_022() runs on GeneralComp { + var integer v_arr[2][2][3] := { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; + if (v_arr[0][1] == { 4, 5, 6 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_022()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_023.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_023.ttcn new file mode 100644 index 0000000..f85a44c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Sem_060207_arrays_023.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, using less indexes than array dimensions on the left hand side of assignments + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The use of array slices of multi-dimensional arrays, i.e. when the number of +// indexes of the array value is less than the number of dimensions in the +// corresponding array definition, is allowed. Indexes of array slices shall +// correspond to the dimensions of the array definition from left to right (i.e. +// the first index of the slice corresponds to the first dimension of the definition). +// Slice indexes shall conform to the related array definition dimensions. + +module Sem_060207_arrays_023 { + + type component GeneralComp { + } + + testcase TC_Sem_060207_arrays_023() runs on GeneralComp { + var integer v_arr[2][2][3] := { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; + v_arr[0][1] := { 400, 500, 600 }; + if (v_arr == { { { 1, 2, 3 }, { 400, 500, 600 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_060207_arrays_023()); + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_001.ttcn new file mode 100644 index 0000000..ba69174 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, array specified in variable declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// They [arrays] may be specified also at the point of a variable declaration. + +module Syn_060207_arrays_001 { + + const integer c_arr[2] := {0, 1}; + modulepar integer PX_ARR[3]; + + control { + var integer v_arr[5], v_noarr, v_arr2[2]; + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_002.ttcn new file mode 100644 index 0000000..d4c046a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_002.ttcn @@ -0,0 +1,15 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, multidimensional array type declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Arrays may be declared as single or multi-dimensional. + +module Syn_060207_arrays_002 { + + type integer MultiArray[3][4][2][5]; + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_003.ttcn new file mode 100644 index 0000000..80b0647 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_003.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, multidimensional array specified in variable declaration + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Arrays may be declared as single or multi-dimensional. + +module Syn_060207_arrays_003 { + + const integer c_arr[2][3] := { { 0, 1, 2}, {3, 4, 5 }}; + modulepar integer PX_ARR[3][2][6]; + + control { + var integer v_arr[5][3], v_noarr, v_arr2[2][2][10]; + } + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_004.ttcn new file mode 100644 index 0000000..f24091c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_004.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, array type dimension specified as a range + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Array dimensions may also be specified using ranges (with inclusive +// boundaries only). In such cases, the lower and upper values of the range +// define the lower and upper index values. Such an array is corresponding to +// a record of with a fixed length restriction computed as the difference +// between upper and lower index bound plus 1 and indexing starting from the +// lower bound of the array definition. + +module Syn_060207_arrays_004 { + + type integer Arr[1..5]; + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_005.ttcn new file mode 100644 index 0000000..2d0a7e1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_005.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, multiple array type dimensions specified as a range + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Array dimensions may also be specified using ranges (with inclusive +// boundaries only). In such cases, the lower and upper values of the range +// define the lower and upper index values. Such an array is corresponding to +// a record of with a fixed length restriction computed as the difference +// between upper and lower index bound plus 1 and indexing starting from the +// lower bound of the array definition. + +module Syn_060207_arrays_005 { + + type integer Arr[1..3][5][6 - 4 .. 2 * 3]; + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_006.ttcn new file mode 100644 index 0000000..400fc0f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_006.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, array variable dimension specified as a range + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Array dimensions may also be specified using ranges (with inclusive +// boundaries only). In such cases, the lower and upper values of the range +// define the lower and upper index values. Such an array is corresponding to +// a record of with a fixed length restriction computed as the difference +// between upper and lower index bound plus 1 and indexing starting from the +// lower bound of the array definition. + +module Syn_060207_arrays_006 { + + control { + var integer v_arr[1..3]; + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_007.ttcn new file mode 100644 index 0000000..26d5ebc --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060207_arrays/Syn_060207_arrays_007.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.7, multiple array variable dimensions specified as a range + ** @verdict pass accept, noexecution + ***************************************************/ + +// The following requirement is tested: +// Array dimensions may also be specified using ranges (with inclusive +// boundaries only). In such cases, the lower and upper values of the range +// define the lower and upper index values. Such an array is corresponding to +// a record of with a fixed length restriction computed as the difference +// between upper and lower index bound plus 1 and indexing starting from the +// lower bound of the array definition. + +module Syn_060207_arrays_007 { + + control { + var integer v_arr[1..3][2][6 - 4 .. 2 * 3]; + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/NOTES b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/NOTES new file mode 100644 index 0000000..46d582a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/NOTES @@ -0,0 +1,25 @@ +There are no tests for the following rules: + +1. +Default references are used in deactivate operations (see clause 20.5.3) in order to +identify the default to be deactivated. + +Reason: No reason for a dedicated test, tested in 20.5.3. + +2. +Default references have meaning only within the test component instances they are +activated, i.e. a default reference assigned to a default variable in test component +instance "a1" of type "A" has no meaning in test component instance "a2" of type "A". + +Reason: No meaningful test for the rule. The most common way to use defaults is +deactivate operation specified in 20.5.3 which contains a dedicated test related +to this requirement. + +3. +The actual data representation of the default type shall be resolved externally by the +test system. This allows abstract test cases to be specified independently of any real +TTCN-3 runtime environment, in other words TTCN-3 does not restrict the implementation +of a test system with respect to the handling and identification of defaults. + +Reason: This rule is only declaratory and doesn't set any binding requirements which +could be verified. diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_001.ttcn new file mode 100644 index 0000000..94e50ed --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.8, verify than a reference to an activated default can be assigned to a default variable + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Default references are unique references to activated defaults. Such a unique +// default reference is generated by a test component when an altstep is activated +// as a default, i.e. a default reference is the result of an activate operation. + +module Sem_060208_default_type_001 { + + type component GeneralComp { + } + + altstep a() runs on GeneralComp + { + [] any port.receive {} + } + + testcase TC_Sem_060208_default_type_001() runs on GeneralComp { + var default v_default := activate(a()); + if (v_default != null) { setverdict(pass) } + else { setverdict(fail) } + } + + control{ + execute(TC_Sem_060208_default_type_001()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_002.ttcn new file mode 100644 index 0000000..28e83ba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_002.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.8, verify than null value can be assigned to a default variable + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The special value null represents an unspecific default reference, e.g. can be +// used for the initialization of variables of default type. + +module Sem_060208_default_type_002 { + + type component GeneralComp { + } + + testcase TC_Sem_060208_default_type_002() runs on GeneralComp { + var default v_default := null; + if (isbound(v_default)) { setverdict(pass) } + else { setverdict(fail) } + } + + control{ + execute(TC_Sem_060208_default_type_002()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_003.ttcn new file mode 100644 index 0000000..4dde6b8 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060208_default_type/Sem_060208_default_type_003.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.8, verify than existing default references can be assigned + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Default references have the special and predefined type default. +// + general type compatibility rules + +module Sem_060208_default_type_003 { + + type component GeneralComp { + } + + altstep a() runs on GeneralComp + { + [] any port.receive {} + } + + testcase TC_Sem_060208_default_type_001() runs on GeneralComp { + var default v_default := activate(a()), v_default2; + v_default2 := v_default; + if (v_default == v_default2) { setverdict(pass) } + else { setverdict(fail) } + } + + control{ + execute(TC_Sem_060208_default_type_001()); + } +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NOTES b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NOTES new file mode 100644 index 0000000..39ea0e6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NOTES @@ -0,0 +1,5 @@ +- NOTE: rules involving message based communications are tested as part of section 22.2 +- NOTE: rules involving procedure based communications are tested as part of section 22.3 +- NOTE: rules for using addresses are tested as a part of the section 6.2.12 +- NOTE: rules for using map parameters are tested as a part of the section 21.1.1 +- NOTE: rules for using unmap parameters are tested as a part of the section 21.1.1 \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_001.ttcn new file mode 100644 index 0000000..3d8c575 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that restriction of port definitions are appropriately handles + ** @verdict pass reject + *****************************************************************/ + +module NegSem_060209_CommunicationPortTypes_001 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne message { + address MyType1; + address MyType2; //more than one address type + inout integer; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_001() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_001()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_002.ttcn new file mode 100644 index 0000000..d099e72 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_002.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that restriction of port definitions are appropriately handles + ** @verdict pass reject + *****************************************************************/ + +module NegSem_060209_CommunicationPortTypes_002 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne message { + address MyType1; + inout integer; + map param (in integer p1, inout MyType2 p2); + map param (in integer p1, out MyType2 p2); //more than one map parameter type + unmap param (in MyType3 p1, out integer p2); + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_002() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_002()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_003.ttcn new file mode 100644 index 0000000..4d5e69a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_003.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that restriction of port definitions are appropriately handles + ** @verdict pass reject + *****************************************************************/ + +module NegSem_060209_CommunicationPortTypes_003 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne message { + address MyType1; + inout integer; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + unmap param (in MyType3 p1, inout integer p2); //more than one map parameter type + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_003() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_003()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_004.ttcn new file mode 100644 index 0000000..0c260f3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_004.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that an error is generated when a message port type definition contains no message types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Each port type definition shall have one or more lists indicating the allowed collection of +// (message) types ... with the allowed communication direction. + +module NegSem_060209_CommunicationPortTypes_004 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne message { + address MyType1; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_005.ttcn new file mode 100644 index 0000000..6f72f79 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_005.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that an error is generated when a procedure port type definition contains no signatures + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Each port type definition shall have one or more lists indicating the allowed collection of +// ... procedure signatures with the allowed communication direction. + +module NegSem_060209_CommunicationPortTypes_005 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne procedure { + address MyType1; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_006.ttcn new file mode 100644 index 0000000..d1ceffd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_006.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that an error is generated when a signature port definition contains multiple address clauses + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction a: +// At most one address type should be bound to a port type. + +module NegSem_060209_CommunicationPortTypes_006 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + signature S() return integer; + + type port MyMessagePortTypeOne procedure { + address MyType1; + address MyType2; //more than one address type + in S; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_006() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_006()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_007.ttcn new file mode 100644 index 0000000..c122992 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_007.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that an error is generated when a signature port definition contains multiple map clauses + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction b: +// At most one map parameter list should be defined for a port type. + +module NegSem_060209_CommunicationPortTypes_007 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + signature S() return integer; + + type port MyMessagePortTypeOne procedure { + address MyType1; + in S; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + map param (in integer p1, inout MyType2 p2); // more than 1 map clause + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_007() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_007()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_008.ttcn new file mode 100644 index 0000000..06b08b0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/NegSem_060209_CommunicationPortTypes_008.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that an error is generated when a signature port definition contains multiple unmap clauses + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// At most one unmap parameter list should be defined for a port type. + +module NegSem_060209_CommunicationPortTypes_008 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + signature S() return integer; + + type port MyMessagePortTypeOne procedure { + unmap param (in MyType3 p1, out integer p2); + address MyType1; + in S; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); // more than 1 unmap clause + } + + type component GeneralComp { + port MyMessagePortTypeOne pt_myPort; + } + + testcase TC_NegSem_060209_CommunicationPortTypes_008() runs on GeneralComp system GeneralComp { + setverdict(fail); + } + + control{ + execute(TC_NegSem_060209_CommunicationPortTypes_008()); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_004.ttcn new file mode 100644 index 0000000..6c5738c --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_004.ttcn @@ -0,0 +1,74 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that map and unmap param and local port address are allowed in a testcase block + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_060209_CommunicationPortTypes_004 { + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType1 { + integer field1, + charstring field2, + boolean field3 + } + + type record MyMessageType2 { + integer g1, + charstring g2 + } + + type record MyMessageType3 { + boolean h1, + MyMessageType3 h2 optional + } + + type port MyMessagePortType message { + address MyMessageType1; + inout all; + map param (in integer p1, inout charstring p2); + unmap param (in MyMessageType3 p1, inout MyMessageType2 p2); + } + + const MyMessageType1 c_myTemplate1 := { + field1 := 2, + field2 := "foobar", + field3 := true + } + + const MyMessageType2 c_myTemplate2 := { + g1 := 2, + g2 := "foo" + } + + const MyMessageType3 c_myTemplate3 := { + h1 := false, + h2 := { + h1:= true, + h2 := omit + } + } + + testcase TC_Sem_060209_CommunicationPortTypes_004() runs on GeneralComp system GeneralComp { + var charstring v_varString := "foobar"; + var MyMessageType2 v_myTemplate2 := c_myTemplate2; + + map(mtc:pt_myPort, system:pt_myPort) param(5, v_varString); + + pt_myPort.send(13) to c_myTemplate1; + log("Map inout parameter", v_varString); + + unmap(mtc:pt_myPort, system:pt_myPort) param(c_myTemplate3, v_myTemplate2); + log("Unmap inout parameter", v_myTemplate2); + + setverdict(pass); + } + + control{ + execute(TC_Sem_060209_CommunicationPortTypes_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_005.ttcn new file mode 100755 index 0000000..77ae810 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Sem_060209_CommunicationPortTypes_005.ttcn @@ -0,0 +1,241 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:6.2.9, Ensure that parameter MessageType of the port shall be data type + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* The following requirements are tested: + * 6.2.9 Communication port types - Restriction e. MessageType shall be a data type as defined in clause 3.1. + */ + +module Sem_060209_CommunicationPortTypes_005 { + + type component GeneralComp { + port loopbackPort pt_myPort; + } + + type record MyRec{float field1}; + type set MySet{}; + type record of integer MyRoI; + type set of integer MySoI; + type enumerated MyEnumType {a,b,c}; + type union MyUnionType + { + integer number, + charstring string + }; + + type port loopbackPort message { + //allowed MessageTypes given in clause 3.1: + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout octetstring; + inout hexstring; + inout charstring; + inout universal charstring; + inout anytype; + inout MyRec; + inout MyRoI; + inout MySet; + inout MySoI; + inout MyEnumType; + inout MyUnionType; + } + + + testcase TC_Sem_060209_CommunicationPortTypes_005() runs on GeneralComp { + + var anytype v_a; + var integer j := 100; + var boolean v_2 := true; + var verdicttype v_3 := pass; + var universal charstring v_4 := "\q{0,0,1,113}"; + var MyRec MyR :={field1 := 1.0}; + var MySet MyS :={}; + var MyRoI RoI := {1,2,3}; + var MySoI SoI := {1,2,3}; + var MyEnumType enu :=a; + var MyUnionType uni :={number:=1}; + v_a.integer :=1; + +//send integer via port + pt_myPort.send(j); + alt { + [] pt_myPort.receive(j) { + setverdict(pass,"Send success, received:", j); + } + [] pt_myPort.receive { + setverdict(fail,"integer sent failed",j); + } + } +//send float via port + pt_myPort.send(int2float(j)); + alt { + [] pt_myPort.receive(int2float(j)) { + setverdict(pass,"Send success,received:", int2float(j)); + } + [] pt_myPort.receive { + setverdict(fail,"float sent failed", int2float(j)); + } + } +//send character via port + pt_myPort.send(int2char(j)); + alt { + [] pt_myPort.receive(int2char(j)) { + setverdict(pass,"Send success,received:", int2char(j)); + } + [] pt_myPort.receive { + setverdict(fail,"character sent failed", int2char(j)); + } + } + //send bitstring via port + pt_myPort.send(int2bit(j,8)); + alt { + [] pt_myPort.receive(int2bit(j,8)) { + setverdict(pass,"Send success,received:", int2bit(j,8)); + } + [] pt_myPort.receive { + setverdict(fail,"bitstring sent failed", int2bit(j,8)); + } + } +//send octetstring via port + pt_myPort.send(int2oct(j,4)); + alt { + [] pt_myPort.receive(int2oct(j,4)) { + setverdict(pass,"Send success,received:", int2oct(j,4)); + } + [] pt_myPort.receive { + setverdict(fail,"octetstring sent failed", int2oct(j,4)); + } + } +//send hexstring via port + pt_myPort.send(int2hex(j,4)); + alt { + [] pt_myPort.receive(int2hex(j,4)) { + setverdict(pass,"Send success,received:",int2hex(j,4)); + } + [] pt_myPort.receive { + setverdict(fail,"octetstring sent failed",int2hex(j,4)); + } + } +//send charstring via port + pt_myPort.send(int2str(j)); + alt { + [] pt_myPort.receive(int2str(j)) { + setverdict(pass,"Send success,received:",int2str(j)); + } + [] pt_myPort.receive { + setverdict(fail,"charstring sent failed",int2str(j)); + } + } +//send boolean via port + pt_myPort.send(v_2); + alt { + [] pt_myPort.receive(v_2) { + setverdict(pass,"Send success,received:",v_2); + } + [] pt_myPort.receive { + setverdict(fail,"charstring sent failed", v_2); + } + } +//send verdicttype via port + pt_myPort.send(v_3); + alt { + [] pt_myPort.receive(v_3) { + setverdict(pass,"Send success,received:",v_3); + } + [] pt_myPort.receive { + setverdict(fail,"verdict type sent failed", v_3); + } + } +//send universal charstring via port + pt_myPort.send(v_4); + alt { + [] pt_myPort.receive(v_4) { + setverdict(pass,"Send success,received:",v_4); + } + [] pt_myPort.receive { + setverdict(fail,"universal charstring sent failed", v_4); + } + } +//send anytype via port + pt_myPort.send(v_a.integer); + alt { + [] pt_myPort.receive(v_a.integer) { + setverdict(pass,"Send success,received:",v_a.integer); + } + [] pt_myPort.receive { + setverdict(fail,"anytype sent failed", v_a.integer); + } + } +//send record via port + pt_myPort.send(MyR); + alt { + [] pt_myPort.receive(MyR) { + setverdict(pass,"Send success,received:",MyR); + } + [] pt_myPort.receive { + setverdict(fail,"Record sent failed", MyR); + } + } +//send set via port + pt_myPort.send(MyS); + alt { + [] pt_myPort.receive(MyS) { + setverdict(pass,"Send success,received:",MyS); + } + [] pt_myPort.receive { + setverdict(fail,"Set sent failed", MyS); + } + } +//send record of integers via port + pt_myPort.send(RoI); + alt { + [] pt_myPort.receive(RoI) { + setverdict(pass,"Send success,received:",RoI); + } + [] pt_myPort.receive { + setverdict(fail,"Record of integers sent failed", RoI); + } + } +//send set of integers via port + pt_myPort.send(SoI); + alt { + [] pt_myPort.receive(SoI) { + setverdict(pass,"Send success,received:",SoI); + } + [] pt_myPort.receive { + setverdict(fail,"Record of integers sent failed", SoI); + } + } +//send enum via port + pt_myPort.send(enu); + alt { + [] pt_myPort.receive(enu) { + setverdict(pass,"Send success,received:",enu); + } + [] pt_myPort.receive { + setverdict(fail,"Enum sent failed", enu); + } + } +//send union via port + pt_myPort.send(uni); + alt { + [] pt_myPort.receive(uni) { + setverdict(pass,"Send success,received:",uni); + } + [] pt_myPort.receive { + setverdict(fail,"Union sent failed", uni); + } + } + + } + + control{ + execute(TC_Sem_060209_CommunicationPortTypes_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_001.ttcn new file mode 100644 index 0000000..ee91bf7 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_001.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that message-based ports are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_001 { + + type record MsgType1 { + integer f1, + octetstring f2 + } + + type boolean MsgType2; + + type charstring MsgType3; + + // Message-based port which allows types MsgType1 and MsgType2 to be received at, MsgType3 to be + // sent via and any integer value to be send and received over the port + type port MyMessagePortTypeOne message { + in MsgType1, MsgType2; + out MsgType3; + inout integer + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_002.ttcn new file mode 100644 index 0000000..0a5b36f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_002.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that message-based ports with address are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_002 { + + type port MyMessagePortTypeTwo message { + // if addressing is used on ports of type MyMessagePortTypeTwo + // the addresses have to be of type integer + address integer; + inout integer; + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_003.ttcn new file mode 100644 index 0000000..e7b9269 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_003.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Verify that it is possible to define procedute-based port types + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_003 { + + signature S1(); + signature S2(in integer p_par1); + signature S3(in charstring p_par1); + signature S4(in integer p_par1) return bitstring; + signature S5(in charstring p_par1, out charstring p_par2) return boolean; + + // Procedure-based port which allows to accept calls to procedures S1, S2 and S4, call + // procedure S3. S5 calls can be both accepted or dispatched. + type port MyMessagePortTypeOne procedure { + in S1, S2; + out S3; + in S4; + inout S5; + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_004.ttcn new file mode 100644 index 0000000..4673703 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_004.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that procedure-based ports with address are accepted + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_004 { + + signature S1(); + + type port MyMessagePortType procedure { + inout S1; + // if addressing is used on ports of type MyMessagePortType + // the addresses have to be of type integer + address integer; + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_005.ttcn new file mode 100644 index 0000000..fa0fb3d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_005.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that map param is accepted by the port definition. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_005 { + + type record MyType { + integer f1 + } + + type port MyMessagePortTypeOne message { + inout integer; + map param (in MyType p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_006.ttcn new file mode 100644 index 0000000..3b8d0f1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_006.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that unmap param is accepted by the port definition. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_006 { + + type record MyType { + integer f1 + } + + type port MyMessagePortTypeOne message { + inout integer; + unmap param (in MyType p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_007.ttcn new file mode 100644 index 0000000..3fb4347 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_007.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that complex port definition are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_007 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + type port MyMessagePortTypeOne message { + address MyType1; + inout integer, charstring; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_008.ttcn new file mode 100644 index 0000000..e6dc268 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_008.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that procedure-base port type definition can contain map parameter definition + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_008 { + + signature S1(); + + type record MyType { + integer f1 + } + + type port MyMessagePortTypeOne procedure { + inout S1; + map param (in MyType p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_009.ttcn new file mode 100644 index 0000000..843b0f1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_009.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that procedure-base port type definition can contain unmap parameter definition + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_009 { + + signature S1(); + + type record MyType { + integer f1 + } + + type port MyMessagePortTypeOne procedure { + inout S1; + unmap param (in MyType p1, out integer p2); + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_010.ttcn new file mode 100644 index 0000000..4d876f4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060209_comm_port_types/Syn_060209_CommunicationPortTypes_010.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2.9, Ensure that complex procedure-based port type definition are accepted + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_060209_CommunicationPortTypes_010 { + + type record MyType1 { + integer f1, + charstring f2 + } + + type record MyType2 { + integer g1, + charstring g2 + } + + type record MyType3 { + boolean h1, + MyType3 h2 optional + } + + signature S1(); + signature S2(in integer p_par1); + signature S3(in charstring p_par1); + + type port MyMessagePortTypeOne procedure { + inout S1, S2, S3; + map param (in integer p1, inout MyType2 p2); + unmap param (in MyType3 p1, out integer p2); + address MyType1; + } + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_001.ttcn new file mode 100755 index 0000000..1f4339b --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_001.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.10, Ensure that cyclic extension is not allowed + ** @verdict pass reject, noexecution + *****************************************************************/ + +/* The following requirements are tested: + * Restriction c.: It is allowed to extend component types that are defined by means of extension, + * as long as no cyclic chain of definition is created. + */ + +module NegSyn_060210_ReuseofComponentTypes_001 { + + type port loopbackPort message { + inout integer; + inout float; + } + + type component MyCompA extends GeneralComp { + port loopbackPort pt_myPortA; + } + + + type component MyCompB extends MyCompA { + var integer MyInt; + } + + + type component GeneralComp extends MyCompB { //error: cyclic extension + port loopbackPort pt_myPortB; + } + + testcase TC_NegSyn_060210_ReuseofComponentTypes_001() runs on GeneralComp { + + pt_myPortB.send(2); + } + + control{ + execute(TC_NegSyn_060210_ReuseofComponentTypes_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_002.ttcn new file mode 100755 index 0000000..272e83a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_002.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.10, Ensure that extending a component that occurs name clash is not allowed + ** @verdict pass reject, noexecution + *****************************************************************/ + +/* The following requirements are tested: + * Restriction b.: When defining component types by extending more than one parent type, + * there shall be no name clash between the definitions of the different parent types + */ + +module NegSyn_060210_ReuseofComponentTypes_002 { + + type port loopbackPort message { + inout integer; + inout float; + } + + type component MyCompA { + port loopbackPort pt_myPortA; + } + + + type component MyCompB { + var integer MyInt; + } + + + type component GeneralComp extends MyCompA, MyCompB { + port loopbackPort pt_myPortB; + var integer MyInt; //error: name clash + } + + testcase TC_NegSyn_060210_ReuseofComponentTypes_002() runs on GeneralComp { + + pt_myPortA.send(2); + pt_myPortB.send(2.0); + } + + control{ + execute(TC_NegSyn_060210_ReuseofComponentTypes_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_003.ttcn new file mode 100755 index 0000000..204f00f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/NegSyn_060210_ReuseofComponentTypes_003.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.10, Ensure that extending a component that occurs name clash is not allowed + ** @verdict pass reject, noexecution + *****************************************************************/ + +/* The following requirements are tested: + * When defining component types by extension, there shall be + * no name clash between the definitions being taken from the parent type + * and the definitions being added in the extended type + */ + +module NegSyn_060210_ReuseofComponentTypes_003 { + + type port loopbackPort message { + inout integer; + inout float; + } + + type component MyCompA { + port loopbackPort pt_myPortA; + var integer MyInt; + } + + + type component GeneralComp extends MyCompA { + port loopbackPort pt_myPortB; + var integer MyInt; //error: name clash from parent type + } + + testcase TC_NegSyn_060210_ReuseofComponentTypes_003() runs on GeneralComp { + + pt_myPortA.send(2); + pt_myPortB.send(2.0); + } + + control{ + execute(TC_NegSyn_060210_ReuseofComponentTypes_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_001.ttcn new file mode 100755 index 0000000..7e9e1c0 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_001.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.10, Ensure that extending a component with another component works properly + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* The following requirements are tested: + * It is allowed to have one component type extending several parent types in one definition, + * which have to be specified as a comma-separated list of types in the definition. + * Any of the parent types may also be defined by means of extension. + */ + +module Sem_060210_ReuseofComponentTypes_001 { + + //MyComp has a port + type component MyComp { + port loopbackPort pt_myPort; + } + +//Component GeneralComp has a timer and a port extended from MyComp + type component GeneralComp extends MyComp { + timer t; + } + + type port loopbackPort message { + inout integer; + } + + + testcase TC_Sem_060210_ReuseofComponentTypes_001() runs on GeneralComp { + + //Send an integer: + pt_myPort.send(2); + + alt { + [] pt_myPort.receive(2) { + setverdict(pass, "Receive successful"); + } + [] pt_myPort.receive { + setverdict(fail, "Unexpected result"); + } + } + + } + + control{ + execute(TC_Sem_060210_ReuseofComponentTypes_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_002.ttcn new file mode 100755 index 0000000..f669919 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_002.ttcn @@ -0,0 +1,86 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:6.2.10, Ensure that extending a component with several other component works properly + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* The following requirements are tested: + * When defining component types by extending more than one parent type, + * there shall be no name clash between the definitions of the different parent types, + * i.e. there shall not be a port, variable, constant or timer identifier that is declared + * in any two of the parent types (directly or by means of extension). + */ + +module Sem_060210_ReuseofComponentTypes_002 { + + //MyCompA has a port pt_myPortA + type component MyCompA { + port loopbackPort pt_myPortA; + } + + //MyComp has a port pt_myPortB + type component MyCompB { + port loopbackPort pt_myPortB; + } + +//Component GeneralComp has a timer and inherit two ports from MyCompA and MyCompB + type component GeneralComp extends MyCompA, MyCompB { + timer t; + } + + type port loopbackPort message { + inout integer; + inout float; + } + + function loopback() runs on GeneralComp system GeneralComp { + var integer v_i; + var float v_f; + while (true) { + alt { + [] pt_myPortA.receive(integer:?) -> value v_i { pt_myPortA.send(v_i); } + [] pt_myPortA.receive(float:?) -> value v_f { pt_myPortA.send(v_f); } + [] pt_myPortB.receive(integer:?) -> value v_i { pt_myPortB.send(v_i); } + [] pt_myPortB.receive(float:?) -> value v_f { pt_myPortB.send(v_f); } + } + } + } + + testcase TC_Sem_060210_ReuseofComponentTypes_002() runs on GeneralComp system GeneralComp { + + var GeneralComp v_server := GeneralComp.create; + + connect(mtc:pt_myPortA, v_server:pt_myPortA); + connect(mtc:pt_myPortB, v_server:pt_myPortB); + + v_server.start(loopback()); + + //Send an integer from pt_myPortA: + pt_myPortA.send(2); + alt { + [] pt_myPortA.receive(2) { + setverdict(pass,"Receive successful"); + } + [] pt_myPortA.receive { + setverdict(fail,"Unexpected result"); + } + } + + //Send an integer from pt_myPortB: + pt_myPortB.send(1.0); + alt { + [] pt_myPortB.receive(1.0) { + setverdict(pass,"Receive successful"); + } + [] pt_myPortB.receive { + setverdict(fail,"Unexpected result"); + } + } + + } + + control{ + execute(TC_Sem_060210_ReuseofComponentTypes_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_003.ttcn new file mode 100755 index 0000000..c49030a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060210_component_types/06021002_reuse_component_type/Sem_060210_ReuseofComponentTypes_003.ttcn @@ -0,0 +1,90 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.10, Ensure that extending a component with and extended component works properly + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* The following requirements are tested: + * It is allowed to have one component type extending several parent types in one definition, + * which have to be specified as a comma-separated list of types in the definition. + * Any of the parent types may also be defined by means of extension. + */ + +module Sem_060210_ReuseofComponentTypes_003 { + + //MyCompA has a port pt_myPortA + type component MyCompA { + port loopbackPort pt_myPortA; + var integer MyInt; + } + + //MyComp has a port pt_myPortB and inherit a port (pt_myPortA) form MyCompA + type component MyCompB extends MyCompA { + port loopbackPort pt_myPortB; + } + +//Component GeneralComp has a timer and inherit two ports from MyCompB (pt_myPortA and pt_myPortB) + type component GeneralComp extends MyCompB { + timer t; + } + + type port loopbackPort message { + inout integer; + inout float; + } + + + function loopback() runs on GeneralComp { + var integer v_i; + var float v_f; + while (true) { + alt { + [] pt_myPortA.receive(integer:?) -> value v_i { pt_myPortA.send(v_i); } + [] pt_myPortA.receive(float:?) -> value v_f { pt_myPortA.send(v_f); } + [] pt_myPortB.receive(integer:?) -> value v_i { pt_myPortB.send(v_i); } + [] pt_myPortB.receive(float:?) -> value v_f { pt_myPortB.send(v_f); } + } + } + } + + testcase TC_Sem_060210_ReuseofComponentTypes_003() runs on GeneralComp system GeneralComp { + + var GeneralComp v_server := GeneralComp.create; + + connect(mtc:pt_myPortA, v_server:pt_myPortA); + connect(mtc:pt_myPortB, v_server:pt_myPortB); + + v_server.start(loopback()); + + //Set a value to MyInt: + MyInt := 10; + + //Send an integer from pt_myPortA: + pt_myPortA.send(2); + alt { + [] pt_myPortA.receive(2) { + setverdict(pass,"Receive successful"); + } + [] pt_myPortA.receive { + setverdict(fail,"Unexpected result"); + } + } + + //Send an integer from pt_myPortB: + pt_myPortB.send(1.0); + alt { + [] pt_myPortB.receive(1.0) { + setverdict(pass,"Receive successful"); + } + [] pt_myPortB.receive { + setverdict(fail,"Unexpected result"); + } + } + + } + + control{ + execute(TC_Sem_060210_ReuseofComponentTypes_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_001.ttcn new file mode 100644 index 0000000..344d01a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure right type checking for address types in ports + ** @verdict pass reject + ***************************************************/ +module NegSem_060212_AddressingEntitiesInsideSut_001 { + type integer address; + + type port PortType1 message { + address charstring; + inout all; + } + + type port PortType2 message { + inout all; + } + + type component TestCaseComp { + port PortType1 p1; + } + + testcase TC_NegSem_060212_AddressingEntitiesInsideSut_001() runs on TestCaseComp system TestCaseComp { + + var address v_int := 1; + var PortType1.address v_char := "test"; + + // port 1 has charstring address, should not be accepted + p1.send(5) to v_int; + + setverdict(fail); + } + + control { + execute(TC_NegSem_060212_AddressingEntitiesInsideSut_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_002.ttcn new file mode 100755 index 0000000..8a18954 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_002.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure that address type cannot be used in a from part of receive operation with connected ports + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: + * Restrictions c) The address data type shall not be used in the to, + * from and sender parts of receive and send operations of connected ports, + * i.e, ports used for the communication among test components.*/ + + +module NegSem_060212_AddressingEntitiesInsideSut_002 { + + type integer MyAddress; + type integer MyMessType; + + type port PortType message { + address MyAddress; + inout MyMessType; + } + + type component TestCaseComp { + port PortType p; + } + + function Sendmessage() runs on TestCaseComp + { + if(p.checkstate("Connected")) { + p.send(MyMessType: 1) to mtc; + } else { + setverdict(fail); + } + } + + + + testcase TC_NegSem_060212_AddressingEntitiesInsideSut_002() runs on TestCaseComp system TestCaseComp { + + var TestCaseComp v_ptcA := TestCaseComp.create alive; + + connect(mtc:p, v_ptcA:p); + + v_ptcA.start(Sendmessage()); + + + p.receive(MyMessType:1) from PortType.address:?; //error: address type is allowed in from part receive operation + + setverdict(pass); + } + + control { + execute(TC_NegSem_060212_AddressingEntitiesInsideSut_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_003.ttcn new file mode 100755 index 0000000..06873ba --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_003.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure that address type cannot be used in a sender part of receive operation with connected ports + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: + * Restrictions c) The address data type shall not be used in the to, + * from and sender parts of receive and send operations of connected ports, + * i.e, ports used for the communication among test components.*/ + + +module NegSem_060212_AddressingEntitiesInsideSut_003 { + + type integer MyAddress; + type integer MyMessType; + type integer address; + + + type port PortType message { + address MyAddress; + inout MyMessType; + } + + type component TestCaseComp { + port PortType p; + } + + function Sendmessage() runs on TestCaseComp + { + if(p.checkstate("Connected")) { + p.send(MyMessType: 1) to mtc; + } else { + setverdict(fail,"Not connected"); + } + } + + + + testcase TC_NegSem_060212_AddressingEntitiesInsideSut_003() runs on TestCaseComp system TestCaseComp { + + var TestCaseComp v_ptcA := TestCaseComp.create alive; + + var address MyAddr := 1; + + connect(mtc:p, v_ptcA:p); + + v_ptcA.start(Sendmessage()); + + + p.receive(MyMessType:1) -> sender MyAddr; //error: address type is allowed in sender part receive operation + + setverdict(pass); + } + + control { + execute(TC_NegSem_060212_AddressingEntitiesInsideSut_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_004.ttcn new file mode 100755 index 0000000..730c624 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/NegSem_060212_AddressingEntitiesInsideSut_004.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure that address type cannot be used in a to part of sender operation with connected ports + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: + * Restrictions c) The address data type shall not be used in the to, + * from and sender parts of receive and send operations of connected ports, + * i.e, ports used for the communication among test components.*/ + + +module NegSem_060212_AddressingEntitiesInsideSut_004 { + + type integer MyAddress; + type integer MyMessType; + type integer address; + + + type port PortType message { + address MyAddress; + inout MyMessType; + } + + type component TestCaseComp { + port PortType p1; + port PortType p2; + } + + function CheckConnected() runs on TestCaseComp + { + if(p1.checkstate("Connected")) { + setverdict(pass,"Connected"); + } else { + setverdict(fail,"Not connected"); + } + } + + testcase TC_NegSem_060212_AddressingEntitiesInsideSut_004() runs on TestCaseComp system TestCaseComp { + + var PortType.address MySUTentity := 1; + + + connect(mtc:p1, mtc:p2); + + p1.send(MyMessType: 1) to MySUTentity; //error: address type is allowed in to part send operation + + setverdict(pass); + } + + control { + execute(TC_NegSem_060212_AddressingEntitiesInsideSut_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_001.ttcn new file mode 100644 index 0000000..847ffc9 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_001.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure null assignment is accepted for addresses + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060212_AddressingEntitiesInsideSut_001 { + type integer address; + + type component TestCaseComp { + } + + testcase TC_Sem_060212_AddressingEntitiesInsideSut_001() runs on TestCaseComp system TestCaseComp { + + var address v_int := null; // valid value for an address + + setverdict(pass); + } + + control { + execute(TC_Sem_060212_AddressingEntitiesInsideSut_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_002.ttcn new file mode 100644 index 0000000..27a7889 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060212_addressing_entities_inside_sut/Sem_060212_AddressingEntitiesInsideSut_002.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.12, Ensure that the right port address is used + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_060212_AddressingEntitiesInsideSut_002 { + type integer address; + + type port PortType1 message { + address charstring; + inout all; + } + + type port PortType2 message { + inout all; + } + + type component TestCaseComp { + port PortType1 p1; + port PortType2 p2; + } + + testcase TC_Sem_060212_AddressingEntitiesInsideSut_002() runs on TestCaseComp system TestCaseComp { + + var address v_int := 1; + var PortType1.address v_char := "test"; + + map(mtc:p1, system:p1); + map(mtc:p2, system:p2); + + // port 1 has charstring address + p1.send(5) to v_char; + + // port 2 has integer address + p2.send(5) to v_int; + p2.send(5) to 5; + + setverdict(pass); + } + + control { + execute(TC_Sem_060212_AddressingEntitiesInsideSut_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_001.ttcn new file mode 100644 index 0000000..dc7a145 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_001.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +module NegSem_06021301_LengthSubtyping_001 { + type record length(0..10) of integer RecordOfLengthLessThan10; + + type RecordOfLengthLessThan10 RecordOfLength4To5 length(4..5); + type RecordOfLength4To5 RecordOfLength6 length(6); //length out of parent type range + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn new file mode 100644 index 0000000..0b90afd --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_002.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +module NegSem_06021301_LengthSubtyping_002 { + type set length(0..10) of integer SetOfLengthLessThan10; + + type SetOfLengthLessThan10 SetOfLength4To5 length(4..5); + type SetOfLength4To5 SetOfLength6 length(6); //length out of parent type range + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn new file mode 100644 index 0000000..841837e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_003.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +module NegSem_06021301_LengthSubtyping_003 { + type record length(0..!10) of integer RecordOfLengthLessThan10; //only inclusive boundary is allowed + + type RecordOfLengthLessThan10 RecordOfLength4To5 length(4..5); + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn new file mode 100644 index 0000000..8c28cce --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_004.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass reject + ***************************************************/ +module NegSem_06021301_LengthSubtyping_004 { + type set length(0..10) of integer SetOfLengthLessThan10; + + type SetOfLengthLessThan10 SetOfLength5 length(!4..5); //only inclusive boundary is allowed + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_005.ttcn b/core_language/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 0000000..3497810 --- /dev/null +++ b/core_language/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,15 @@ +/*************************************************** + ** @author STF 521 + ** @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. + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/NegSem_06021301_LengthSubtyping_006.ttcn b/core_language/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 0000000..cc4d4b9 --- /dev/null +++ b/core_language/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,17 @@ +/*************************************************** + ** @author STF 521 + ** @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. + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn new file mode 100644 index 0000000..605dda6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_001.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_06021301_LengthSubtyping_001 { + type record length(10) of integer RecordOfLength10; //direct subtyping + type record length(0..10) of integer RecordOfLengthLessThan10; //direct subtyping + + type RecordOfLengthLessThan10 RecordOfLength6 length(6); //referenced subtyping + type RecordOfLengthLessThan10 RecordOfLength4To5 length(4..5); //referenced subtyping + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn new file mode 100644 index 0000000..67271c1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021301_length_subtyping/Syn_06021301_LengthSubtyping_002.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:6.2.13.1, The length subtyping check for 'record of' or 'set of' types + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_06021301_LengthSubtyping_002 { + type set length(10) of integer SetOfLength10; //direct subtyping + type set length(0..10) of integer SetOfLengthLessThan10; //direct subtyping + + type SetOfLengthLessThan10 SetOfLength6 length(6); //referenced subtyping + type SetOfLengthLessThan10 SetOfLength4To5 length(4..5); //referenced subtyping + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn new file mode 100644 index 0000000..db5f76a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.13.2, ensure that list subtyping check for record types is properly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_06021302_ListSubtyping_001 { + type record MyRecord { + integer f1 optional, + charstring f2, + charstring f3 + } + + type MyRecord MyRecordSub1 ( + { f1 := omit, f2 := "user", f3 := "password" }, + { f1 := 1, f2 := "User", f3 := "Password" } + ); // a valid subtype of MyRecord containing 2 values + + type MyRecordSub1 MyRecordSub2 ( + { f1 := 1, f2 := "user", f3 := "password" }, + { f1 := 1, f2 := "User", f3 := "Password" } + ); //invalid subtype, the omitted element cannot be overwritten + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_002.ttcn new file mode 100644 index 0000000..1f4acdf --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/NegSem_06021302_ListSubtyping_002.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.13.2, ensure that list subtyping check for record types is properly handled + ** @verdict pass reject + ***************************************************/ +module NegSem_06021302_ListSubtyping_002 { + type record MyRecord { + integer f1 optional, + charstring f2, + charstring f3 + } + + type MyRecord MyRecordSub1 ( + { f2 := "user", f3 := "password" }, + { f2 := "User", f3 := "Password" } + ); // a valid subtype of MyRecord containing 2 values + + type MyRecordSub1 MyRecordSub2 ( + { f1 := 1, f2 := "user", f3 := "password" }, + { f1 := 2, f2 := "user", f3 := "Password" } + ); //invalid subtype, contains wrong combination of f2 and f3 + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_001.ttcn new file mode 100644 index 0000000..9b4e085 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_001.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.13.2, ensure that list subtyping check for record types is properly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06021302_ListSubtyping_001 { + + type component GeneralComp { + } + + type record MyRecord { + integer f1 optional, + charstring f2, + charstring f3 + } + + type MyRecord MyRecordSub1 ( + { f1 := omit, f2 := "user", f3 := "password" }, + { f1 := 1, f2 := "User", f3 := "Password" } + ); // a valid subtype of MyRecord containing 2 values + + +testcase TC_Sem_06021302_ListSubtyping_001() runs on GeneralComp { + var MyRecordSub1 v_record := { f1 := 1, f2 := "User", f3 := "Password" }; + + if ( match(v_record,{ 1, "User", "Password" }) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06021302_ListSubtyping_001()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_002.ttcn new file mode 100644 index 0000000..be4c05f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_002.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.13.2, ensure that list subtyping check for record types is properly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06021302_ListSubtyping_002 { + + type component GeneralComp { + } + + type record MyRecord { + integer f1 optional, + charstring f2, + charstring f3 + } + + type MyRecord MyRecordSub1 ( + { f1 := *, f2 := "user", f3 := "password" }, + { f1 := *, f2 := "User", f3 := "Password" } + ); // a valid subtype, f1 may contain any values + + +testcase TC_Sem_06021302_ListSubtyping_002() runs on GeneralComp { + var MyRecordSub1 v_record := { f1 := 8, f2 := "User", f3 := "Password" }; + + if ( match(v_record,{ 8, "User", "Password" }) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06021302_ListSubtyping_002()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_003.ttcn new file mode 100644 index 0000000..f09e17a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/060213_subtyping_of_structured_types/06021302_list_subtyping/Sem_06021302_ListSubtyping_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.2.13.2, ensure that list subtyping check for record types is properly handled + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_06021302_ListSubtyping_003 { + + type component GeneralComp { + } + + type record MyRecord { + integer f1 optional, + charstring f2, + charstring f3 + } + + type MyRecord MyRecordSub1 ( + { f1 := *, f2 := "user", f3 := pattern "password|Password" }, + { f1 := (1 .. 10), f2 := "User", f3 := ? } + ); // a valid subtype + + +testcase TC_Sem_06021302_ListSubtyping_003() runs on GeneralComp { + var MyRecordSub1 v_record := { f1 := omit, f2 := "user", f3 := "Password" }; + var template MyRecordSub1 m_match := { *, "user", "Password" }; + + if ( match(v_record,m_match) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + +control { + execute(TC_Sem_06021302_ListSubtyping_003()); +} + +} diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_001.ttcn new file mode 100644 index 0000000..f2594d4 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_001.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can not be used for a union type. + ** @verdict pass reject + ***************************************************/ +module NegSem_0602_TopLevel_001 { + + type component GeneralComp { + } + + type union MyUnion { + integer field1, + charstring field2, + float field3 + } + + testcase TC_NegSem_0602_TopLevel_001() runs on GeneralComp { + + var MyUnion v_myUnion := {5}; //value list notation can not be used for a union type + + } + + control { + execute(TC_NegSem_0602_TopLevel_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_002.ttcn new file mode 100644 index 0000000..e6c8f97 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_002.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can not be used for a record type. + ** @verdict pass reject + ***************************************************/ +module NegSem_0602_TopLevel_002 { + + type component GeneralComp { + } + + type record MyRecord { + integer field1, + charstring field2, + float field3 + } + + testcase TC_NegSem_0602_TopLevel_002() runs on GeneralComp { + + var MyRecord v_myRecord := { + field1 := 5, + field2 := "hi", + field3 := 3.14 + }; + + var integer Integer1 :=3; + v_myRecord[0] := Integer1;//not possible to use index notation on a record type + + } + + control { + execute(TC_NegSem_0602_TopLevel_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_003.ttcn new file mode 100644 index 0000000..5e308d5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_003.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can not be used for a set type. + ** @verdict pass reject + ***************************************************/ +module NegSem_0602_TopLevel_003 { + + type component GeneralComp { + } + + type set MySet { + integer field1, + charstring field2, + float field3 + } + + testcase TC_NegSem_0602_TopLevel_003() runs on GeneralComp { + + var MySet v_mySet := { + field1 := 5, + field2 := "hi", + field3 := 3.14 + }; + + var integer Integer1 :=3; + v_mySet[0] := Integer1;//not possible to use index notation on a set type + + } + + control { + execute(TC_NegSem_0602_TopLevel_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_004.ttcn new file mode 100644 index 0000000..e220155 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSem_0602_TopLevel_004.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can not be used for a union type. + ** @verdict pass reject + ***************************************************/ +module NegSem_0602_TopLevel_004 { + + type component GeneralComp { + } + + type union MyUnion { + integer field1, + charstring field2, + float field3 + } + + testcase TC_NegSem_0602_TopLevel_004() runs on GeneralComp { + + var MyUnion v_myUnion := { + field1 := 5 + }; + + var integer Integer1 :=3; + v_myUnion[0] := Integer1;//not possible to use index notation on a union type + + } + + control { + execute(TC_NegSem_0602_TopLevel_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn new file mode 100644 index 0000000..4eafc58 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_001.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Invalid recursive union type definition causing an error + ** @verdict pass reject + ***************************************************/ +module NegSyn_0602_TopLevel_001 { + // In case of union types, to avoid infinite recursion, at least one of the alternatives shall not reference its own type. + type union MyUnion { + MyUnion choice1, + MyUnion choice2 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn new file mode 100644 index 0000000..9b6d867 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_002.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Invalid recursive record type definition causing an error + ** @verdict pass reject + ***************************************************/ +module NegSyn_0602_TopLevel_002 { + // In case of record and set types, to avoid infinite recursion, fields referencing to its own type, shall be optional. + type record MyRecord { + integer field1, + MyRecord field2, + integer field3 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn new file mode 100644 index 0000000..14bbeaf --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_003.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Combined value list and assignment notation not allowed in the same (immediate) context. + ** @verdict pass reject + ***************************************************/ +module NegSyn_0602_TopLevel_003 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { + field1 := 5, + "hi", // combined value list and assignment notation not allowed in the same (immediate) context. + field3 := 3.14 + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn new file mode 100644 index 0000000..e516fc6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_004.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 521 + ** @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 + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn new file mode 100644 index 0000000..eb9c41a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn new file mode 100644 index 0000000..38e5be2 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_006.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn new file mode 100644 index 0000000..2097106 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/NegSyn_0602_TopLevel_007.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn new file mode 100644 index 0000000..863291d --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for a record type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_001 { + + type component GeneralComp { + } + + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + + testcase TC_Sem_0602_TopLevel_001() runs on GeneralComp { + + var MyRecord v_myRecord := { + field1 := 5, + field2 := "hi", + field3 := 3.14 + }; + + if (v_myRecord=={5,"hi",3.14}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_001()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn new file mode 100644 index 0000000..5f948e6 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_002.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for a record of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_002 { + + type component GeneralComp { + } + + type record of integer MyRecordOf; + + testcase TC_Sem_0602_TopLevel_002() runs on GeneralComp { + + var MyRecordOf v_allRecords := { + [0] := 1, + [1] := 2, + [2] := 3 + }; + + if (v_allRecords=={1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_002()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn new file mode 100644 index 0000000..01ae452 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for a set type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_003 { + + type component GeneralComp { + } + + type set MySet { + integer field1, + charstring field2 optional, + float field3 + } + + testcase TC_Sem_0602_TopLevel_003() runs on GeneralComp { + + var MySet v_mySet := { + field1 := 5, + field2 := "hi", + field3 := 3.14 + }; + + if (v_mySet=={field1 := 5, + field2 := "hi", + field3 := 3.14}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_003()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_004.ttcn new file mode 100644 index 0000000..3b962fb --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for a set of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_004 { + + type component GeneralComp { + } + + type set of integer MySetOf; + + testcase TC_Sem_0602_TopLevel_004() runs on GeneralComp { + + var MySetOf v_allSets := { + [0] := 1, + [1] := 2, + [2] := 3 + }; + + if (v_allSets=={1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_004()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_005.ttcn new file mode 100644 index 0000000..2a4121f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_005.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for a union type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_005 { + + type component GeneralComp { + } + + type union MyUnion { + integer field1, + charstring field2, + float field3 + } + + testcase TC_Sem_0602_TopLevel_005() runs on GeneralComp { + + var MyUnion v_myUnion := { + field1 := 5 + }; + + if (v_myUnion.field1 == 5) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_005()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_006.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_006.ttcn new file mode 100644 index 0000000..9919947 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_006.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that assignment notation can be used for an array. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_006 { + + type component GeneralComp { + } + + type integer MyArray [3]; + + testcase TC_Sem_0602_TopLevel_006() runs on GeneralComp { + + var MyArray v_myArray; + v_myArray[0] := 1; + v_myArray[1] := 2; + v_myArray[2] := 3; + + if (v_myArray == {1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_006()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_007.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_007.ttcn new file mode 100644 index 0000000..2295d2a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_007.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can be used for a record type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_007 { + + type component GeneralComp { + } + + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + + testcase TC_Sem_0602_TopLevel_007() runs on GeneralComp { + + var MyRecord v_myRecord := {5,"hi", 3.14}; + + if (v_myRecord=={5,"hi",3.14}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_007()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_008.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_008.ttcn new file mode 100644 index 0000000..919a492 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_008.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can be used for a record of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_008 { + + type component GeneralComp { + } + + type record of integer MyRecordOf; + + testcase TC_Sem_0602_TopLevel_008() runs on GeneralComp { + + var MyRecordOf v_allRecords := {1,2,3}; + + if (v_allRecords=={1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_008()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_009.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_009.ttcn new file mode 100644 index 0000000..24e8285 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_009.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can be used for an arrays. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_009 { + + type component GeneralComp { + } + + type integer MyArray [3]; + + testcase TC_Sem_0602_TopLevel_009() runs on GeneralComp { + + var MyArray v_myArray := {1,2,3}; + var integer Integer1 :=3; + v_myArray[0] := Integer1; + Integer1 := v_myArray[1]; + + if ( match(v_myArray, {3,2,3}) and match(Integer1, 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_009()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_010.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_010.ttcn new file mode 100644 index 0000000..8901d83 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_010.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can be used for a set of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_010 { + + type component GeneralComp { + } + + type set of integer MySetOf; + + testcase TC_Sem_0602_TopLevel_010() runs on GeneralComp { + + var MySetOf v_allSets := {1,2,3}; + + if (v_allSets=={1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_010()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_011.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_011.ttcn new file mode 100644 index 0000000..248f82a --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_011.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can be used for an array. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_011 { + + type component GeneralComp { + } + + type integer MyArray [3]; + + testcase TC_Sem_0602_TopLevel_011() runs on GeneralComp { + + var MyArray v_myArray := {1,2,3}; + + if (v_myArray == {1,2,3}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_011()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_012.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_012.ttcn new file mode 100644 index 0000000..ca24a9e --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_012.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can be used for a record of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_012 { + + type component GeneralComp { + } + + type record of integer MyRecordOf; + + testcase TC_Sem_0602_TopLevel_012() runs on GeneralComp { + + var MyRecordOf v_allRecords := {1,2,3}; + var integer Integer1 :=3; + v_allRecords[0] := Integer1; + Integer1 := v_allRecords[1]; + + if ( match(v_allRecords, {3,2,3}) and match(Integer1, 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_012()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_013.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_013.ttcn new file mode 100644 index 0000000..943f97f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_013.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that indexed notation can be used for a set of type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_013 { + + type component GeneralComp { + } + + type set of integer MySetOf; + + testcase TC_Sem_0602_TopLevel_013() runs on GeneralComp { + + var MySetOf v_allSets := {1,2,3}; + var integer Integer1 :=3; + v_allSets[0] := Integer1; + Integer1 := v_allSets[1]; + + if ( match(v_allSets, {3,2,3}) and match(Integer1, 2)) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_013()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_014.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_014.ttcn new file mode 100644 index 0000000..142aece --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Sem_0602_TopLevel_014.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:6.2, Ensure that value list notation can be used for a set type and the values + ** are assigned to the fields in the sequential order of the fields in the type definition. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_0602_TopLevel_014 { + + type component GeneralComp { + } + + type set MySet { + integer field1, + charstring field2 optional, + float field3 + } + + testcase TC_Sem_0602_TopLevel_014() runs on GeneralComp { + + var MySet v_mySet := {5,"hi",3.14};// SEE NOTE under 6.2.2 + + if (v_mySet=={5,"hi",3.14}) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_0602_TopLevel_014()); + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_001.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_001.ttcn new file mode 100644 index 0000000..302b3f5 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_001.ttcn @@ -0,0 +1,13 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Valid recursive union type definition + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_0602_TopLevel_001 { + // In case of union types, to avoid infinite recursion, at least one of the alternatives shall not reference its own type. + type union MyUnion { + MyUnion choice1, + charstring choice2 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_002.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_002.ttcn new file mode 100644 index 0000000..031fb6f --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_002.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Valid recursive record type definition + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_0602_TopLevel_002 { + // In case of record and set types, to avoid infinite recursion, fields referencing to its own type, shall be optional. + type record MyRecord { + integer field1, + MyRecord field2 optional, + float field3 + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_003.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_003.ttcn new file mode 100644 index 0000000..1e0e0e1 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_003.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Valid recursive record type definition + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_0602_TopLevel_003 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { + field1 := 5, + field2 := "hi", + field3 := 3.14 + }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_004.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_004.ttcn new file mode 100644 index 0000000..96778c3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_004.ttcn @@ -0,0 +1,14 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, constant definition of a record type. + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_0602_TopLevel_004 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { 5, "foo", 3.14 }; +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_005.ttcn b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_005.ttcn new file mode 100644 index 0000000..6c0fae3 --- /dev/null +++ b/core_language/06_types_and_values/0602_structured_types_and_values/0602_toplevel/Syn_0602_TopLevel_005.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.2, Fields not mentioned are implicitly left unspecified. + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_0602_TopLevel_005 { + type record MyRecord { + integer field1, + charstring field2 optional, + float field3 + } + const MyRecord c_rec := { + field1 := 5, + // field2 implicitly unspecified + field3 := 3.14 + } with { + optional "implicit omit" + } +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_001.ttcn new file mode 100644 index 0000000..1316b85 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_001 { + type integer ConstrainedInt(1..10); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_001() runs on GeneralComp { + + var integer v_int:=15; + var ConstrainedInt v_constrainedInt; + + + v_constrainedInt:=v_int; // 15 not in range 1..10 + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_002.ttcn new file mode 100644 index 0000000..4741104 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_002 { + type float ConstrainedFloat(1.0 .. 1E1); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_002() runs on GeneralComp { + + var integer v_float:=15.0; + var ConstrainedFloat v_constrainedFloat; + + + v_constrainedFloat:=v_float; + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_002()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_003.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_003.ttcn new file mode 100644 index 0000000..39df2b0 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_003.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_003 { + type charstring ConstrainedChar ("a" .. "z"); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_003() runs on GeneralComp { + + var charstring v_char := "j5l"; + var ConstrainedChar v_constrainedChar; + + v_constrainedChar:=v_char; // 5 not in dictionary + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_003()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_004.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_004.ttcn new file mode 100644 index 0000000..d04d43e --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_004.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_004 { + type universal charstring ConstrainedUChar (char(0, 0, 1, 111) .. char(0, 0, 1, 113)); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_004() runs on GeneralComp { + + var universal charstring v_uChar := char(0, 0, 1, 122); + var ConstrainedUChar v_constrainedUChar; + + + v_constrainedUChar:=v_uChar; // char not in range + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_004()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_005.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_005.ttcn new file mode 100644 index 0000000..9a9ca02 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_005 { + type bitstring ConstrainedBitString ('01'B, '10'B, '11'B); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_005() runs on GeneralComp { + + var bitstring v_bitstr := '00'B; + var ConstrainedBitString v_constrainedBitstr; + + + v_constrainedBitstr:=v_bitstr; // value '00'B not in ConstrainedBitString type + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_005()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_006.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_006.ttcn new file mode 100644 index 0000000..e97bbc0 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_006.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from incompatible type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_006 { + type hexstring ConstrainedHexString ('1A'H, '1B'H, '1C'H); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_006() runs on GeneralComp { + + var hexstring v_hexstr := '2B'H; + var ConstrainedHexString v_constrainedHexstr; + + v_constrainedHexstr:=v_hexstr; // value '2B'H not in ConstrainedHexString type + +} + +control{ + execute(TC_NegSem_060301_non_structured_types_006()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_007.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_007.ttcn new file mode 100644 index 0000000..523a7b8 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_007.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_007 { + type integer ConstrainedInt[1]; + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_007() runs on GeneralComp { + + var integer v_int[2]:={5,4}; + var ConstrainedInt v_constrainedInt; + + + v_constrainedInt:=v_int; // length 2 array assigned to length 1 array type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_007()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_008.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_008.ttcn new file mode 100644 index 0000000..318ab05 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_008.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_008 { + type float ConstrainedFloat[1]; + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_008() runs on GeneralComp { + + var integer v_float[2]:={5.0,4.0}; + var ConstrainedFloat v_constrainedFloat; + + + v_constrainedFloat:=v_float; // length 2 array assigned to length 1 array type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_008()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_009.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_009.ttcn new file mode 100644 index 0000000..df4094b --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_009.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_009 { + type charstring ConstrainedChar length (1); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_009() runs on GeneralComp { + + var charstring v_char := "jk"; + var ConstrainedChar v_constrainedChar; + + + v_constrainedChar:=v_char; // length 2 charstring assigned to length 1 type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_009()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_010.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_010.ttcn new file mode 100644 index 0000000..110f170 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_010.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_010 { + type universal charstring ConstrainedUChar length (1); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_010() runs on GeneralComp { + + var universal charstring v_uChar := char(0, 0, 1, 112) & char(0, 0, 1, 112); + var ConstrainedUChar v_constrainedUChar; + + + v_constrainedUChar:=v_uChar; // length 2 charstring assigned to length 1 type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_010()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_011.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_011.ttcn new file mode 100644 index 0000000..7950612 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_011.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_011 { + type bitstring ConstrainedBitString length (1); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_011() runs on GeneralComp { + + var bitstring v_bitstr := '10'B; + var ConstrainedBitString v_constrainedBitstr; + + + v_constrainedBitstr:=v_bitstr; // length 2 string assigned to length 1 type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_011()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_012.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_012.ttcn new file mode 100644 index 0000000..c88c181 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/NegSem_060301_non_structured_types_012.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060301_non_structured_types_012 { + type hexstring ConstrainedHexString length (1); + +type component GeneralComp { +} + +testcase TC_NegSem_060301_non_structured_types_012() runs on GeneralComp { + + var hexstring v_hexstr := '1B'H; + var ConstrainedHexString v_constrainedHexstr; + + v_constrainedHexstr:=v_hexstr; // length 2 string assigned to length 1 type +} + +control{ + execute(TC_NegSem_060301_non_structured_types_012()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_001.ttcn new file mode 100644 index 0000000..a194978 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.2 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// integer and float assigments from compatible types. +module Sem_060301_non_structured_types_001 { + type integer ConstrainedInt(1..10); + type float ConstrainedFloat(1.0 .. 1E1); + +type component GeneralComp { +} + +testcase TC_Sem_060301_non_structured_types_001() runs on GeneralComp { + + var integer v_int:=5; + var ConstrainedInt v_constrainedInt; + var float v_float:=5.0; + var ConstrainedFloat v_constrainedFloat; + + + + v_constrainedInt:=v_int; + v_constrainedFloat:=v_float; + + + if ( + (v_constrainedInt==5) and + (v_constrainedFloat==5.0) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060301_non_structured_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_002.ttcn new file mode 100644 index 0000000..0023b81 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_002.ttcn @@ -0,0 +1,74 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible size restrictions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060301_non_structured_types_002 { + type integer ConstrainedInt[1..2]; + type float ConstrainedFloat[1..2]; + type charstring ConstrainedChar length (1..2); + type universal charstring ConstrainedUChar length (1..2); + type bitstring ConstrainedBitString length (1..2); + type hexstring ConstrainedHexString length (1..2); + +type component GeneralComp { +} +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_060301_non_structured_types_002() runs on GeneralComp { + + var integer v_int[2]:={5,4}; + var ConstrainedInt v_constrainedInt; + var float v_float[2]:={5.0,4.0}; + var ConstrainedFloat v_constrainedFloat; + var charstring v_char := "jk"; + var ConstrainedChar v_constrainedChar; + var universal charstring v_uChar := char(0, 0, 1, 112); + var ConstrainedUChar v_constrainedUChar; + var bitstring v_bitstr := '10'B; + var ConstrainedBitString v_constrainedBitstr; + var hexstring v_hexstr := '1B'H; + var ConstrainedHexString v_constrainedHexstr; + + + v_constrainedInt:=v_int; + v_constrainedFloat:=v_float; + v_constrainedChar:=v_char; + v_constrainedUChar:=v_uChar; + v_constrainedBitstr:=v_bitstr; + v_constrainedHexstr:=v_hexstr; + + if ( + (v_constrainedInt[1]==5) and + (v_constrainedInt[2]==4) and + (f_isFloatNear(v_constrainedFloat[1],5.0)) and + (f_isFloatNear(v_constrainedFloat[2],4.0)) and + (v_constrainedChar=="jk") and + (v_constrainedUChar==char(0, 0, 1, 112)) and + (v_constrainedBitstr=='10'B) and + (v_constrainedHexstr=='1B'H) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060301_non_structured_types_002()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_003.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_003.ttcn new file mode 100644 index 0000000..babafbb --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_003.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// charstring and universal charstring assigments +module Sem_060301_non_structured_types_003 { + + type charstring ConstrainedChar ("a" .. "z"); + type universal charstring ConstrainedUChar (char(0, 0, 1, 111) .. char(0, 0, 1, 113)); + + +type component GeneralComp { +} + +testcase TC_Sem_060301_non_structured_types_003() runs on GeneralComp { + + + var charstring v_char := "jkl"; + var ConstrainedChar v_constrainedChar; + var universal charstring v_uChar := char(0, 0, 1, 112); + var ConstrainedUChar v_constrainedUChar; + + + + v_constrainedChar:=v_char; + v_constrainedUChar:=v_uChar; + + if ( + (v_constrainedChar=="jkl") and + (v_constrainedUChar==char(0, 0, 1, 112))) + { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060301_non_structured_types_003()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_004.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_004.ttcn new file mode 100644 index 0000000..fc3b0ee --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060301_non-structured_types/Sem_060301_non_structured_types_004.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.1, Ensure that the IUT correctly handles assignments from compatible type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// bitstring and hexstring assignments + +module Sem_060301_non_structured_types_004 { + + type bitstring ConstrainedBitString ('01'B, '10'B, '11'B); + type hexstring ConstrainedHexString ('1A'H, '1B'H, '1C'H); + +type component GeneralComp { +} + +testcase TC_Sem_060301_non_structured_types_004() runs on GeneralComp { + + var bitstring v_bitstr := '10'B; + var ConstrainedBitString v_constrainedBitstr; + var hexstring v_hexstr := '1B'H; + var ConstrainedHexString v_constrainedHexstr; + + v_constrainedBitstr:=v_bitstr; + v_constrainedHexstr:=v_hexstr; + + if ( + (v_constrainedBitstr=='10'B) and + (v_constrainedHexstr=='1B'H) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060301_non_structured_types_004()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_001.ttcn new file mode 100644 index 0000000..4282508 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2.1, Reject assignment of other enumerated types since they are only compatible to synonym types + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_001 { + + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedRedefinition {e_black, e_white}; + + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_001() runs on GeneralComp { + + var EnumeratedType v_enum1:=e_black; + var EnumeratedRedefinition v_enum2; + + v_enum2:=v_enum1; // not a synonym type + setverdict(pass); +} + +control{ + execute(TC_NegSem_060302_structured_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_002.ttcn new file mode 100644 index 0000000..27e2d5c --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_002 { + + type record RecordType1 { + integer a(0..10) optional, + integer b(0..5) optional, + boolean c + } + type record RecordType2 { + integer e optional, + integer f(0..10) , + boolean g + } + + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_002() runs on GeneralComp { + + var RecordType1 v_rec1:={a:=4,b:=omit,c:=false}; + var RecordType2 v_rec2; + + v_rec2:=v_rec1; // optionality mismatch (e.g. b is optional where f is mandatory) + setverdict(pass); +} + +control{ + execute(TC_NegSem_060302_structured_types_002()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_003.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_003.ttcn new file mode 100644 index 0000000..de0e203 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_003 { + + type record RecordType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + type record ModifiedRecord { + integer e optional, + integer f(0..5) optional, + boolean g + } + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_003() runs on GeneralComp { + + var ModifiedRecord v_rec1:={e:=15,f:=4,g:=false}; + var RecordType v_rec2; + + v_rec2:=v_rec1; //subtyping range mismatch + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_003()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_004.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_004.ttcn new file mode 100644 index 0000000..2a482c5 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_004.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_004 { + + type set SetType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + type set ModifiedSet { + integer e optional, + integer f(0..5) , + boolean g + } + + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_004() runs on GeneralComp { + + var ModifiedSet v_set1:={f:=4,e:=8,g:=false}; + var SetType v_set2; + + v_set2:=v_set1; //optionality mismatch + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_004()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_005.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_005.ttcn new file mode 100644 index 0000000..14d20e1 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_005.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_005 { + + + type set SetType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + type set ModifiedSet { + integer e optional, + integer f(0..5) optional, + boolean g + } + + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_005() runs on GeneralComp { + + var ModifiedSet v_set1:={f:=4,e:=15,g:=false}; + var SetType v_set2; + + v_set2:=v_set1; //subtyping range mismatch + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_005()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_006.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_006.ttcn new file mode 100644 index 0000000..f64e647 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_006.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_006 { + + + type record of integer IntegerList(0..10); + type record of integer ModifiedList; + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_006() runs on GeneralComp { + + var ModifiedList v_list1:={2,14,8}; + var IntegerList v_list2; + + v_list2:=v_list1; + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_006()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_007.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_007.ttcn new file mode 100644 index 0000000..6939bef --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_007.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_007 { + + + type set of integer IntegerUnorderedList(0..10); + type set of integer ModifiedUnorderedList; + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_007() runs on GeneralComp { + + var ModifiedUnorderedList v_ulist1:={2,14,8}; + var IntegerUnorderedList v_ulist2; + + v_ulist2:=v_ulist1; + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_007()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_008.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_008.ttcn new file mode 100644 index 0000000..21dd313 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_008.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_008 { + + type enumerated EnumeratedType {e_black, e_white}; + type EnumeratedType EnumeratedSynonym; + + type union UnionType { + integer a(0..10), + EnumeratedType b, + boolean c + } + type union ModifiedUnion { + integer a, + boolean c, + EnumeratedSynonym b + } + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_008() runs on GeneralComp { + + var ModifiedUnion v_union1:={a:=12}; + var UnionType v_union2; + + v_union2:=v_union1; //subtyping range mismatch + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_008()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn new file mode 100644 index 0000000..8460ccb --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_009.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 409 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_009 language "TTCN-3:2016"{ + + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedRedefinition {e_black, e_white}; + + type union UnionType { + integer a(0..10), + EnumeratedType b, + boolean c + } + type union ModifiedUnion { + integer a, + boolean c, + EnumeratedRedefinition b + } + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_009() runs on GeneralComp { + + var ModifiedUnion v_union1:={b:=e_black}; + var UnionType v_union2; + + v_union2:=v_union1; //enumerated type mismatch + setverdict(pass); +} + +control{ + execute(TC_NegSem_060302_structured_types_009()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_010.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_010.ttcn new file mode 100644 index 0000000..af8a342 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_010.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from incompatible types or type ranges + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_010 { + + type enumerated EnumeratedType {e_black, e_white}; + type EnumeratedType EnumeratedSynonym; + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + type union ModifiedUnion { + integer aa, + boolean cc, + EnumeratedSynonym bb + } + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_010() runs on GeneralComp { + + var ModifiedUnion v_union1:={aa:=1}; + var UnionType v_union2; + + v_union2:=v_union1; //element naming mismatch + setverdict(pass); + +} + +control{ + execute(TC_NegSem_060302_structured_types_010()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_011.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_011.ttcn new file mode 100644 index 0000000..b8a3992 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_011.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments from structures having incompatible anytypes + ** @verdict pass reject + ***************************************************/ +module NegSem_060302_structured_types_011 { + + import from NegSem_060302_structured_types_011_importA all; + import from NegSem_060302_structured_types_011_importB all; + + +type component GeneralComp { +} + +testcase TC_NegSem_060302_structured_types_011() runs on GeneralComp { + + var NegSem_060302_structured_types_011_importA.Atype v_a; + var NegSem_060302_structured_types_011_importB.Atype v_b := { F := 1 } + + v_a:=v_b; //v_a's type does not contain the selected alternative + + if ( v_a==1 ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_060302_structured_types_011()); +} + +} + + +module NegSem_060302_structured_types_011_importA { + type integer I (0..2); + type anytype Atype; + } + + +module NegSem_060302_structured_types_011_importB { + type integer I (0..2); + type integer F; + type anytype Atype; +} + diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_012.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_012.ttcn new file mode 100644 index 0000000..8295edf --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_012.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments having mismatch between undefined and omitted elements + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_012 { + + type record RecordType { + integer a, + integer b optional + } + + type set SetType { + integer a, + integer b optional + } + + type record length (1..2) of integer ShortIntegerList; + type record of integer IntegerList; + + type set length (1..2) of integer ShortUnorderedIntegerList; + type set of integer UnorderedIntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_012() runs on GeneralComp { + + + var IntegerList v_list1:={1,-}; + var ShortIntegerList v_list2; + var RecordType v_rec1; + var UnorderedIntegerList v_ulist1:={1,-}; + var ShortUnorderedIntegerList v_ulist2; + var SetType v_set1; + + var integer v_matcher[2] := {1,-}; + + var boolean v_check1; + + v_list2:=v_list1; + v_rec1:=v_list2; + v_ulist2:=v_ulist1; + v_set1:=v_ulist2; + + v_check1 := match(v_rec1, v_matcher); //mismatch between undefined and omitted elements + + } + + control{ + execute(TC_NegSem_060302_structured_types_012()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_013.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_013.ttcn new file mode 100644 index 0000000..ed67887 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_013.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments having mismatch between undefined and omitted elements + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_013 { + + type record RecordType { + integer a, + integer b optional + } + + type set SetType { + integer a, + integer b optional + } + + type record length (1..2) of integer ShortIntegerList; + type record of integer IntegerList; + + type set length (1..2) of integer ShortUnorderedIntegerList; + type set of integer UnorderedIntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_013() runs on GeneralComp { + + + var IntegerList v_list1:={1,-}; + var ShortIntegerList v_list2; + var RecordType v_rec1; + var UnorderedIntegerList v_ulist1:={1,-}; + var ShortUnorderedIntegerList v_ulist2; + var SetType v_set1; + + var integer v_matcher[2] := {1,-}; + + var boolean v_check1; + + v_list2:=v_list1; + v_rec1:=v_list2; + v_ulist2:=v_ulist1; + v_set1:=v_ulist2; + + v_check1 := match(v_set1,{1,-}); //mismatch between undefined and omitted elements + + } + + control{ + execute(TC_NegSem_060302_structured_types_013()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_014.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_014.ttcn new file mode 100644 index 0000000..344d9bb --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_014.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments between incompatible structures + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_014 { + + type record RecordType { + integer a, + integer b optional, + integer c + } + + type record of integer IntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_014() runs on GeneralComp { + + var RecordType v_record := { 1, omit, 2}; + var IntegerList v_IntList; + var integer v_array[2]; + + v_array:=v_record; //assignment between incompatible types + + } + + control{ + execute(TC_NegSem_060302_structured_types_014()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_015.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_015.ttcn new file mode 100644 index 0000000..1bce07a --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_015.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments between incompatible structures + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_015 { + + type record RecordType { + integer a, + integer b optional, + integer c + } + + type record of integer IntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_015() runs on GeneralComp { + + var RecordType v_record := { 1, omit, 2}; + var IntegerList v_IntList; + var integer v_array[2]; + + v_IntList:=v_record; //assignment between incompatible types + + } + + control{ + execute(TC_NegSem_060302_structured_types_015()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_016.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_016.ttcn new file mode 100644 index 0000000..4416df8 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_016.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments between incompatible structures + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_016 { + + type set SetType { + integer a, + integer b optional, + integer c + } + + type set of integer IntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_016() runs on GeneralComp { + + var SetType v_set := { 1, omit, 2}; + var IntegerList v_IntList; + var integer v_array[2]; + + v_array:=v_set; //assignment between incompatible types + + } + + control{ + execute(TC_NegSem_060302_structured_types_016()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_017.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_017.ttcn new file mode 100644 index 0000000..e8cd51b --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_017.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments between incompatible structures + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_017 { + + type set SetType { + integer a, + integer b optional, + integer c + } + + type set of integer IntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_017() runs on GeneralComp { + + var SetType v_set := { 1, omit, 2}; + var IntegerList v_IntList; + var integer v_array[2]; + + v_IntList:=v_set; //assignment between incompatible types + + } + + control{ + execute(TC_NegSem_060302_structured_types_017()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_018.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_018.ttcn new file mode 100644 index 0000000..5e319a0 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_018.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT rejects assignments between incompatible structures + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_018 { + + type set SetType { + integer a, + integer b, + integer c + } + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_018() runs on GeneralComp { + + var SetType v_set := { 1, 2, 3}; + var integer v_array[3]; + + v_array:=v_set; //assignment between incompatible types, see clause G.9 compatibility rules + + } + + control{ + execute(TC_NegSem_060302_structured_types_018()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_019.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_019.ttcn new file mode 100644 index 0000000..4a3a9c5 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/NegSem_060302_structured_types_019.ttcn @@ -0,0 +1,64 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible types and lengths + ** @verdict pass reject + ***************************************************/ + +module NegSem_060302_structured_types_019 { + + type record RecordType { + integer a, + integer b optional + } + + type set SetType { + integer a, + integer b optional + } + + type record length (1..2) of integer ShortIntegerList; + type record of integer IntegerList; + + type set length (1..2) of integer ShortUnorderedIntegerList; + type set of integer UnorderedIntegerList; + + + type component GeneralComp { + } + + testcase TC_NegSem_060302_structured_types_019() runs on GeneralComp { + + var IntegerList v_list1:={1,-}; + var ShortIntegerList v_list2; + var RecordType v_rec1; + var UnorderedIntegerList v_ulist1:={1,-}; + var ShortUnorderedIntegerList v_ulist2; + var SetType v_set1; + + var integer v_matcher[2] := {1,-}; + + var boolean v_check1; + + v_list2:=v_list1; + v_rec1:=v_list2; //incompatible assignment according to TTCN-3:2012 + v_ulist2:=v_ulist1; + v_set1:=v_ulist2; //incompatible assignment according to TTCN-3:2012 + + v_check1 := (v_list2[0]==1); + + + if ( v_check1 ) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_060302_structured_types_019()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_001.ttcn new file mode 100644 index 0000000..bb2561d --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_001.ttcn @@ -0,0 +1,97 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060302_structured_types_001 { + + type enumerated EnumeratedType {e_black, e_white}; + type EnumeratedType EnumeratedSynonym; + + type record RecordType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + type record ModifiedRecord { + integer e optional, + integer f(0..5) optional, + boolean g + } + + type set SetType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + type set ModifiedSet { + integer e optional, + integer f(0..5) optional, + boolean g + } + + type record of integer IntegerList(0..10); + type record of integer ModifiedList; + + type set of integer IntegerUnorderedList(0..10); + type set of integer ModifiedUnorderedList; + + type union UnionType { + integer a(0..10), + EnumeratedType b, + boolean c + } + type union ModifiedUnion { + integer a, + boolean c, + EnumeratedSynonym b + } + + +type component GeneralComp { +} + +testcase TC_Sem_060302_structured_types_001() runs on GeneralComp { + + var EnumeratedType v_enum1:=e_black; + var EnumeratedSynonym v_enum2; + var ModifiedRecord v_rec1:={f:=4,e:=8,g:=false}; + var RecordType v_rec2; + var ModifiedSet v_set1:={f:=4,e:=8,g:=false}; + var SetType v_set2; + var ModifiedList v_list1:={2,4,8}; + var IntegerList v_list2; + var ModifiedUnorderedList v_ulist1:={2,4,8}; + var IntegerUnorderedList v_ulist2; + var ModifiedUnion v_union1:={a:=2}; + var UnionType v_union2; + + v_enum2:=v_enum1; + v_rec2:=v_rec1; + v_set2:=v_set1; + v_list2:=v_list1; + v_ulist2:=v_ulist1; + v_union2:=v_union1; + + if ( + (v_enum2==e_black) and + (v_rec2.a==8 and v_rec2.b==4 and v_rec2.c==false) and + (v_set2.a==8 and v_set2.b==4 and v_set2.c==false) and + (v_list2[0]==2 and v_list2[1]==4 and v_list2[2]==8) and + (v_ulist2[0]==2 and v_ulist2[1]==4 and v_ulist2[2]==8) and + (v_union2.a==2) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060302_structured_types_001()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn new file mode 100644 index 0000000..948bfb9 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_002.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 (updated by STF 521) + ** @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 { + + type record RecordType { + integer a, + integer b optional + } + + type set SetType { + integer a, + integer b optional + } + + type record length (1..2) of integer ShortIntegerList; + type record of integer IntegerList; + + type set length (1..2) of integer ShortUnorderedIntegerList; + type set of integer UnorderedIntegerList; + + + type component GeneralComp { + } + + testcase TC_Sem_060302_structured_types_002() runs on GeneralComp { + + var IntegerList v_list1:={1,-}; + var ShortIntegerList v_list2; + var UnorderedIntegerList v_ulist1:={1,-}; + var ShortUnorderedIntegerList v_ulist2; + + var integer v_matcher[2] := {1,-}; + + var boolean v_check; + + v_list2:=v_list1; + v_ulist2:=v_ulist1; + + v_check := (v_list2[0]==1); + + + if ( v_check ) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_060302_structured_types_002()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_003.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_003.ttcn new file mode 100644 index 0000000..ebea637 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_003.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060302_structured_types_003 { + + + type record RecordType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + + type set SetType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + + + +type component GeneralComp { +} + +testcase TC_Sem_060302_structured_types_003() runs on GeneralComp { + + var RecordType v_rec1:={a:=4,b:=8,c:=false}; + var SetType v_set1; + + v_set1.a:=v_rec1.a; + v_set1.b:=v_rec1.b; + v_set1.c:=v_rec1.c; + + if ( + v_set1.a==4 and v_set1.b==8 and v_set1.c==false + ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060302_structured_types_003()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_004.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_004.ttcn new file mode 100644 index 0000000..9f56c62 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_004.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible anytypes + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060302_structured_types_004 { + + import from Sem_060302_structured_types_004_importA all; + import from Sem_060302_structured_types_004_importB all; + + +type component GeneralComp { +} + +testcase TC_Sem_060302_structured_types_004() runs on GeneralComp { + + var Sem_060302_structured_types_004_importA.Atype v_a; + var Sem_060302_structured_types_004_importB.Atype v_b := { integer := 1 } + + v_a:=v_b; + + if ( match(v_a.integer, 1) ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060302_structured_types_004()); +} + +} + + +module Sem_060302_structured_types_004_importA { + type integer I (0..2); + type float F; + type anytype Atype; + } + + +module Sem_060302_structured_types_004_importB { + type integer I (0..2); + type anytype Atype; +} + diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_005.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_005.ttcn new file mode 100644 index 0000000..a115fa2 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_005.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.2, Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060302_structured_types_005 { + + + type record RecordType { + integer a(0..10) optional, + integer b(0..10) optional, + boolean c + } + + type record of RecordType RecordList; + + + +type component GeneralComp { +} + +testcase TC_Sem_060302_structured_types_005() runs on GeneralComp { + + var RecordList v_list; + var RecordType v_record:={a:=1,b:=2,c:=false}; + var integer v_int; + + + v_list:= {v_record,v_record}; + v_int:=v_list[1].b; + + if ( v_int==2 ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_060302_structured_types_005()); +} + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_006.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_006.ttcn new file mode 100644 index 0000000..7a2c55b --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060302_structured_types/Sem_060302_structured_types_006.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @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_006 { + + type record RecordType { + integer a, + integer b optional + } + + type set SetType { + integer a, + integer b optional + } + + type record length (1..2) of integer ShortIntegerList; + type record of integer IntegerList; + + type set length (1..2) of integer ShortUnorderedIntegerList; + type set of integer UnorderedIntegerList; + + + type component GeneralComp { + } + + testcase TC_Sem_060302_structured_types_006() runs on GeneralComp { + + var IntegerList v_list1:={0,-}; + var ShortIntegerList v_list2; + var RecordType v_rec1; + var UnorderedIntegerList v_ulist1:={1,-}; + var ShortUnorderedIntegerList v_ulist2; + var SetType v_set1; + + var integer v_matcher[2] := {1,-}; + + var boolean v_check1; + + v_list1:=v_matcher; + v_list2:=v_list1; + + + v_check1 := (v_list2[0]==1); + + if ( v_check1 ) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_060302_structured_types_006()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_001.ttcn new file mode 100644 index 0000000..c566842 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component incompatibility due to differing list of constant definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_060303_component_types_001 { + + type integer ConstrainedInteger(0..10); + + type component TestCaseComp { + const integer c_integer:=2; + } + + type component FunctionComp { + const integer c_integer:=2; + const ConstrainedInteger c_constrained:=2; + } + + function f_testFunction(integer p_arg) runs on FunctionComp return integer { + + var integer v_result; + v_result:=p_arg*c_integer; + return v_result; + } + + testcase TC_NegSem_060303_component_types_001() runs on TestCaseComp { + + var integer v_int:=1; + + v_int := f_testFunction(v_int); + // runs on mtc with type TestCaseComp + // f_testFunction needs to run on FunctionComp + // which has 2 variables not 1 as TestCaseComp + setverdict (fail, "ERROR expected: function runs on mtc with type TestCaseComp f_testFunction needs to run on FunctionComp which has 2 variables not 1 as TestCaseComp"); + } + + control { + execute(TC_NegSem_060303_component_types_001()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_002.ttcn new file mode 100644 index 0000000..852156b --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/NegSem_060303_component_types_002.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.3, Ensure that the IUT correctly handles component incompatibility due to differing constant types having same name + ** @verdict pass reject + ***************************************************/ + +module NegSem_060303_component_types_002 { + + type integer ConstrainedInteger(0..10); + + type component TestCaseComp { + const integer c_integer:=2; + const integer c_constrained:=2; + } + + type component FunctionComp { + const integer c_integer:=2; + const ConstrainedInteger c_constrained:=2; + } + + function f_testFunction(integer p_arg) runs on FunctionComp return integer { + + var integer v_result; + v_result:=p_arg*c_integer; + return v_result; + } + + testcase TC_NegSem_060303_component_types_002() runs on TestCaseComp { + + var integer v_int:=1; + + f_testFunction(v_int); + + setverdict(fail, "Error expected: as component types are not compatible since their definitions are not identical."); + } + + control { + execute(TC_NegSem_060303_component_types_002()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_001.ttcn new file mode 100644 index 0000000..096e868 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_001.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.3, Ensure that the IUT correctly handles assignments from structures having compatible components + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060303_component_types_001 { + + type integer ConstrainedInteger(0..10); + + type component TestCaseComp { + const integer c_integer:=2; + const ConstrainedInteger c_constrained:=2; + } + + type component FunctionComp { + const integer c_integer:=2; + const ConstrainedInteger c_constrained:=2; + } + + function f_testFunction(integer p_arg) runs on FunctionComp return integer { + + var integer v_result; + v_result:=p_arg*c_integer*c_constrained; + return v_result; + } + + testcase TC_Sem_060303_component_types_001() runs on TestCaseComp { + + var integer v_int:=1; + + if ( f_testFunction(v_int)==4 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060303_component_types_001()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_002.ttcn new file mode 100644 index 0000000..0a0afc3 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060303_component_types/Sem_060303_component_types_002.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:6.3.3, Ensure that the IUT correctly handles assignments from structures having compatible components + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_060303_component_types_002 { + + type integer ConstrainedInteger(0..10); + + type component TestCaseComp { + const integer c_integer:=2; + const ConstrainedInteger c_constrained:=2; + } + + type component FunctionComp { + const integer c_integer:=2; + } + + function f_testFunction(integer p_arg) runs on FunctionComp return integer { + + var integer v_result; + v_result:=p_arg*c_integer; + return v_result; + } + + testcase TC_Sem_060303_component_types_002() runs on TestCaseComp { + + var integer v_int:=2; + + if ( f_testFunction(v_int)==4 ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_060303_component_types_002()); + } + +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_001.ttcn new file mode 100644 index 0000000..666be7a --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.3.4, compatible but not strongly typed value in send operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The communication operations (see clause 22) send, receive, trigger, call, getcall, +// reply, getreply and raise and connection operations connect, map, disconnect and +// unmap (see clause 21.1) are exceptions to the weaker rule of type compatibility +// and require strong typing. The types of values or templates directly used as +// parameters to these operations shall also be explicitly defined in the associated +// port type definition. + +module NegSem_060304_compatibility_of_communication_operations_001 +{ + type port P message { + inout charstring; + } + + type component GeneralComp { + port P p; + } + + type charstring MyString; // synonym + + testcase TC_NegSem_060304_compatibility_of_communication_operations_001() runs on GeneralComp { + p.send(MyString:"abc"); + setverdict(pass); + } + + control { + execute(TC_NegSem_060304_compatibility_of_communication_operations_001()); + } +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_002.ttcn new file mode 100644 index 0000000..54b5a04 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_002.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.3.4, compatible but not strongly typed value in receive operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The communication operations (see clause 22) send, receive, trigger, call, getcall, +// reply, getreply and raise and connection operations connect, map, disconnect and +// unmap (see clause 21.1) are exceptions to the weaker rule of type compatibility +// and require strong typing. The types of values or templates directly used as +// parameters to these operations shall also be explicitly defined in the associated +// port type definition. + +module NegSem_060304_compatibility_of_communication_operations_002 +{ + type port P message { + inout charstring; + } + + type component GeneralComp { + port P p; + } + + type charstring MyString; // synonym + + testcase TC_NegSem_060304_compatibility_of_communication_operations_002() runs on GeneralComp { + p.send(charstring:"abc"); + alt { + []p.receive(MyString:?) {} + []p.receive {} // to avoid alt error in case the previous statement is incorrectly accepted + } + setverdict(pass); + } + + control { + execute(TC_NegSem_060304_compatibility_of_communication_operations_002()); + } +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_003.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_003.ttcn new file mode 100644 index 0000000..0d98a5c --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_003.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.3.4, compatible but not strongly typed value in raise operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The communication operations (see clause 22) send, receive, trigger, call, getcall, +// reply, getreply and raise and connection operations connect, map, disconnect and +// unmap (see clause 21.1) are exceptions to the weaker rule of type compatibility +// and require strong typing. The types of values or templates directly used as +// parameters to these operations shall also be explicitly defined in the associated +// port type definition. + +module NegSem_060304_compatibility_of_communication_operations_003 +{ + signature S() exception (charstring); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type charstring MyString; // synonym + + function f_mirror() runs on GeneralComp { + p.getcall(S:?); + p.raise(S, MyString:"abc"); + } + + testcase TC_NegSem_060304_compatibility_of_communication_operations_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_mirror()); + p.call(S:{}) { + [] p.catch {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_060304_compatibility_of_communication_operations_003()); + } +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_004.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_004.ttcn new file mode 100644 index 0000000..484f420 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_004.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.3.4, compatible but not strongly typed value in raise operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The communication operations (see clause 22) send, receive, trigger, call, getcall, +// reply, getreply and raise and connection operations connect, map, disconnect and +// unmap (see clause 21.1) are exceptions to the weaker rule of type compatibility +// and require strong typing. The types of values or templates directly used as +// parameters to these operations shall also be explicitly defined in the associated +// port type definition. + +module NegSem_060304_compatibility_of_communication_operations_004 +{ + signature S() exception (charstring); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type charstring MyString; // synonym + + function f_mirror() runs on GeneralComp { + p.getcall(S:?); + p.raise(S, "abc"); + } + + testcase TC_NegSem_060304_compatibility_of_communication_operations_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_mirror()); + p.call(S:{}) { + [] p.catch(S, MyString:?) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_060304_compatibility_of_communication_operations_003()); + } +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_005.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_005.ttcn new file mode 100644 index 0000000..4ff7f08 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060304_compatibility_of_communication_operations/NegSem_060304_compatibility_of_communication_operations_005.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:6.3.4, compatible but not strongly typed value in trigger operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The communication operations (see clause 22) send, receive, trigger, call, getcall, +// reply, getreply and raise and connection operations connect, map, disconnect and +// unmap (see clause 21.1) are exceptions to the weaker rule of type compatibility +// and require strong typing. The types of values or templates directly used as +// parameters to these operations shall also be explicitly defined in the associated +// port type definition. + +module NegSem_060304_compatibility_of_communication_operations_005 +{ + type port P message { + inout charstring; + } + + type component GeneralComp { + port P p; + } + + type charstring MyString; // synonym + + testcase TC_NegSem_060304_compatibility_of_communication_operations_005() runs on GeneralComp { + timer t := 2.0; + t.start; + p.send(charstring:"abc"); + alt { + []p.trigger(MyString:?) {} + []t.timeout {} // to avoid endless blocking in case the previous statement is incorrectly accepted + } + setverdict(pass); + } + + control { + execute(TC_NegSem_060304_compatibility_of_communication_operations_005()); + } +} diff --git a/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn b/core_language/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 0000000..2f918b6 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/NegSem_060305_compatibility_of_anytype_types_001.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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 ({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()); +} + +} + + +module NegSem_060305_compatibility_of_anytype_types_001_importB { + type integer I (0..2); + type anytype Atype ({I:=?},{integer:=?},{float:=?}); +} + +module NegSem_060305_compatibility_of_anytype_types_001_importC { + type integer I (0..2); + type float F; + type anytype Atype ({I:=?},{F:=?},{integer:=?}); + } \ No newline at end of file diff --git a/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_001.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_001.ttcn new file mode 100644 index 0000000..737d847 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:5.3.0.6, ensure that anytype types are only compatible with other anytype types. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/*The following requirement is tested: + * An anytype value "a" of anytype type "A" is compatible with anytype type "B" + * if the alternative selected in "a"is also contained in "B". +*/ + +module Sem_060305_compatibility_of_anytype_types_001 { + type integer I (0..9); + type charstring C; + type anytype Atype ({I:=?},{C:=?},{integer:=?}); + type anytype Btype ({float:=?},{I:=?}); + + type component GeneralComp { +} + + +testcase TC_Sem_060305_compatibility_of_anytype_types_001() runs on GeneralComp { + var Atype v_x; + var Btype v_y; + v_x.I := 8; + v_y.I := 8; + + + if (match(v_x,v_y)) { + setverdict(pass); + } + else { + setverdict(fail,v_x,v_y); + } + +} + +control { + execute(TC_Sem_060305_compatibility_of_anytype_types_001()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_002.ttcn b/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_002.ttcn new file mode 100644 index 0000000..6100bb2 --- /dev/null +++ b/core_language/06_types_and_values/0603_type_compatibility/060305_compatibility_of_anytype_types/Sem_060305_compatibility_of_anytype_types_002.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:5.3.0.6, ensure that anytype types are only compatible with other anytype types. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/*The following requirement is tested: + * An anytype value "a" of anytype type "A" is compatible with anytype type "B" + * if the alternative selected in "a"is also contained in "B". +*/ + +module Sem_060305_compatibility_of_anytype_types_002 { + type integer I (0..9); + type charstring C; + type anytype Atype ({I:=?},{C:=?},{integer:=?}); + type anytype Btype ({float:=?},{integer:=?}); + + type component GeneralComp { +} + + +testcase TC_Sem_060305_compatibility_of_anytype_types_002() runs on GeneralComp { + var Atype v_x; + var Btype v_y; + v_x.I := 8; + v_y.integer := 8; + + + if (match(v_x.I,8) and match(v_y.integer,8) and v_x != v_y) { + setverdict(pass); + } + else { + setverdict(fail,v_x,v_y); + } + +} + +control { + execute(TC_Sem_060305_compatibility_of_anytype_types_002()); +} + +} \ No newline at end of file diff --git a/core_language/06_types_and_values/0604_type_synonym/NOTES b/core_language/06_types_and_values/0604_type_synonym/NOTES new file mode 100644 index 0000000..2273c72 --- /dev/null +++ b/core_language/06_types_and_values/0604_type_synonym/NOTES @@ -0,0 +1 @@ +- NOTE: rules involving synonyms have already been tested as part of section 6.3. \ No newline at end of file diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NOTES b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NOTES new file mode 100644 index 0000000..41d4a64 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NOTES @@ -0,0 +1,2 @@ +- TODO: operator precedence not yet part of the tests. +- TODO: no negative tests. \ No newline at end of file diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_001.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_001.ttcn new file mode 100644 index 0000000..938ddc9 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_001.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that Arithmetic operators are for integer and float values + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_001() runs on GeneralComp { + var integer v_i := 20; + var boolean v_k :=true; + + var integer v_result := v_i*v_k; // not allowed int*boolean + + setverdict(pass); + + +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_002.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_002.ttcn new file mode 100644 index 0000000..1d7cab0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_002.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle same type of variables + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_002 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_002() runs on GeneralComp { + var integer v_i := 20; + var float v_k :=2.0E0; + + var integer v_result := v_i*v_k; // not allowed int*float + + setverdict(pass); + +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_003.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_003.ttcn new file mode 100644 index 0000000..82a2773 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_003.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that mod arithmetic operator can handle integer variables + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_003 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_003() runs on GeneralComp { + var float v_i := 2.0E1; + var float v_k :=2.0E0; + + var integer v_result := v_i mod v_k; // mod operator is only for integer type + + setverdict(pass); +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_004.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_004.ttcn new file mode 100644 index 0000000..e599af3 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_004.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that rem arithmetic operator can handle integer variables + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_004 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_004() runs on GeneralComp { + var float v_i := 2.0E1; + var float v_k :=2.0E0; + + var integer v_result := v_i rem v_k; // rem operator is only for integer type + + setverdict(pass); +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_008.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_008.ttcn new file mode 100644 index 0000000..ddb0714 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_008.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that in x mod y arithmetic operator y is non-zero positive number + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_008 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_008() runs on GeneralComp { + var integer v_i := 20; + var integer v_k :=0; + + var integer v_result := v_i mod v_k; // arithmetic operator mod with 0 is not allowed + + setverdict(pass); + +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_008()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_009.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_009.ttcn new file mode 100644 index 0000000..9428fd4 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_009.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that in x rem y arithmetic operator y is non-zero positive number + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_009 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_009() runs on GeneralComp { + var integer v_i := 20; + var integer v_k :=0; + + var integer v_result := v_i rem v_k; // arithmetic operator rem with 0 is not allowed + + setverdict(pass); + +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_009()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_010.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_010.ttcn new file mode 100644 index 0000000..dd1c41e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/NegSem_070101_ArithmeticOperators_010.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that in x rem y arithmetic operator y is non-zero positive number + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070101_ArithmeticOperators_010 { + +type component GeneralComp { +} + +testcase TC_NegSem_070101_ArithmeticOperators_010() runs on GeneralComp { + var integer v_i := 20; + var integer v_k :=4; + var integer v_l :=2; + + var integer v_result := v_i rem (v_k mod v_l); // arithmetic operator rem with 0 is not allowed + + setverdict(pass); + +} +control{ + execute(TC_NegSem_070101_ArithmeticOperators_010()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_001.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_001.ttcn new file mode 100644 index 0000000..02e9f22 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition of two integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_001() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_result := v_i + v_j; + + if (v_result == 12) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_002.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_002.ttcn new file mode 100644 index 0000000..f49895d --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_002.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition of multiple integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_002() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_k := 4; + var integer v_l := 6; + var integer v_result := v_i + v_j + v_k + v_l; + + if (v_result == 22) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_003.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_003.ttcn new file mode 100644 index 0000000..c27c85e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_003.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition of two integer variables is evaluated correctly when the expression contains a negative value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_003 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_003() runs on GeneralComp { + var integer v_i := -10; + var integer v_j := 2; + var integer v_result := v_i + v_j; + + if (v_result == -8) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_004.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_004.ttcn new file mode 100644 index 0000000..efe21d9 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_004.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the substraction of two integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_004 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_004() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_result := v_i - v_j; + + if (v_result == 8) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_005.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_005.ttcn new file mode 100644 index 0000000..625f929 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_005.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the substraction of multiple integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_005 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_005() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_k := 12; + var integer v_result := v_i - v_j - v_k; + + if (v_result == -4) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_005()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_006.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_006.ttcn new file mode 100644 index 0000000..a351ae9 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_006.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the multiplication of two integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_006 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_006() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_result := v_i * v_j; + + if (v_result == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_006()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_007.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_007.ttcn new file mode 100644 index 0000000..56e8f50 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_007.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the multiplication of multiple integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_007 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_007() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_k := 4; + var integer v_l := 3; + var integer v_result := v_i * v_j * v_k * v_l; + + if (v_result == 240) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_007()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_008.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_008.ttcn new file mode 100644 index 0000000..2e9832c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_008.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the division of two integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_008 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_008() runs on GeneralComp { + var integer v_i := 10; + var integer v_j := 2; + var integer v_result := v_i / v_j; + + if (v_result == 5) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_008()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_009.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_009.ttcn new file mode 100644 index 0000000..cbbf07b --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_009.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the division of multiple integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_009 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_009() runs on GeneralComp { + var integer v_i := 100; + var integer v_j := 4; + var integer v_k := 5; + var integer v_result := v_i / v_j / v_k; + + if (v_result == 5) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_009()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_010.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_010.ttcn new file mode 100644 index 0000000..d4d68f1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_010.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the modulo operator on integer variables is evaluated correctly when the remainder is zero. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_010 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_010() runs on GeneralComp { + var integer v_i := 4; + var integer v_result := v_i mod 2; + + if (v_result == 0) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_010()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_011.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_011.ttcn new file mode 100644 index 0000000..0d4e3e2 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_011.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the modulo operator on integer variables is evaluated correctly when the integer value is smaller than the modulo value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_011 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_011() runs on GeneralComp { + var integer v_i := 8; + var integer v_result := v_i mod 10; + + if (v_result == 8) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_011()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_012.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_012.ttcn new file mode 100644 index 0000000..42fbb64 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_012.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the modulo operator on integer variables is evaluated correctly when the integer value greater than the modulo value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_012 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_012() runs on GeneralComp { + var integer v_i := 12; + var integer v_result := v_i mod 10; + + if (v_result == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_012()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_013.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_013.ttcn new file mode 100644 index 0000000..b643eb5 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_013.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the modulo operator on integer variables is evaluated correctly when two consecutive modulo operators are applied. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_013 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_013() runs on GeneralComp { + var integer v_i := 11; + var integer v_result := (v_i mod 6) mod 3; + + if (v_result == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_013()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_014.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_014.ttcn new file mode 100644 index 0000000..21f8faf --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_014.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the modulo operator on integer variables is evaluated correctly when the operand is a negative integer. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_014 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_014() runs on GeneralComp { + var integer v_i := -2; + var integer v_result := (v_i mod 3); + + if (v_result == 1) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_014()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_015.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_015.ttcn new file mode 100644 index 0000000..45ca917 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_015.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the remainder operator on integer variables is evaluated correctly when the operand is a negative integer. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_015 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_015() runs on GeneralComp { + var integer v_i := -2; + var integer v_result := (v_i rem 3); + + if (v_result == -2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_015()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_016.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_016.ttcn new file mode 100644 index 0000000..08774c6 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_016.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the application of the remainder operator on integer variables is evaluated correctly when the operand is a negative integer. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_016 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_016() runs on GeneralComp { + var integer v_i := 2; + var integer v_result := (v_i rem 3); + + if (v_result == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_016()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_017.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_017.ttcn new file mode 100644 index 0000000..7906d9c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_017.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the consecutive application of the remainder operator and the modulo operator on integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_017 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_017() runs on GeneralComp { + var integer v_i := -2; + var integer v_result := (v_i rem 3) mod 3; + + if (v_result == 1) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_017()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_018.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_018.ttcn new file mode 100644 index 0000000..4ab047d --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_018.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that operator combinations and the modulo operator on integer variables is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_018 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_018() runs on GeneralComp { + var integer v_i := 100; + var integer v_result := (((((v_i mod 75)/5)*2)+10)-22) rem 3; + + if (v_result == -2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_018()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_019.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_019.ttcn new file mode 100644 index 0000000..6deffc7 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_019.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition operator works on float variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_019 { + +type component GeneralComp { +} + +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_070101_ArithmeticOperators_019() runs on GeneralComp { + var float v_i := 10.2; + var float v_j := 0.4; + var float v_result := v_i + v_j; + + if ( f_isFloatNear(v_result,10.6) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_019()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_020.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_020.ttcn new file mode 100644 index 0000000..a0632a0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_020.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the substraction operator works on float variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_020 { + +type component GeneralComp { +} + +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_070101_ArithmeticOperators_020() runs on GeneralComp { + var float v_i := 10.2; + var float v_j := 0.4; + var float v_result := v_i - v_j; + + if ( f_isFloatNear(v_result,9.8) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_020()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_021.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_021.ttcn new file mode 100644 index 0000000..66e8459 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_021.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the multiplication operator works on float variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_021 { + +type component GeneralComp { +} + +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_070101_ArithmeticOperators_021() runs on GeneralComp { + var float v_i := 10.2; + var float v_j := 0.4; + var float v_result := v_i * v_j; + + if ( f_isFloatNear(v_result,4.08) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_021()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_022.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_022.ttcn new file mode 100644 index 0000000..eac2c46 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_022.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the division operator works on float variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_022 { + +type component GeneralComp { +} + +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_070101_ArithmeticOperators_022() runs on GeneralComp { + var float v_i := 10.2; + var float v_j := 0.4; + var float v_result := v_i / v_j; + + if ( f_isFloatNear(v_result,25.5) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_022()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_023.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_023.ttcn new file mode 100644 index 0000000..ec0d968 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_023.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the combination of different operators works on float variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_023 { + +type component GeneralComp { +} + +/** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ +function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; +} + +testcase TC_Sem_070101_ArithmeticOperators_023() runs on GeneralComp { + var float v_i := 10.2; + var float v_result := (((v_i * 2.3) / 0.4)+0.45)-0.1; + + if ( f_isFloatNear(v_result,59.0) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_023()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_024.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_024.ttcn new file mode 100644 index 0000000..9fb1cdc --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_024.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the operator precedence is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_024 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_024() runs on GeneralComp { + var integer v_i := 4; + var integer v_j := 12; + var integer v_k := 18; + var integer v_l := 3; + + var integer v_result := v_i+v_j-v_k / v_l; + + if (v_result == 10) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_024()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_025.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_025.ttcn new file mode 100644 index 0000000..415bdd0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_025.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the operator precedence is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_025 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_025() runs on GeneralComp { + var integer v_i0 := 20; + var integer v_i1 := 16; + var integer v_i2 := 2; + var integer v_j := 4; + var integer v_k := 8; + + var integer v_result := v_i0 rem 3-v_j+v_i1/v_i2 mod 3*v_k; + + if (v_result == 14) { + setverdict(pass); + } else { + setverdict(fail); + } +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_025()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_026.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_026.ttcn new file mode 100644 index 0000000..b83bfcd --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_026.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the operator precedence is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_026 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_026() runs on GeneralComp { + var integer v_i0 := 40; + var integer v_i1 := 6; + var integer v_i2 := 3; + + var integer v_result := v_i0 rem v_i1 mod v_i2; // equal precendence, then left-right evalution + + if (v_result == 1) { + setverdict(pass); + } else { + setverdict(fail); + } +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_026()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_027.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_027.ttcn new file mode 100644 index 0000000..bc91c05 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_027.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_027 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_027() 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 + + if (v_result == infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_027()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_028.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_028.ttcn new file mode 100644 index 0000000..ce15482 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_028.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_028 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_028() 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 + + if (v_result == infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_028()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_029.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_029.ttcn new file mode 100644 index 0000000..a311acb --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_029.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_029 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_029() 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 + + if (v_result == infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_029()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_030.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_030.ttcn new file mode 100644 index 0000000..b24fb9b --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_030.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_030 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_030() 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 + + if (v_result == infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_030()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_031.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_031.ttcn new file mode 100644 index 0000000..8d552b3 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_031.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_031 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_031() 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 + + if (v_result == -infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_031()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_032.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_032.ttcn new file mode 100644 index 0000000..7536ad2 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_032.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_032 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_032() 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 + + if (v_result == -infinity) { setverdict(pass,"match") } + else { setverdict(fail, v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_032()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_033.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_033.ttcn new file mode 100644 index 0000000..c89005e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_033.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_033 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_033() 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 + + if (v_result == -infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_033()); +} + +} \ No newline at end of file diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_034.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_034.ttcn new file mode 100644 index 0000000..6a7f7d5 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_034.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_034 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_034() 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 + + if (v_result == -infinity) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_034()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_035.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_035.ttcn new file mode 100644 index 0000000..4418abd --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_035.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_035 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_035() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=2.0E0; + + var float v_result := v_i + v_k; // "+" arithmetic operator with NaN + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_035()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_036.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_036.ttcn new file mode 100644 index 0000000..33abd2d --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_036.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_036 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_036() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=2.0E0; + + var float v_result := v_i - v_k; // "-" arithmetic operator with NaN + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_036()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_037.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_037.ttcn new file mode 100644 index 0000000..54060ab --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_037.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_037 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_037() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=2.0E0; + + var float v_result := v_i * v_k; // "*" arithmetic operator with NaN + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_037()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_038.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_038.ttcn new file mode 100644 index 0000000..53bbe7f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_038.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_038 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_038() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=2.0E0; + + var float v_result := v_i / v_k; // "/" arithmetic operator with NaN + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_038()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_039.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_039.ttcn new file mode 100644 index 0000000..31a8ba7 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_039.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + + +module Sem_070101_ArithmeticOperators_039 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_039() runs on GeneralComp { + var float v_i := infinity; + var float v_k :=2.0E0; + + var float v_result := v_k / v_i; // Infinity special float as denominator + + if (v_result == 0.0) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_039()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_040.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_040.ttcn new file mode 100644 index 0000000..0d6e35c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_040.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + + +module Sem_070101_ArithmeticOperators_040 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_040() runs on GeneralComp { + var float v_i := -infinity; + var float v_k :=2.0E0; + + var float v_result := v_k / v_i; // -Infinity special float as denominator + + if (v_result == 0.0) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_040()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_041.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_041.ttcn new file mode 100644 index 0000000..adf0892 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_041.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_041 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_041() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=2.0E0; + + var float v_result := v_k / v_i; // NaN special float as denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_041()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_042.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_042.ttcn new file mode 100644 index 0000000..26739d7 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_042.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_042 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_042() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k :=not_a_number; + + var float v_result := v_k / v_i; // NaN special float as nominator and denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_042()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_043.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_043.ttcn new file mode 100644 index 0000000..ddb85e6 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_043.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_043 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_043() runs on GeneralComp { + var float v_i := infinity; + var float v_k := infinity; + + var float v_result := v_k / v_i; // infinity special float as nominator and denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_043()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_044.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_044.ttcn new file mode 100644 index 0000000..8950868 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_044.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_044 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_044() runs on GeneralComp { + var float v_i := -infinity; + var float v_k := -infinity; + + var float v_result := v_k / v_i; // -infinity special float as nominator and denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_044()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_045.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_045.ttcn new file mode 100644 index 0000000..9afc3db --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_045.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_045 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_045() runs on GeneralComp { + var float v_i := infinity; + var float v_k := -infinity; + + var float v_result := v_k / v_i; // -infinity special float as nominator and infinity special float as denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_045()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_046.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_046.ttcn new file mode 100644 index 0000000..7591138 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_046.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_046 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_046() runs on GeneralComp { + var float v_i := -infinity; + var float v_k := infinity; + + var float v_result := v_k / v_i; // infinity special float as nominator and -infinity special float as denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_046()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_047.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_047.ttcn new file mode 100644 index 0000000..9a88c14 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_047.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_047 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_047() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k := infinity; + + var float v_result := v_k / v_i; // infinity special float as nominator and NaN special float as denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_047()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_048.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_048.ttcn new file mode 100644 index 0000000..d98b537 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_048.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_048 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_048() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k := -infinity; + + var float v_result := v_k / v_i; // -infinity special float as nominator and NaN special float as denominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_048()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_049.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_049.ttcn new file mode 100644 index 0000000..726cc02 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_049.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_070101_ArithmeticOperators_049 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_049() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k := infinity; + + var float v_result := v_i / v_k; // infinity special float as denominator and NaN special float as nominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_049()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_050.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_050.ttcn new file mode 100644 index 0000000..030183a --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_050.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that arithmetic operators can handle special float values + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* 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_050 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_050() runs on GeneralComp { + var float v_i := not_a_number; + var float v_k := -infinity; + + var float v_result := v_i / v_k; // -infinity special float as denominator and NaN special float as nominator + + if (v_result == not_a_number) { setverdict(pass,"match") } + else { setverdict(fail,v_result) } + + +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_050()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn new file mode 100644 index 0000000..73ea6af --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_051.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equal to operator on address with value null is evaulated correctly + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_051 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_Sem_070101_ArithmeticOperators_051() runs on GeneralComp { + + var address My_address := null; + + + if (My_address == null) + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_051()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn new file mode 100644 index 0000000..9bf416f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_052.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not equal to operator on address with value null is evaulated correctly + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* 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 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_Sem_070101_ArithmeticOperators_052() runs on GeneralComp { + + var address My_address := 1; + + + if (My_address != null) + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_Sem_070101_ArithmeticOperators_052()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn new file mode 100644 index 0000000..70775fd --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Sem_070101_ArithmeticOperators_053.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 (updated by 521) + ** @version 0.0.1 + ** @purpose 1:7.1.1, verify that arithmetic operators can handle special float values according to the rules of IEEE 754 + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070101_ArithmeticOperators_053 { + +type component GeneralComp { +} + +testcase TC_Sem_070101_ArithmeticOperators_053() 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 allowed by IEEE 754 + + if (v_result == -infinity) { setverdict(pass); } + else { setverdict(fail); } +} +control{ + execute(TC_Sem_070101_ArithmeticOperators_053()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_001.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_001.ttcn new file mode 100644 index 0000000..db5a44c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_001.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition of two integers in a constant is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_001 { + +const integer c_result := 10 + 2; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_002.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_002.ttcn new file mode 100644 index 0000000..e9ea11c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_002.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the substraction of two integers in a constant is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_002 { + +const integer c_result := 10 - 2; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_003.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_003.ttcn new file mode 100644 index 0000000..e995a63 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_003.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the multiplication of two integers in a constant is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_003 { + +const integer c_result := 10 * 2; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_004.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_004.ttcn new file mode 100644 index 0000000..57de788 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_004.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the division of two integers in a constant is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_004 { + +const integer c_result := 10 / 3; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_005.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_005.ttcn new file mode 100644 index 0000000..7842643 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_005.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the modulo operator on two integers is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_005 { + +const integer c_result := 10 mod 3; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_006.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_006.ttcn new file mode 100644 index 0000000..8478acf --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_006.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the remainder operator on two integers is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_006 { + +const integer c_result := -2 rem 3; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_007.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_007.ttcn new file mode 100644 index 0000000..93d33e1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_007.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that operator combinations on integers is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_007 { + +const integer c_result := (((((100 mod 75)/5)*2)+10)-22) rem 3; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_008.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_008.ttcn new file mode 100644 index 0000000..bd3e90f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_008.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the addition operator on float constants is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_008 { + +const float c_result := 10.2 + 0.4; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_009.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_009.ttcn new file mode 100644 index 0000000..245665a --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_009.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the substraction operator on float constants is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_009 { + +const float c_result := 10.2 - 0.4; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_010.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_010.ttcn new file mode 100644 index 0000000..5430cab --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_010.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the multiplication operator on float constants is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_010 { + +const float c_result := 10.2 * 0.4; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_011.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_011.ttcn new file mode 100644 index 0000000..c5b5d8c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_011.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that the division operator on float constants is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_011 { + +const float c_result := 10.2 / 0.4; + +} diff --git a/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_012.ttcn b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_012.ttcn new file mode 100644 index 0000000..0ef5607 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070101_arithmetic_operators/Syn_070101_ArithmeticOperators_012.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.1, Ensure that a combination of operators on float constants is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_070101_ArithmeticOperators_012 { + const float c_i := 1.5; + const float c_result := (((c_i * 2.3) / 0.4)+0.45)-0.1; + +} diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_001.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_001.ttcn new file mode 100644 index 0000000..7617d08 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on bitstrings is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070102_ListOperator_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070102_ListOperator_001() runs on GeneralComp { + var bitstring v_result := '1111'B & '0000'B & '1111'B; + if (v_result == '111100001111'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_002.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_002.ttcn new file mode 100644 index 0000000..0721f16 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_002.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on charstrings is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070102_ListOperator_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070102_ListOperator_002() runs on GeneralComp { + var charstring v_result := "Hello" & " " & "World!"; + if (v_result == "Hello World!") { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_002()); +} + +} \ No newline at end of file diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_003.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_003.ttcn new file mode 100644 index 0000000..a861acb --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_003.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on record of is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_070102_ListOperator_003 { + +type component GeneralComp { +} + +type record of integer IntegerArray; + +testcase TC_Sem_070102_ListOperator_003() runs on GeneralComp { + var IntegerArray v_i := {0, 1, 2}; + var IntegerArray v_j := {3, 4, 5}; + + var IntegerArray v_result := v_i & v_j; + var IntegerArray v_reference := {0, 1, 2, 3, 4, 5}; + if (v_result == v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_004.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_004.ttcn new file mode 100644 index 0000000..9dd0bd2 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_004.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on set of is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_070102_ListOperator_004 { + +type component GeneralComp { +} + +type set of integer IntegerSet; + +testcase TC_Sem_070102_ListOperator_004() runs on GeneralComp { + var IntegerSet v_i := {0, 1, 6}; + var IntegerSet v_j := {2, 4, 7}; + + var IntegerSet v_result := v_i & v_j; + var IntegerSet v_reference := {0, 1, 6, 2, 4, 7}; + if (v_result == v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_005.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_005.ttcn new file mode 100644 index 0000000..9f05dd1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_005.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on arrays is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070102_ListOperator_005 { + +type component GeneralComp { +} + +type integer MyArrayType[3]; +type integer MyArrayTypeSix[6]; + +testcase TC_Sem_070102_ListOperator_005() runs on GeneralComp { + var MyArrayType v_i := {0, 1, 6}; + var MyArrayType v_j := {2, 4, 7}; + + var MyArrayTypeSix v_result := v_i & v_j; + var MyArrayTypeSix v_reference := {0, 1, 6, 2, 4, 7}; //order of elements is concatenated order + if (v_result == v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_005()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_006.ttcn b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_006.ttcn new file mode 100644 index 0000000..5b76048 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070102_list_operator/Sem_070102_ListOperator_006.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.2, Ensure that the list operator on record of is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_070102_ListOperator_006 { + +type component GeneralComp { +} + +type record of integer IntegerArray; + +testcase TC_Sem_070102_ListOperator_006() runs on GeneralComp { + var IntegerArray v_i := {0, 1, 2} & {3, 4, 5} & {6}; + + var IntegerArray v_reference := {0, 1, 2, 3, 4, 5, 6}; + + if (v_i == v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070102_ListOperator_006()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NOTES b/core_language/07_expressions/0701_operators/070103_relational_operators/NOTES new file mode 100644 index 0000000..923ef02 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NOTES @@ -0,0 +1,4 @@ +TODO: add == and != tests for default (altstep activation variables). Try the following varieties, +based on 20.5 test cases: + if (v_def == null) ... + if (v_def1 == v_def2) ... \ No newline at end of file diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_001.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_001.ttcn new file mode 100644 index 0000000..97cf6f1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_001.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_001 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_NegSem_070103_RelationalOperators_001() runs on GeneralComp { + const IntegerSet c_set := {a1:=omit,a2:=2,a3:=omit}; + + if ( c_set.a1 == omit ) { //omit is neither a value nor a field reference + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_002.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_002.ttcn new file mode 100644 index 0000000..633d46e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_002.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_002 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_002() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5,a6:=omit}; + + if ( c_set1 & c_set2 == c_large ) { //It is intentionally forbidden to concatenate record and set values + setverdict(pass); + } + +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_003.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_003.ttcn new file mode 100644 index 0000000..039c391 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_003.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ +//on hold till resolution of CR6707 + +module NegSem_070103_RelationalOperators_003 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_003() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5,a6:=6}; + + if ( c_set1 & c_set2 != c_large ) { //It is intentionally forbidden to concatenate record and set values + setverdict(pass); + } + +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_004.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_004.ttcn new file mode 100644 index 0000000..efca48f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_004.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ +//on hold till resolution of CR6707 + +module NegSem_070103_RelationalOperators_004 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_004() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5}; + + if ( c_set1 & c_set2 != c_large ) { //It is intentionally forbidden to concatenate record and set values + setverdict(pass); + } + +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_005.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_005.ttcn new file mode 100644 index 0000000..c156a22 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_005.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not equal to operator on address can not be evaluated if value is uninitialized. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_005 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_NegSem_070103_RelationalOperators_005() runs on GeneralComp { + + var address My_address; //uninitialized address type value + + + if (My_address != null) //error + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_005()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_006.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_006.ttcn new file mode 100644 index 0000000..3196208 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_006.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that concatenation mismatch is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_006 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_006() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5,a6:=omit}; + + if ( c_set1 & c_set2 == c_large ) { + setverdict(fail); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_006()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_007.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_007.ttcn new file mode 100644 index 0000000..0888a4a --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_007.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that concatenation mismatch is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_007 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_007() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5,a6:=6}; + + if ( c_set1 & c_set2 != c_large ) { //mismatching in a6 + setverdict(fail); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_007()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_008.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_008.ttcn new file mode 100644 index 0000000..15efdf0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSem_070103_RelationalOperators_008.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_070103_RelationalOperators_008 { + +type component GeneralComp { +} + + type set IntegerSet1 { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type set IntegerSet2 { + integer a4 optional, + integer a5 optional, + integer a6 optional + }; + + type set LargeSet { + integer a1 optional, + integer a2 optional, + integer a3 optional, + integer a4 optional, + integer a5 optional + }; + + +testcase TC_NegSem_070103_RelationalOperators_008() runs on GeneralComp { + const IntegerSet1 c_set1 := {a1:=0,a2:=omit,a3:=2}; + const IntegerSet2 c_set2 := {a4:=3,a5:=5,a6:=omit}; + const LargeSet c_large := {a1:=0,a2:=omit,a3:=2,a4:=3,a5:=5}; + + if ( c_set1 & c_set2 != c_large ) { //the two expressions are not equal because of mismatching lengths + setverdict(fail); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_070103_RelationalOperators_008()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_001.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_001.ttcn new file mode 100644 index 0000000..a074aca --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater operator on address can not be evaluated. + ** @verdict pass reject, noexecution + *****************************************************************/ + +module NegSyn_070103_RelationalOperators_001 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_NegSyn_070103_RelationalOperators_001() runs on GeneralComp { + + var address My_address :=-1; + + + if (My_address > null) //error, not allowed + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_NegSyn_070103_RelationalOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_002.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_002.ttcn new file mode 100644 index 0000000..ce64aeb --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less operator on address can not be evaluated. + ** @verdict pass reject, noexecution + *****************************************************************/ + +module NegSyn_070103_RelationalOperators_002 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_NegSyn_070103_RelationalOperators_002() runs on GeneralComp { + + var address My_address :=-1; + + //error, not allowed + if (My_address < null) + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_NegSyn_070103_RelationalOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_003.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_003.ttcn new file mode 100644 index 0000000..7687b01 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_003.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less or equal to operator on address can not be evaluated. + ** @verdict pass reject, noexecution + *****************************************************************/ + +module NegSyn_070103_RelationalOperators_003 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_NegSyn_070103_RelationalOperators_003() runs on GeneralComp { + + var address My_address :=-1; + + //error, not allowed + if (My_address <= null) + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_NegSyn_070103_RelationalOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_004.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_004.ttcn new file mode 100644 index 0000000..89f5509 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/NegSyn_070103_RelationalOperators_004.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater or equal to operator on address can not be evaluated. + ** @verdict pass reject, noexecution + *****************************************************************/ + +module NegSyn_070103_RelationalOperators_004 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_NegSyn_070103_RelationalOperators_004() runs on GeneralComp { + + var address My_address :=-1; + + //error, not allowed + if (My_address >= null) + { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_NegSyn_070103_RelationalOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_001.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_001.ttcn new file mode 100644 index 0000000..07b567f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_001.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on integers is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_001() runs on GeneralComp { + if (2 == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_002.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_002.ttcn new file mode 100644 index 0000000..20459dd --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_002.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on floats is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_002() runs on GeneralComp { + if (2.0 == 2.0) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_003.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_003.ttcn new file mode 100644 index 0000000..889f221 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_003.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on enumerations is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_003 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_003() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_reference := e_monday; + + if (v_first == v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_004.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_004.ttcn new file mode 100644 index 0000000..41c42d1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_004.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than operator on integers is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_004 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_004() runs on GeneralComp { + if (2 < 3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_005.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_005.ttcn new file mode 100644 index 0000000..39f763f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_005.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than operator on floats is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_005 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_005() runs on GeneralComp { + if (2.3 < 2.452) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_005()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_006.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_006.ttcn new file mode 100644 index 0000000..0c41293 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_006.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than operator on enumerations is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_006 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_006() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_tuesday; + + if (v_first < v_second) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_006()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_007.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_007.ttcn new file mode 100644 index 0000000..f7f0bc4 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_007.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on integers is evaluated correctly with differing values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_007 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_007() runs on GeneralComp { + if (2 <= 3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_007()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_008.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_008.ttcn new file mode 100644 index 0000000..8b892f4 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_008.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on integers is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_008 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_008() runs on GeneralComp { + if (2 <= 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_008()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_009.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_009.ttcn new file mode 100644 index 0000000..6fd8392 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_009.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on floats is evaluated correctly with differing values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_009 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_009() runs on GeneralComp { + if (2.3 <= 3.2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_009()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_010.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_010.ttcn new file mode 100644 index 0000000..05d7a30 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_010.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on floats is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_010 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_010() runs on GeneralComp { + if (2.3 <= 2.3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_010()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_011.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_011.ttcn new file mode 100644 index 0000000..35f5266 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_011.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @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 + *****************************************************************/ + +module Sem_070103_RelationalOperators_011 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_011() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_tuesday; + + if (v_first <= v_second) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_011()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_012.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_012.ttcn new file mode 100644 index 0000000..701d3dc --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_012.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than or equal to operator on enumerations is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_012 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_012() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_monday; + + if (v_first <= v_second) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_012()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_013.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_013.ttcn new file mode 100644 index 0000000..599dd6c --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_013.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than operator on integers is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_013 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_013() runs on GeneralComp { + if (3 > 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_013()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_014.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_014.ttcn new file mode 100644 index 0000000..e1d7302 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_014.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than operator on floats is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_014 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_014() runs on GeneralComp { + if (2.452 > 2.3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_014()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_015.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_015.ttcn new file mode 100644 index 0000000..a148c7a --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_015.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the less than operator on enumerations is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_015 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_015() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_tuesday; + + if (v_second > v_first) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_015()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_016.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_016.ttcn new file mode 100644 index 0000000..2593338 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_016.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than or equal to operator on integers is evaluated correctly with differing values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_016 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_016() runs on GeneralComp { + if (3 >= 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_016()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_017.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_017.ttcn new file mode 100644 index 0000000..862c35f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_017.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than or equal to operator on integers is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_017 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_017() runs on GeneralComp { + if (2 >= 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_017()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_018.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_018.ttcn new file mode 100644 index 0000000..9e96fcf --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_018.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than or equal to operator on floats is evaluated correctly with differing values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_018 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_018() runs on GeneralComp { + if (3.2 >= 2.3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_018()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_019.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_019.ttcn new file mode 100644 index 0000000..c10df6b --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_019.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than or equal to operator on floats is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_019 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_019() runs on GeneralComp { + if (2.3 >= 2.3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_019()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_020.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_020.ttcn new file mode 100644 index 0000000..5a2532f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_020.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @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 + *****************************************************************/ + +module Sem_070103_RelationalOperators_020 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_020() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_tuesday; + + if (v_second >= v_first) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_020()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_021.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_021.ttcn new file mode 100644 index 0000000..25d6790 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_021.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the greater than or equal to operator on enumerations is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_021 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_021() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_second := e_monday; + + if (v_first >= v_second) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_021()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_022.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_022.ttcn new file mode 100644 index 0000000..a86edc7 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_022.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not equals operator on integers is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_022 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_022() runs on GeneralComp { + if (2 != 3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_022()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_023.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_023.ttcn new file mode 100644 index 0000000..c3adfc2 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_023.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not equals operator on floats is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_023 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_023() runs on GeneralComp { + if (2.12 != 2.3) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_023()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_024.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_024.ttcn new file mode 100644 index 0000000..3e913e1 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_024.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not equals operator on enumerations is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_024 { + +type component GeneralComp { +} + +type enumerated MyEnumType { + e_monday, e_tuesday, e_wednesday, e_thursday, e_friday +}; + +testcase TC_Sem_070103_RelationalOperators_024() runs on GeneralComp { + var MyEnumType v_first := e_monday; + var MyEnumType v_reference := e_tuesday; + + if (v_first != v_reference) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_024()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_025.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_025.ttcn new file mode 100644 index 0000000..03a1001 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_025.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on sets is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_025 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_025() runs on GeneralComp { + const IntegerSet c_set := {a1:=0,a2:=omit,a3:=2}; + + if ( { a3:=2, a2:=omit, a1:=0 } == c_set ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_025()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_026.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_026.ttcn new file mode 100644 index 0000000..93186f0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_026.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_026 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_026() runs on GeneralComp { + var IntegerSet v_set := {a1:=0,a2:=omit,a3:=2}; + + if ( v_set == { a1:=0, a2:=omit, a3:=2 } ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_026()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_030.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_030.ttcn new file mode 100644 index 0000000..bb90c4b --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_030.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_030 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_030() runs on GeneralComp { + const IntegerSet c_set := {a1:=1,a2:=omit,a3:=1}; + + if ( c_set.a1 == c_set.a3 ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_030()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_031.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_031.ttcn new file mode 100644 index 0000000..e68a671 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_031.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_031 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_031() runs on GeneralComp { + const IntegerSet c_set := {a1:=omit,a2:=2,a3:=omit}; + + if ( c_set.a1 == c_set.a3 ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_031()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_032.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_032.ttcn new file mode 100644 index 0000000..72db43f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_032.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_032 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_032() runs on GeneralComp { + const IntegerSet c_set := {a1:=omit,a2:=2,a3:=omit}; + + if ( c_set.a2 == 2 ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_032()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_033.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_033.ttcn new file mode 100644 index 0000000..7dda1b0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_033.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_033 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_033() runs on GeneralComp { + const IntegerSet c_set := {a1:=omit,a2:=2,a3:=omit}; + + if ( c_set.a2 != c_set.a3 ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_033()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_034.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_034.ttcn new file mode 100644 index 0000000..f40607f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_034.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the equals operator on records is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_034 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_070103_RelationalOperators_034() runs on GeneralComp { + const IntegerSet c_set := {a1:=omit,a2:=2,a3:=omit}; + + if ( c_set.a2 == 1 ) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_034()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_035.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_035.ttcn new file mode 100644 index 0000000..04807fe --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_035.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the eqaul to operator on address is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/*The address type is allowed for the equality (==) and non-equality (!=) operators, +independent of its actual type, but when its actual type differs from the types specified above, it can be compared to the literal special value null only. +*/ + +module Sem_070103_RelationalOperators_035 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_Sem_070103_RelationalOperators_035() runs on GeneralComp { + + var address My_address:=null; + + + if (My_address == null) { + setverdict(pass,My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_035()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_036.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_036.ttcn new file mode 100644 index 0000000..c14a1be --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_036.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the eqaul to operator on address is evaluated correctly with equal values. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/*The address type is allowed for the equality (==) and non-equality (!=) operators, independent of its actual type, but when its actual type differs from the types specified above, it can be compared to the literal special value null only.*/ + +module Sem_070103_RelationalOperators_036 { + +type component GeneralComp { +} + +type integer address; + +testcase TC_Sem_070103_RelationalOperators_036() runs on GeneralComp { + + var address My_address:=2; + + + if (My_address == 2) { + setverdict(pass,My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_036()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_037.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_037.ttcn new file mode 100644 index 0000000..b680ea8 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_037.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that the not eqaul to operator on record type address is evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/*The address type is allowed for the equality (==) and non-equality (!=) operators, independent of its actual type, but when its actual type differs from the types specified above, it can be compared to the literal special value null only.*/ + +module Sem_070103_RelationalOperators_037 { + +type component GeneralComp { +} + +type record Myaddress_type { + integer field1, + float field2 +} + +type Myaddress_type address; + +testcase TC_Sem_070103_RelationalOperators_037() runs on GeneralComp { + + var address My_address:=null; + + + if (My_address == null) { + setverdict(pass, My_address); + } else { + setverdict(fail,My_address); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_037()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_038.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_038.ttcn new file mode 100644 index 0000000..baf88f4 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_038.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that less than operator evaulates correctly infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_038 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_038() runs on GeneralComp { + + var float My_val:= 100.0; + + + if (My_val < infinity) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_038()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_039.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_039.ttcn new file mode 100644 index 0000000..05d645f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_039.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that less than or equal to operator evaulates correctly infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_039 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_039() runs on GeneralComp { + + var float My_val:= 100.0; + + + if (My_val <= infinity) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_039()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_040.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_040.ttcn new file mode 100644 index 0000000..cfba142 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_040.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that greather than operator evaulates correctly -infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_040 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_040() runs on GeneralComp { + + var float My_val:= 1.0; + + + if (-infinity < My_val) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_040()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_041.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_041.ttcn new file mode 100644 index 0000000..96c149d --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_041.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that greather than or equal to operator evaulates correctly -infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_041 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_041() runs on GeneralComp { + + var float My_val:= 1.0; + + + if (-infinity <= My_val) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_041()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_042.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_042.ttcn new file mode 100644 index 0000000..d51bf0f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_042.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that equal to operator evaulates correctly -infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_042 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_042() runs on GeneralComp { + + var float My_val := -1.0 * infinity; // My_val= -infinity + + if (-infinity == My_val) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_042()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_043.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_043.ttcn new file mode 100644 index 0000000..162ff1f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_043.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that equal to operator evaulates correctly infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_043 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_043() runs on GeneralComp { + + var float My_val := -1.0 * -infinity; // My_val= infinity + + if (infinity == My_val) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_043()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_044.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_044.ttcn new file mode 100644 index 0000000..c29894e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_044.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that not equal to operator evaulates correctly infinity special float + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_044 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_044() runs on GeneralComp { + + var float My_val := 1.0 * -infinity; // My_val= -infinity + + if (infinity != My_val) { + setverdict(pass, My_val); + } else { + setverdict(fail, My_val); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_044()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn new file mode 100644 index 0000000..8069aaf --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_045.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that NaN special float is evaulated correctly in a relation. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_045 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_045() runs on GeneralComp { + + var float My_val := 1.0; + + if (My_val < not_a_number) { + setverdict(pass, My_val); + } else { + setverdict(fail, My_val); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_045()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn new file mode 100644 index 0000000..22bcdeb --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_046.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that NaN special float is evaulated correctly in a relation. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_046 { + +type component GeneralComp { +} + + + +testcase TC_Sem_070103_RelationalOperators_046() runs on GeneralComp { + + + if (infinity < not_a_number) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_046()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn new file mode 100644 index 0000000..19c026b --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_047.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7.1.3, Ensure that infinity special float is evaulated correctly in a relation. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070103_RelationalOperators_047 { + +type component GeneralComp { +} + +testcase TC_Sem_070103_RelationalOperators_047() runs on GeneralComp { + + + if (-infinity < infinity) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070103_RelationalOperators_047()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn new file mode 100644 index 0000000..b734917 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_048.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn new file mode 100644 index 0000000..7645a07 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_049.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn new file mode 100644 index 0000000..c22d5ea --- /dev/null +++ b/core_language/07_expressions/0701_operators/070103_relational_operators/Sem_070103_RelationalOperators_050.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 521 + ** @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/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn b/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn new file mode 100644 index 0000000..5838c76 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.4, Ensure that the boolean operator supports negation. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070104_LogicalOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070104_LogicalOperators_001() runs on GeneralComp { + var boolean v_test := true; + v_test := not v_test; + + if (v_test == false) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070104_LogicalOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn b/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn new file mode 100644 index 0000000..e2704de --- /dev/null +++ b/core_language/07_expressions/0701_operators/070104_logical_operators/Sem_070104_LogicalOperators_002.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.4, Ensure that the the and operator with true and false as operands work on boolean variables. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070104_LogicalOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070104_LogicalOperators_002() runs on GeneralComp { + var boolean v_first := true; + var boolean v_second := false; + + var boolean v_result := v_first and v_second; + + if (v_result == false) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070104_LogicalOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn b/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn new file mode 100644 index 0000000..1c3f37f --- /dev/null +++ b/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.5, Ensure that the bitwise negation operator works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070105_BitwiseOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070105_BitwiseOperators_001() runs on GeneralComp { + var bitstring v_test := '1'B; + var bitstring v_result := not4b v_test; + + if (v_result == '0'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070105_BitwiseOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_002.ttcn b/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_002.ttcn new file mode 100644 index 0000000..c18245e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070105_bitwise_operators/Sem_070105_BitwiseOperators_002.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.5, Ensure that the bitwise negation operator works as expected on hexstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070105_BitwiseOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070105_BitwiseOperators_002() runs on GeneralComp { + var hexstring v_test := '1A5'H; + var hexstring v_result := not4b v_test; + + if (v_result == 'E5A'H) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070105_BitwiseOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_001.ttcn b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_001.ttcn new file mode 100644 index 0000000..000f132 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.6, Ensure that the shift left operator works as expected on bitstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070106_ShiftOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070106_ShiftOperators_001() runs on GeneralComp { + var bitstring v_test := '111001'B; + var bitstring v_result := v_test << 2; + + if (v_result == '100100'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070106_ShiftOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_002.ttcn b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_002.ttcn new file mode 100644 index 0000000..989e498 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_002.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.6, Ensure that the shift left operator works as expected on hexstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070106_ShiftOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070106_ShiftOperators_002() runs on GeneralComp { + var hexstring v_test := '12345'H; + var hexstring v_result := v_test << 2; + + if (v_result == '34500'H) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070106_ShiftOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_003.ttcn b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_003.ttcn new file mode 100644 index 0000000..7e08e2e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_003.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.6, Ensure that the shift right operator works as expected on bitstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070106_ShiftOperators_003 { + +type component GeneralComp { +} + +testcase TC_Sem_070106_ShiftOperators_003() runs on GeneralComp { + var bitstring v_test := '111001'B; + var bitstring v_result := v_test >> 2; + + if (v_result == '001110'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070106_ShiftOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_004.ttcn b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_004.ttcn new file mode 100644 index 0000000..5637fa0 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070106_shift_operators/Sem_070106_ShiftOperators_004.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.6, Ensure that the shift right operator works as expected on hexstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070106_ShiftOperators_004 { + +type component GeneralComp { +} + +testcase TC_Sem_070106_ShiftOperators_004() runs on GeneralComp { + var hexstring v_test := '12345'H; + var hexstring v_result := v_test >> 2; + + if (v_result == '00123'H) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070106_ShiftOperators_004()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_001.ttcn b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_001.ttcn new file mode 100644 index 0000000..5e50c2d --- /dev/null +++ b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.7, Ensure that the rotate left operator works as expected on bitstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070107_RotateOperators_001 { + +type component GeneralComp { +} + +testcase TC_Sem_070107_RotateOperators_001() runs on GeneralComp { + var bitstring v_test := '101001'B; + var bitstring v_result := v_test <@ 2; + + if (v_result == '100110'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070107_RotateOperators_001()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_002.ttcn b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_002.ttcn new file mode 100644 index 0000000..ba9edad --- /dev/null +++ b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_002.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.7, Ensure that the rotate left operator works as expected on hexstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070107_RotateOperators_002 { + +type component GeneralComp { +} + +testcase TC_Sem_070107_RotateOperators_002() runs on GeneralComp { + var hexstring v_test := '12345'H; + var hexstring v_result := v_test <@ 2; + + if (v_result == '34512'H) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070107_RotateOperators_002()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_003.ttcn b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_003.ttcn new file mode 100644 index 0000000..76f123e --- /dev/null +++ b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_003.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.7, Ensure that the rotate right operator works as expected on bitstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070107_RotateOperators_003 { + +type component GeneralComp { +} + +testcase TC_Sem_070107_RotateOperators_003() runs on GeneralComp { + var bitstring v_test := '100001'B; + var bitstring v_result := v_test @> 2; + + if (v_result == '011000'B) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070107_RotateOperators_003()); +} + +} diff --git a/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_004.ttcn b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_004.ttcn new file mode 100644 index 0000000..776cd30 --- /dev/null +++ b/core_language/07_expressions/0701_operators/070107_rotate_operators/Sem_070107_RotateOperators_004.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.1.7, Ensure that the rotate right operator works as expected on hexstrings. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_070107_RotateOperators_004 { + +type component GeneralComp { +} + +testcase TC_Sem_070107_RotateOperators_004() runs on GeneralComp { + var hexstring v_test := '12345'H; + var hexstring v_result := v_test @> 2; + + if (v_result == '45123'H) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_070107_RotateOperators_004()); +} + +} diff --git a/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_001.ttcn b/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_001.ttcn new file mode 100644 index 0000000..1b69528 --- /dev/null +++ b/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.2, Ensure that the IUT correctly handles field referencing + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_0702_FieldReferencesAndListElements_001 { + +type component GeneralComp { +} + +type record MyRecord1 { + integer field1, + charstring field2 +} + +testcase TC_Sem_0702_FieldReferencesAndListElements_001() runs on GeneralComp { + var MyRecord1 v_test := {1, "Hello World!"}; + + if ( match(v_test, {1, "Hello World!"})) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0702_FieldReferencesAndListElements_001()); +} + +} diff --git a/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_002.ttcn b/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_002.ttcn new file mode 100644 index 0000000..ac1921e --- /dev/null +++ b/core_language/07_expressions/0702_field_references_and_list_elements/Sem_0702_FieldReferencesAndListElements_002.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:7.2, Ensure that the IUT correctly handles field referencing + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_0702_FieldReferencesAndListElements_002 { + +type component GeneralComp { +} + +type record of integer IntegerArray; + +testcase TC_Sem_0702_FieldReferencesAndListElements_002() runs on GeneralComp { + var IntegerArray v_test := {20, 41, 12}; + + if ( match(v_test, {20, 41, 12}) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0702_FieldReferencesAndListElements_002()); +} + +} diff --git a/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_001.ttcn b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_001.ttcn new file mode 100644 index 0000000..f15c590 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, function without return clause in expression + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Functions used in expressions shall have a return clause. + +module NegSem_07_toplevel_001 +{ + type component GeneralComp { + } + + function f() + { + var integer v_num := 1; + } + + testcase TC_NegSem_07_toplevel_001() runs on GeneralComp { + var integer v_num := 3 * f(); + setverdict(pass); + } + + control { + execute(TC_NegSem_07_toplevel_001()); + } +} diff --git a/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_002.ttcn b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_002.ttcn new file mode 100644 index 0000000..a5be5bc --- /dev/null +++ b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, template used as expression operand + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The operands of the operators used in an expression shall be values and their root +// types shall be the types specified for the appropriate operator in the subsequent +// clauses. + +module NegSem_07_toplevel_002 +{ + type component GeneralComp { + } + + function f() + { + var integer p_num := 1; + } + + testcase TC_NegSem_07_toplevel_002() runs on GeneralComp { + var template(value) integer vm_num := 3; + var integer p_num := 3 * vm_num; + setverdict(pass); + } + + control { + execute(TC_NegSem_07_toplevel_002()); + } +} diff --git a/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_003.ttcn b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_003.ttcn new file mode 100644 index 0000000..57450f1 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_003.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, uninitialized value in an expression + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// At the point, when an expression is evaluated, the evaluated values of the +// operands used in expressions shall be completely initialized except where +// explicitly stated otherwise in the specific clause of the operator. + +module NegSem_07_toplevel_003 +{ + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + testcase TC_NegSem_07_toplevel_003() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + if (10 + v_rec.field2 != -1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_07_toplevel_003()); + } +} diff --git a/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_004.ttcn b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_004.ttcn new file mode 100644 index 0000000..86d1c9c --- /dev/null +++ b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, partially initialized value in an expression + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// At the point, when an expression is evaluated, the evaluated values of the +// operands used in expressions shall be completely initialized except where +// explicitly stated otherwise in the specific clause of the operator. + +module NegSem_07_toplevel_004 +{ + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + testcase TC_NegSem_07_toplevel_004() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + if (not match(v_rec, { 20, 6 })) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_07_toplevel_004()); + } +} diff --git a/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_005.ttcn b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_005.ttcn new file mode 100644 index 0000000..e491374 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/NegSem_07_toplevel_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, null value in an expression + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// 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 NegSem_07_toplevel_005 +{ + type component GeneralComp { + } + + type integer address; + + testcase TC_NegSem_07_toplevel_005() runs on GeneralComp { + var address v_addr := null; + if (10 + v_addr != -1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_07_toplevel_005()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_001.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_001.ttcn new file mode 100644 index 0000000..6ba65f7 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, expression composed of several expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Expressions may be built from other (simple) expressions. + +module Sem_07_toplevel_001 +{ + type component GeneralComp { + } + + function f() return integer + { + return 5; + } + + testcase TC_Sem_07_toplevel_001() runs on GeneralComp { + var integer v_num := 3; + var integer v_res := -v_num + f() * 2 - 3; + if (v_res == 4) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_001()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn new file mode 100644 index 0000000..2a3b474 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of array type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Compound expressions are used for expressions of array, record, record of and +// set of types. + +module Sem_07_toplevel_002 +{ + type component GeneralComp { + } + + testcase TC_Sem_07_toplevel_002() runs on GeneralComp { + var integer v_arr[2]; + v_arr[0] := 1; + v_arr[1] := 2; + if (v_arr == { 1, 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_002()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn new file mode 100644 index 0000000..910f545 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_003.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of record type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Compound expressions are used for expressions of array, record, record of and +// set of types. + +module Sem_07_toplevel_003 +{ + type component GeneralComp { + } + + type record R { + integer field1, + charstring field2 optional + } + + testcase TC_Sem_07_toplevel_003() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + v_rec.field2 := omit; + if (v_rec == { field1 := 1, field2 := omit }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_003()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn new file mode 100644 index 0000000..415a192 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_004.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of record-of type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Compound expressions are used for expressions of array, record, record of and +// set of types. + +module Sem_07_toplevel_004 +{ + type component GeneralComp { + } + + type record of integer RI; + + testcase TC_Sem_07_toplevel_004() runs on GeneralComp { + var RI v_rec; + v_rec[0] := 1; + v_rec[1] := 2; + if (v_rec == { 1, 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_004()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn new file mode 100644 index 0000000..1021e83 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_005.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of set-of type + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Compound expressions are used for expressions of array, record, record of and +// set of types. + +module Sem_07_toplevel_005 +{ + type component GeneralComp { + } + + type set of integer SI; + + testcase TC_Sem_07_toplevel_005() runs on GeneralComp { + var SI v_set; + v_set[0] := 1; + v_set[1] := 2; + if (v_set == { [0] := 1, [1] := 2 }) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_005()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn new file mode 100644 index 0000000..dc9ff2f --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_006.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:7, element of partially initialized structured value + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// This means also that all fields and elements of structured types referenced +// in an expression shall contain completely initialized values, while other +// fields and elements, not used in the expression, may be uninitialized or +// contain omit. + +module Sem_07_toplevel_006 +{ + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 optional + } + + testcase TC_Sem_07_toplevel_006() runs on GeneralComp { + var R v_rec; + v_rec.field1 := 1; + if (10 + v_rec.field1 == 11) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_07_toplevel_006()); + } +} diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn new file mode 100644 index 0000000..5e5ff44 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_007.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of set-of 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()); + } +} \ No newline at end of file diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn new file mode 100644 index 0000000..dcbd1c2 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_008.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:7, compound expression as an operand of set-of 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()); + } +} \ No newline at end of file diff --git a/core_language/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn new file mode 100644 index 0000000..4b81b99 --- /dev/null +++ b/core_language/07_expressions/07_toplevel/Sem_07_toplevel_009.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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: +// Compound expressions are used for expressions of array, record, record of and +// set of 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/core_language/07_expressions/NOTES b/core_language/07_expressions/NOTES new file mode 100644 index 0000000..d4f1fe1 --- /dev/null +++ b/core_language/07_expressions/NOTES @@ -0,0 +1,2 @@ +- TODO: add some operator precedence tests... +- TODO: add more tests in general \ No newline at end of file diff --git a/core_language/08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn b/core_language/08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn new file mode 100644 index 0000000..3df0af6 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/NegSyn_0801_DefinitionOfAModule_001.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with multiple language specifications is rejected. + ** @verdict pass reject + *****************************************************************/ +// list of languages is not allowed +module NegSyn_0801_DefinitionOfAModule_001 language "TTCN-3:2005", "TTCN-3:2009", "TTCN-3:2010" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn new file mode 100644 index 0000000..a77b047 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_001.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a "plain" module definition is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_001 { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn new file mode 100644 index 0000000..fc09746 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_002.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with language specification is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_002 language "TTCN-3:2005" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_003.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_003.ttcn new file mode 100644 index 0000000..dd20397 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_003.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_003 language "TTCN-3:2010", "TTCN-3:2010 Advanced Parameterization" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_004.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_004.ttcn new file mode 100644 index 0000000..8d0bc2c --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_004.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with package and without language is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_004 language "TTCN-3:2010 Advanced Parameterization" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_005.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_005.ttcn new file mode 100644 index 0000000..ed60d3a --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_005.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.3.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_005 language "TTCN-3:2011", "TTCN-3:2010 Advanced Parameterization" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn new file mode 100644 index 0000000..507e644 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_006.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.4.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_006 language "TTCN-3:2012" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn new file mode 100644 index 0000000..89a52a6 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_007.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.5.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_007 language "TTCN-3:2013" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn new file mode 100644 index 0000000..e0a9b67 --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_008.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.6.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_008 language "TTCN-3:2014" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn new file mode 100644 index 0000000..0640afb --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_009.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:8.1, Ensure that a module definition with ed4.7.1 language and package is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0801_DefinitionOfAModule_009 language "TTCN-3:2015" { + +} diff --git a/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn new file mode 100644 index 0000000..28356ae --- /dev/null +++ b/core_language/08_modules/0801_definition_of_a_module/Syn_0801_DefinitionOfAModule_010.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 521 + ** @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/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn new file mode 100644 index 0000000..3bdccb2 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_001.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + { + in integer; + out integer; + inout integer + } + +modulepar MyMessagePortType MY_PORT; // not allowed + +type component GeneralComp { +} + +testcase TC_NegSem_080201_ModuleParameters_001() runs on GeneralComp { + if (MY_PORT) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_080201_ModuleParameters_001()); +} + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn new file mode 100644 index 0000000..9aa49b3 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_002.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + { + in integer; + out integer; + inout integer + } + + type component My_component_type{ + port MyMessagePortType pCO1; + + } + + +modulepar My_component_type 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/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn new file mode 100644 index 0000000..c389d3d --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_003.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 521 + ** @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/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn new file mode 100644 index 0000000..c05168b --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_004.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 521 + ** @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/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn new file mode 100644 index 0000000..6aee605 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_005.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 521 + ** @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/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn new file mode 100644 index 0000000..7fcbcec --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSem_080201_ModuleParameters_006.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + *****************************************************************/ +//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 { +} + +testcase TC_NegSem_080201_ModuleParameters_006() runs on GeneralComp { + + var integer my_int_array[1] := MY_INT_MODULE_PARAMETER; // error: Module parameters shall not be used in type or array definitions. + if (my_int_array[2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_080201_ModuleParameters_006()); +} + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn new file mode 100644 index 0000000..e2d7646 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_001.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + +} + \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn new file mode 100644 index 0000000..56b9234 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/NegSyn_080201_ModuleParameters_002.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + +} + \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn new file mode 100644 index 0000000..e11d0c3 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_001.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 409 + ** @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 accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080201_ModuleParameters_001 { + +modulepar integer MY_INTEGER_MODULE_PARAMETER := 2; + +type component GeneralComp { +} + +testcase TC_Sem_080201_ModuleParameters_001() runs on GeneralComp { + if (MY_INTEGER_MODULE_PARAMETER == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080201_ModuleParameters_001()); +} + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_002.ttcn new file mode 100644 index 0000000..c82b70c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_002.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 521 + ** @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 accept, ttcn3verdict:pass + *****************************************************************/ +// A module parameter shall only be of type address if the address type is explicitly defined within the associated module +module Sem_080201_ModuleParameters_002 { + +type integer address; + +modulepar address MY_ADDRESS_MODULE_PARAMETER := 2; + +type component GeneralComp { +} + +testcase TC_Sem_080201_ModuleParameters_002() runs on GeneralComp { + if (MY_ADDRESS_MODULE_PARAMETER == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080201_ModuleParameters_002()); +} + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_003.ttcn new file mode 100644 index 0000000..b7be79d --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Sem_080201_ModuleParameters_003.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 521 + ** @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 accept, ttcn3verdict:pass + *****************************************************************/ +//More than one occurrence of module parameters declaration is allowed but each parameter shall be declared only once (i.e. redefinition of the module parameter is not allowed). + +module Sem_080201_ModuleParameters_003 { + +modulepar integer MY_INTEGER_MODULE_PARAMETER := 2; +modulepar float MY_FLOAT_MODULE_PARAMETER := 1.23; + +type component GeneralComp { +} + +testcase TC_Sem_080201_ModuleParameters_003() runs on GeneralComp { + if (MY_INTEGER_MODULE_PARAMETER == 2 and MY_FLOAT_MODULE_PARAMETER == 1.23) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080201_ModuleParameters_003()); +} + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn new file mode 100644 index 0000000..43811f1 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_001.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that plain module parameters are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_080201_ModuleParameters_001 { + modulepar integer MY_INTEGER_MODULE_PARAMETER; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn new file mode 100644 index 0000000..a02dfff --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_002.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that plain module parameters with default values are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_080201_ModuleParameters_002 { + modulepar integer MY_INTEGER_MODULE_PARAMETER := 2; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_003.ttcn new file mode 100644 index 0000000..b442a2e --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080201_module_parameters/Syn_080201_ModuleParameters_003.ttcn @@ -0,0 +1,10 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.1, Ensure that plain module parameters with default values and visibility modifiers are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_080201_ModuleParameters_003 { + private modulepar integer MY_INTEGER_MODULE_PARAMETER := 2; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_001.ttcn new file mode 100644 index 0000000..2a5ac79 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_001.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.2, Ensure that a definition within a group is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_080202_GroupOfDefinitions_001 { + group TYPEDEF_GROUP { + group RECORDS_GROUP { + public type record MyRecord1 { + integer field1, + charstring field2 + } + } + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_002.ttcn new file mode 100644 index 0000000..4de34bd --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_002.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.2, Ensure that a definition within a nested group is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_080202_GroupOfDefinitions_002 { + group MY_TYPEDEF_GROUP { + + public type record MyRecord1 { + integer field1, + charstring field2 + } + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_003.ttcn new file mode 100644 index 0000000..58fb495 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_003.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.2, Ensure that a definition within a group with public visibility modifier is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_080202_GroupOfDefinitions_003 { + public group TYPEDEF_GROUP { + public type record MyRecord1 { + integer field1, + charstring field2 + } + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_004.ttcn new file mode 100644 index 0000000..d2b5057 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080202_groups_of_definitions/Syn_080202_GroupOfDefinitions_004.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.2, Ensure that a definition within a group with public visibility modifier and attributes is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_080202_GroupOfDefinitions_004 { + public group TYPEDEF_GROUP { + public type record MyRecord1 { + integer field1, + charstring field2 + } + } with { + encode "Encoding 3"; + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_001.ttcn new file mode 100644 index 0000000..a4db7bb --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_001.ttcn @@ -0,0 +1,23 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that name handling of imported enumerations is properly handled + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_08020301_GeneralFormatOfImport_001 { + import from NegSem_08020301_GeneralFormatOfImport_001_import all; + + + //according to CR5607 the following definitions are not allowed, name conflict must be detected + const EnumType2 enumX := enumX; + const EnumType enumY := enumX; + +} + +module NegSem_08020301_GeneralFormatOfImport_001_import { + type enumerated EnumType {enumX, enumY, enumZ}; + type enumerated EnumType2 {enumX, enumY, enumZ}; + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_002.ttcn new file mode 100644 index 0000000..bf8c0cf --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_002.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:8.2.3.1, Ensure that name handling of imported enumerations is properly handled + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_08020301_GeneralFormatOfImport_002 language "TTCN-3:2016"{ + import from NegSem_08020301_GeneralFormatOfImport_002_import all; + + const EnumType2 c_enum := enumX; + + modulepar EnumType px_ModulePar := NegSem_08020301_GeneralFormatOfImport_002.c_enum; //type mismatch +} + +module NegSem_08020301_GeneralFormatOfImport_002_import { + type enumerated EnumType {enumX, enumY, enumZ}; + type enumerated EnumType2 {enumX, enumY, enumZ}; + +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_003.ttcn new file mode 100644 index 0000000..882e926 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_003.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that transitive import rules are properly handled + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_08020301_GeneralFormatOfImport_003 { + +import from NegSem_08020301_GeneralFormatOfImport_003_import { + const all; +}; + +type component GeneralComp {} + +testcase TC_NegSem_08020301_GeneralFormatOfImport_003() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_08020301_GeneralFormatOfImport_003()); +} +} + +module NegSem_08020301_GeneralFormatOfImport_003_import { + public import from NegSem_08020301_GeneralFormatOfImport_003_import_2 all; +} + + +module NegSem_08020301_GeneralFormatOfImport_003_import_2 { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_004.ttcn new file mode 100644 index 0000000..59c9c8c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_004.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that transitive import rules are properly handled + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_08020301_GeneralFormatOfImport_004 { + +import from NegSem_08020301_GeneralFormatOfImport_004_import all; + +type component GeneralComp {} + +testcase TC_NegSem_08020301_GeneralFormatOfImport_004() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_08020301_GeneralFormatOfImport_004()); +} +} + +module NegSem_08020301_GeneralFormatOfImport_004_import { + import from NegSem_08020301_GeneralFormatOfImport_004_import_2 all; +} + + +module NegSem_08020301_GeneralFormatOfImport_004_import_2 { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_005.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_005.ttcn new file mode 100644 index 0000000..2746684 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_005.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that the identifier of the current module cannot be used for prefixing imported entities + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Name clashes shall be resolved using qualified name(s) for the imported definition(s), +// i.e. prefixing the imported definition by the identifier of the module in which it has +// been defined; the prefix and the identifier shall be separated by a dot ("."). +// In cases where there are no ambiguities the prefixing need not (but may) be present +// when the imported definitions are used. + +module NegSem_08020301_GeneralFormatOfImport_005 { + +import from NegSem_08020301_GeneralFormatOfImport_005_import all; + +type component GeneralComp {} + +testcase TC_NegSem_08020301_GeneralFormatOfImport_005() runs on GeneralComp { + log(NegSem_08020301_GeneralFormatOfImport_005.c_test); + setverdict(pass); +} + +control{ + execute(TC_NegSem_08020301_GeneralFormatOfImport_005()); +} +} + +module NegSem_08020301_GeneralFormatOfImport_005_import { + const integer c_test := 5; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_006.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_006.ttcn new file mode 100644 index 0000000..5a5aaa9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_006.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that the only top-level visible definitions of a module may be imported. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction b: +// Only top-level visible definitions of a module may be imported. Definitions which +// are top-level but invisible to the importing module or which occur at a lower scope +// (e.g. local constants defined in a function) shall not be imported. + +module NegSem_08020301_GeneralFormatOfImport_006 { +import from NegSem_08020301_GeneralFormatOfImport_006_import { const c_test }; + +type component GeneralComp {} + +testcase TC_NegSem_08020301_GeneralFormatOfImport_006() runs on GeneralComp { + log(c_test); + setverdict(pass); +} + +control{ + execute(TC_NegSem_08020301_GeneralFormatOfImport_006()); +} +} + +module NegSem_08020301_GeneralFormatOfImport_006_import { + control { + const integer c_test := 5; + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_007.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_007.ttcn new file mode 100644 index 0000000..04213e9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_007.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that information about message types is imported together with port type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// User defined type, port type + +module NegSem_08020301_GeneralFormatOfImport_007 { +import from NegSem_08020301_GeneralFormatOfImport_007_import { type P }; + +type component GeneralComp { + port P p1; +} + +testcase TC_NegSem_08020301_GeneralFormatOfImport_007() runs on GeneralComp { + // Since the type of the sent message is not compatible with the allowed types of the imported + // port type, a type compatibility error shall be generated. This proves that the type information + // has been properly imported. + p1.send(charstring:"abc"); + setverdict(pass); +} + +control{ + execute(TC_NegSem_08020301_GeneralFormatOfImport_007()); +} +} + +module NegSem_08020301_GeneralFormatOfImport_007_import { + type port P message { + inout integer; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_008.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_008.ttcn new file mode 100644 index 0000000..0b1b779 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_008.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of module parameter types are not imported together with module parameters + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a module parameter: module parameter type + +module NegSem_08020301_GeneralFormatOfImport_008 { +import from NegSem_08020301_GeneralFormatOfImport_008_import { modulepar PX_TEST }; + const MyType c_test := 1; // MyType should be undefined, because it is not automatically imported +} + +module NegSem_08020301_GeneralFormatOfImport_008_import { + type integer MyType; + modulepar MyType PX_TEST; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_009.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_009.ttcn new file mode 100644 index 0000000..d88a281 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_009.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of constant types are not imported together with constants + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a constant: constant type + +module NegSem_08020301_GeneralFormatOfImport_009 { +import from NegSem_08020301_GeneralFormatOfImport_009_import { const c_test }; + const MyType c_test := 1; // MyType should be undefined, because it is not automatically imported +} + +module NegSem_08020301_GeneralFormatOfImport_009_import { + type integer MyType; + const MyType c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_010.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_010.ttcn new file mode 100644 index 0000000..cdc23fe --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_010.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of field types are not imported together with structured types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a structured type: field types + +module NegSem_08020301_GeneralFormatOfImport_010 { +import from NegSem_08020301_GeneralFormatOfImport_010_import { type R }; + const MyType c_test := 1; // MyType should be undefined, because it is not automatically imported +} + +module NegSem_08020301_GeneralFormatOfImport_010_import { + type integer MyType; + type record R { + MyType field1 + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_011.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_011.ttcn new file mode 100644 index 0000000..6f58afb --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_011.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of message types are not imported together with port types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a port type: message types + +module NegSem_08020301_GeneralFormatOfImport_011 { +import from NegSem_08020301_GeneralFormatOfImport_011_import { type P }; + const MyType c_test := 1; // MyType should be undefined, because it is not automatically imported +} + +module NegSem_08020301_GeneralFormatOfImport_011_import { + type integer MyType; + type port P message { + inout MyType + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_012.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_012.ttcn new file mode 100644 index 0000000..e8aa892 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_012.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of signatures are not imported together with port types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a port type: signatures + +module NegSem_08020301_GeneralFormatOfImport_012 { +import from NegSem_08020301_GeneralFormatOfImport_012_import { type P }; + // MySignature should be undefined, because it is not automatically imported + template MySignature s_test := { p_par1 := 1 }; +} + +module NegSem_08020301_GeneralFormatOfImport_012_import { + //type integer MyType; + signature MySignature (in integer p_par1) return integer; + type port P procedure { + inout MySignature + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_013.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_013.ttcn new file mode 100644 index 0000000..bd1c88e --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_013.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of constant types are not imported together with component types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a component type: constant types + +module NegSem_08020301_GeneralFormatOfImport_013 { +import from NegSem_08020301_GeneralFormatOfImport_013_import { type C }; + // MyType should be undefined, because it is not automatically imported + template MyType s_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_013_import { + type integer MyType; + type component C { + const MyType cc_test := 0; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_014.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_014.ttcn new file mode 100644 index 0000000..8ba0f48 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_014.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of variable types are not imported together with component types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a component type: variable types + +module NegSem_08020301_GeneralFormatOfImport_014 { +import from NegSem_08020301_GeneralFormatOfImport_014_import { type C }; + // MyType should be undefined, because it is not automatically imported + template MyType s_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_014_import { + type integer MyType; + type component C { + var MyType vc_test := 0; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_015.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_015.ttcn new file mode 100644 index 0000000..a97010f --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_015.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of port types are not imported together with component types + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a component type: port types + +module NegSem_08020301_GeneralFormatOfImport_015 { +import from NegSem_08020301_GeneralFormatOfImport_015_import { type C }; + // P should be undefined, because it is not automatically imported + type component GeneralComponent { + port P p2; + } +} + +module NegSem_08020301_GeneralFormatOfImport_015_import { + type port P message { + inout integer + } + type component C { + port P p1; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_016.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_016.ttcn new file mode 100644 index 0000000..712a7af --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_016.ttcn @@ -0,0 +1,23 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with signatures + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. + +module NegSem_08020301_GeneralFormatOfImport_016 { +import from NegSem_08020301_GeneralFormatOfImport_016_import { signature S }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_016_import { + type integer MyType; + signature S(in MyType p1); +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_017.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_017.ttcn new file mode 100644 index 0000000..2bd8499 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_017.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of return types are not imported together with signatures + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature: return type + +module NegSem_08020301_GeneralFormatOfImport_017 { +import from NegSem_08020301_GeneralFormatOfImport_017_import { signature S }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_017_import { + type integer MyType; + signature S() return MyType; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_018.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_018.ttcn new file mode 100644 index 0000000..ec840da --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_018.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of exception types are not imported together with signatures + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature: types of exceptions + +module NegSem_08020301_GeneralFormatOfImport_018 { +import from NegSem_08020301_GeneralFormatOfImport_018_import { signature S }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_018_import { + type integer MyType; + signature S() exception (MyType); +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_019.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_019.ttcn new file mode 100644 index 0000000..078b665 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_019.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of template types are not imported together with data templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a data template: template type + +module NegSem_08020301_GeneralFormatOfImport_019 { +import from NegSem_08020301_GeneralFormatOfImport_019_import { template m_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_019_import { + type integer MyType; + template MyType m_test := ?; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_020.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_020.ttcn new file mode 100644 index 0000000..f66e122 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_020.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with data templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a data template: parameter types + +module NegSem_08020301_GeneralFormatOfImport_020 { +import from NegSem_08020301_GeneralFormatOfImport_020_import { template m_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_020_import { + type integer MyType; + template integer m_test (MyType p1) := (0..p1); +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_021.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_021.ttcn new file mode 100644 index 0000000..6c28c1b --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_021.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of constants are not imported together with data templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a data template: constants + +module NegSem_08020301_GeneralFormatOfImport_021 { +import from NegSem_08020301_GeneralFormatOfImport_021_import { template m_test }; + // c_test should be undefined, because it is not automatically imported + const integer c_test2 := c_test; +} + +module NegSem_08020301_GeneralFormatOfImport_021_import { + const integer c_test := 1; + template integer m_test := c_test; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_022.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_022.ttcn new file mode 100644 index 0000000..328bbf2 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_022.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of module parameters are not imported together with data templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a data template: module parameters + +module NegSem_08020301_GeneralFormatOfImport_022 { +import from NegSem_08020301_GeneralFormatOfImport_022_import { template m_test }; + // PX_TEST should be undefined, because it is not automatically imported + const integer c_test := PX_TEST; +} + +module NegSem_08020301_GeneralFormatOfImport_022_import { + modulepar integer PX_TEST := 1; + template integer m_test := PX_TEST; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_023.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_023.ttcn new file mode 100644 index 0000000..7aa64e1 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_023.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of functions are not imported together with data templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a data template: functions + +module NegSem_08020301_GeneralFormatOfImport_023 { +import from NegSem_08020301_GeneralFormatOfImport_023_import { template m_test }; + // f_test should be undefined, because it is not automatically imported + const integer c_test := f_test(); +} + +module NegSem_08020301_GeneralFormatOfImport_023_import { + function f_test() return integer { + return 1; + } + template integer m_test := f_test(); +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_024.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_024.ttcn new file mode 100644 index 0000000..d498cc8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_024.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of signatures are not imported together with signature templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature template: signatures + +module NegSem_08020301_GeneralFormatOfImport_024 { +import from NegSem_08020301_GeneralFormatOfImport_024_import { template s_test }; + // f_test should be undefined, because it is not automatically imported + template S s_test2 := { p := ? } +} + +module NegSem_08020301_GeneralFormatOfImport_024_import { + signature S(integer p); + template S s_test := { p := 3 } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_025.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_025.ttcn new file mode 100644 index 0000000..42923b1 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_025.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of constants are not imported together with signature templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature template: constants + +module NegSem_08020301_GeneralFormatOfImport_025 { +import from NegSem_08020301_GeneralFormatOfImport_025_import { template s_test }; + // c_test should be undefined, because it is not automatically imported + const integer c_test2 := c_test; +} + +module NegSem_08020301_GeneralFormatOfImport_025_import { + const integer c_test := 1; + signature S(integer p); + template S s_test := { p := c_test } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_026.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_026.ttcn new file mode 100644 index 0000000..ebbd57d --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_026.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of module parameters are not imported together with signature templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature template: module parameters + +module NegSem_08020301_GeneralFormatOfImport_026 { +import from NegSem_08020301_GeneralFormatOfImport_026_import { template s_test }; + // PX_TEST should be undefined, because it is not automatically imported + const integer c_test := PX_TEST; +} + +module NegSem_08020301_GeneralFormatOfImport_026_import { + modulepar integer PX_TEST := 1; + signature S(integer p); + template S s_test := { p := PX_TEST }; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_027.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_027.ttcn new file mode 100644 index 0000000..e2f82a9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_027.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of functions are not imported together with signature templates + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a signature template: functions + +module NegSem_08020301_GeneralFormatOfImport_027 { +import from NegSem_08020301_GeneralFormatOfImport_027_import { template s_test }; + // f_test should be undefined, because it is not automatically imported + const integer c_test := f_test(); +} + +module NegSem_08020301_GeneralFormatOfImport_027_import { + function f_test() return integer { + return 1; + } + signature S(integer p); + template S s_test := { p := f_test() } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_028.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_028.ttcn new file mode 100644 index 0000000..b5ddc95 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_028.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with functions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a function: parameter types + +module NegSem_08020301_GeneralFormatOfImport_028 { +import from NegSem_08020301_GeneralFormatOfImport_028_import { function f_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_028_import { + type integer MyType; + function f_test(MyType p) { + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_029.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_029.ttcn new file mode 100644 index 0000000..179a99b --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_029.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of return type are not imported together with functions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a function: return type + +module NegSem_08020301_GeneralFormatOfImport_029 { +import from NegSem_08020301_GeneralFormatOfImport_029_import { function f_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := f_test(); +} + +module NegSem_08020301_GeneralFormatOfImport_029_import { + type integer MyType; + function f_test() return MyType { + return 1; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_030.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_030.ttcn new file mode 100644 index 0000000..a208458 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_030.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of component types are not imported together with functions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a function: component types (runs on) + +module NegSem_08020301_GeneralFormatOfImport_030 { +import from NegSem_08020301_GeneralFormatOfImport_030_import { function f_test }; + // C should be undefined, because it is not automatically imported + testcase TC_01() runs on C { } +} + +module NegSem_08020301_GeneralFormatOfImport_030_import { + type component C {}; + function f_test() runs on C { + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_031.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_031.ttcn new file mode 100644 index 0000000..bc96f25 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_031.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @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 + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for an external function: parameter types + +module NegSem_08020301_GeneralFormatOfImport_031 { +import from NegSem_08020301_GeneralFormatOfImport_031_import { function f_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_031_import { + type integer MyType; + external function f_test(MyType p); +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_032.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_032.ttcn new file mode 100644 index 0000000..88b6d14 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_032.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of return type are not imported together with external functions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for an external function: return type + +module NegSem_08020301_GeneralFormatOfImport_032 { +import from NegSem_08020301_GeneralFormatOfImport_032_import { function f_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := f_test(); +} + +module NegSem_08020301_GeneralFormatOfImport_032_import { + type integer MyType; + external function f_test() return MyType; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_033.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_033.ttcn new file mode 100644 index 0000000..64ce3c8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_033.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with altsteps + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for an altstep: parameter types + +module NegSem_08020301_GeneralFormatOfImport_033 { +import from NegSem_08020301_GeneralFormatOfImport_033_import { altstep a_test }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_033_import { + type integer MyType; + altstep a_test(MyType p) { + [] any port.receive{} + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_034.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_034.ttcn new file mode 100644 index 0000000..3fa96fb --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_034.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of component types are not imported together with altsteps + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for an altstep: component types (runs on) + +module NegSem_08020301_GeneralFormatOfImport_034 { +import from NegSem_08020301_GeneralFormatOfImport_034_import { altstep a_test }; + // C should be undefined, because it is not automatically imported + testcase TC_01() runs on C { } +} + +module NegSem_08020301_GeneralFormatOfImport_034_import { + type component C {}; + altstep a_test() runs on C { + [] any port.receive {} + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_035.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_035.ttcn new file mode 100644 index 0000000..f6f54a8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_035.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of parameter types are not imported together with test cases + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a test case: parameter types + +module NegSem_08020301_GeneralFormatOfImport_035 { + import from NegSem_08020301_GeneralFormatOfImport_035_import { testcase TC_01 }; + // MyType should be undefined, because it is not automatically imported + const MyType c_test := 1; +} + +module NegSem_08020301_GeneralFormatOfImport_035_import { + type integer MyType; + type component C {}; + testcase TC_01(MyType p) runs on C { + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_036.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_036.ttcn new file mode 100644 index 0000000..9423613 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_036.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of component types (runs on) are not imported together with test cases + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a test case: component types (runs on) + +module NegSem_08020301_GeneralFormatOfImport_036 { +import from NegSem_08020301_GeneralFormatOfImport_036_import { testcase TC_01 }; + // C should be undefined, because it is not automatically imported + testcase TC_02() runs on C { } +} + +module NegSem_08020301_GeneralFormatOfImport_036_import { + type component C {}; + testcase TC_01() runs on C { + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_037.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_037.ttcn new file mode 100644 index 0000000..33a34f1 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_037.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that identifiers of component types (system) are not imported together with test cases + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TTCN-3 import mechanism distinguishes between the identifier of a referenced +// definition and the information necessary for the usage of a referenced definition +// within the imported definition. For the usage, the identifier of a referenced +// definition is not required and therefore not imported automatically. +// Table 8: +// Possible referenced definitions for a test case: component types (system) + +module NegSem_08020301_GeneralFormatOfImport_037 { +import from NegSem_08020301_GeneralFormatOfImport_037_import { testcase TC_01 }; + // C2 should be undefined, because it is not automatically imported + testcase TC_02() runs on C2 { } +} + +module NegSem_08020301_GeneralFormatOfImport_037_import { + type component C1 {}; + type component C2 {}; + testcase TC_01() runs on C1 system C2 { + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_038.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_038.ttcn new file mode 100644 index 0000000..9bc1e49 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_038.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that definition from inside an imported function cannot be referenced + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction f: +// When importing a function, altstep or test case the corresponding behaviour +// specifications and all definitions used inside the behaviour specifications +// remain invisible for the importing module. + +module NegSem_08020301_GeneralFormatOfImport_038 { +import from NegSem_08020301_GeneralFormatOfImport_038_import { function f_test }; + // c_test should be undefined, because it is invisible for the importing module + const integer c_test2 := c_test; +} + +module NegSem_08020301_GeneralFormatOfImport_038_import { + function f_test() { + const integer c_test := 1; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_039.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_039.ttcn new file mode 100644 index 0000000..362df70 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_039.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that import clause cannot override language tag of imported module + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction g: +// The language specification of the import statement shall not override the language +// specification of the importing module. +// Restriction h: +// The language specification of the import statement shall be identical to the language +// specification of the source module from which definitions are imported provided +// a language specification is defined in the source module. + +module NegSem_08020301_GeneralFormatOfImport_039 { +import from NegSem_08020301_GeneralFormatOfImport_039_import language "TTCN-3:2013" all; + type component GeneralComp {} + + testcase TC_Sem_08020301_GeneralFormatOfImport_039() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_039()); + } +} + +module NegSem_08020301_GeneralFormatOfImport_039_import language "TTCN-3:2012" { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_040.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_040.ttcn new file mode 100644 index 0000000..05357ba --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSem_08020301_GeneralFormatOfImport_040.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that unsupported language concepts cannot be used when language is set by import clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction h: +// If no [language specification is defined in the source module], the language +// specification in the import statement is taken as the language specification +// of the source module. If the source module uses however language concepts not +// being part of that language specification, this causes an error for the import +// statement. + +module NegSem_08020301_GeneralFormatOfImport_040 { +import from NegSem_08020301_GeneralFormatOfImport_040_import language "TTCN-3:2012" all; + type component GeneralComp {} + + testcase TC_Sem_08020301_GeneralFormatOfImport_040() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } + } + + control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_040()); + } +} + +module NegSem_08020301_GeneralFormatOfImport_040_import { + type set of integer SoI; + template SoI m_src := {1, 2, 3}; + // all from is a TTCN-3:2013 feature: it shall cause an import error + template integer m_test := ( 10, all from m_src ); + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_001.ttcn new file mode 100644 index 0000000..6260604 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_001.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that import statement cannot be used in test case blocks + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction a: +// An import statement shall only be used in the module definitions part and not be used +// within a control part, function definition, and alike. + +module NegSyn_08020301_GeneralFormatOfImport_001 { + + +type component GeneralComp {} + +testcase TC_NegSyn_08020301_GeneralFormatOfImport_001() runs on GeneralComp { + import from NegSyn_08020301_GeneralFormatOfImport_001_import all; + log(c_test); + setverdict(pass); +} + +control{ + execute(TC_NegSyn_08020301_GeneralFormatOfImport_001()); +} +} + +module NegSyn_08020301_GeneralFormatOfImport_001_import { + const integer c_test := 5; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_002.ttcn new file mode 100644 index 0000000..eb0f6d5 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/NegSyn_08020301_GeneralFormatOfImport_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that import statement cannot be used in module control part + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction a: +// An import statement shall only be used in the module definitions part and not be used +// within a control part, function definition, and alike. + +module NegSyn_08020301_GeneralFormatOfImport_002 { + + +type component GeneralComp {} + +testcase TC_NegSyn_08020301_GeneralFormatOfImport_002() runs on GeneralComp { + setverdict(pass); +} + +control{ + import from NegSyn_08020301_GeneralFormatOfImport_002_import all; + log(c_test); + execute(TC_NegSyn_08020301_GeneralFormatOfImport_002()); +} + +} + +module NegSyn_08020301_GeneralFormatOfImport_002_import { + const integer c_test := 5; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_001.ttcn new file mode 100644 index 0000000..3094f9e --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that transitive imports are properly handled + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020301_GeneralFormatOfImport_001 { + +import from Sem_08020301_GeneralFormatOfImport_001_import { import all }; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_001()); +} +} + +module Sem_08020301_GeneralFormatOfImport_001_import { + public import from Sem_08020301_GeneralFormatOfImport_001_import_2 all; +} + + +module Sem_08020301_GeneralFormatOfImport_001_import_2 { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_002.ttcn new file mode 100644 index 0000000..b08695a --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_002.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that enumerated type definitions are automatically imported when needed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020301_GeneralFormatOfImport_002 { + +import from Sem_08020301_GeneralFormatOfImport_002_import { + modulepar px_enum; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_002() runs on GeneralComp { + + if (px_enum == enumX) { //this must be a recognized enum value + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_002()); +} +} + +module Sem_08020301_GeneralFormatOfImport_002_import { + import from Sem_08020301_GeneralFormatOfImport_002_import_2 all; + + modulepar EnumType px_enum:=enumX; +} + + +module Sem_08020301_GeneralFormatOfImport_002_import_2 { + type enumerated EnumType {enumX, enumY, enumZ}; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_003.ttcn new file mode 100644 index 0000000..1ab8270 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that local definition takes precedence over imported one when their identifiers are equal + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Name clashes may occur due to import, e.g. import from different modules. Name clashes +// shall be resolved using qualified name(s) for the imported definition(s), i.e. prefixing +// the imported definition (which causes the name clash) by the identifier of the module in +// which it has been defined; the prefix and the identifier shall be separated by a dot ("."). + +module Sem_08020301_GeneralFormatOfImport_003 { + +import from Sem_08020301_GeneralFormatOfImport_003_import all; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_003() runs on GeneralComp { + if (c_myconst == -1) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +const integer c_myconst := -1; + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_003()); +} +} + +module Sem_08020301_GeneralFormatOfImport_003_import +{ + const integer c_myconst := 43532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_004.ttcn new file mode 100644 index 0000000..e232ac5 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_004.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that imported enumeration values take precedence over local definition + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// There is one exception to this rule: when in the context of an enumerated type +// (see clause 6.2.4), an enumerated value is clashing with the name of a definition in +// the importing module, the enumerated value shall take precedence and the definition +// in the importing module shall be referenced by using its qualified name. + +module Sem_08020301_GeneralFormatOfImport_004 { + +import from Sem_08020301_GeneralFormatOfImport_004_import all; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_004() runs on GeneralComp { + var integer enumX := 1; + if (c_enumVal == enumX) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_004()); +} +} + +module Sem_08020301_GeneralFormatOfImport_004_import +{ + type enumerated EnumType {enumX, enumY, enumZ}; + const EnumType c_enumVal := enumX; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_005.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_005.ttcn new file mode 100644 index 0000000..12ad350 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_005.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that it is possible to use module prefix for local definitions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When the definition is referenced in the same module where it is defined, the +// module identifier of the module (the current module) also may be used for prefixing +// the identifier of the definition. + +module Sem_08020301_GeneralFormatOfImport_005 { + +type component GeneralComp {} +const integer c_test := 5; + +testcase TC_Sem_08020301_GeneralFormatOfImport_005() runs on GeneralComp { + log(Sem_08020301_GeneralFormatOfImport_005.c_test); + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_005()); +} +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_006.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_006.ttcn new file mode 100644 index 0000000..79d631c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_006.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that it is possible to use module prefix for local definitions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When the definition is referenced in the same module where it is defined, the +// module identifier of the module (the current module) also may be used for prefixing +// the identifier of the definition. + +module Sem_08020301_GeneralFormatOfImport_006 { + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_006() runs on GeneralComp { + var integer c_test := 5; + log(Sem_08020301_GeneralFormatOfImport_006.c_test); + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_006()); +} +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_007.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_007.ttcn new file mode 100644 index 0000000..0016479 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_007.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Make sure that it is possible to use module prefix for imported definitions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Name clashes shall be resolved using qualified name(s) for the imported definition(s), +// i.e. prefixing the imported definition by the identifier of the module in which it has +// been defined; the prefix and the identifier shall be separated by a dot ("."). +// In cases where there are no ambiguities the prefixing need not (but may) be present +// when the imported definitions are used. + +module Sem_08020301_GeneralFormatOfImport_007 { + +import from Sem_08020301_GeneralFormatOfImport_007_import all; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_007() runs on GeneralComp { + log(Sem_08020301_GeneralFormatOfImport_007_import.c_test); + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_007()); +} +} + +module Sem_08020301_GeneralFormatOfImport_007_import +{ + const integer c_test := 5; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_008.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_008.ttcn new file mode 100644 index 0000000..97af4b9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_008.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that structured type is imported together with its field names and nested type definitions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// User-defined type, structured type + +module Sem_08020301_GeneralFormatOfImport_008 { + +import from Sem_08020301_GeneralFormatOfImport_008_import { type R, U }; + +type component GeneralComp {} + +type U.variant1 Test; // test if nested type is imported + +testcase TC_Sem_08020301_GeneralFormatOfImport_008() runs on GeneralComp { + var Test v_test1 := { subfield1 := 1, subfield2 := 2 } + var R v_test2; + // test if field names are imported and type information is avaiable (necessary for + // compatibility check during assignment + v_test2.field1 := 1; + v_test2.field2 := 2; + log (v_test1); + log (v_test2); + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_008()); +} +} + +module Sem_08020301_GeneralFormatOfImport_008_import +{ + type record R { + integer field1, + integer field2 + } + + type union U { + set { + integer subfield1, + integer subfield2 + } variant1, + integer variant2 + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_009.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_009.ttcn new file mode 100644 index 0000000..4c42bcc --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_009.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that component type is imported together with constant, variable, timer and port names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// User-defined type, component type + +module Sem_08020301_GeneralFormatOfImport_009 { + +import from Sem_08020301_GeneralFormatOfImport_009_import { type GeneralComp }; + +testcase TC_Sem_08020301_GeneralFormatOfImport_009() runs on GeneralComp { + // type compatibility is checked during assignment: + // for this check, type information for constant and variable types + // should be available at this point to compile the script correctly + var integer v_test; + v_test := cc_test; // testing constant reference + log(v_test); + v_test := vc_test; // testing variable reference + log(v_test); + tc_test.start; // testing timer reference + p1.start; // testing port reference + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_009()); +} +} + +module Sem_08020301_GeneralFormatOfImport_009_import +{ + type port P message { + inout integer; + } + type component GeneralComp + { + const integer cc_test := 0; + var integer vc_test := 1; + timer tc_test := 1.0; + port P p1; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_010.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_010.ttcn new file mode 100644 index 0000000..4ea0bf8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_010.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that signature is imported together with parameter names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Signature + +module Sem_08020301_GeneralFormatOfImport_010 { + +import from Sem_08020301_GeneralFormatOfImport_010_import { signature Signature1 }; + +type component GeneralComp {} + +// type compatibility is checked during parameter passing: for this check, type +// information for the signature parameters should be available at this point +// to compile the script correctly +template Signature1 s_test := { + p_param1 := 1 // testing signature parameter name +} + +testcase TC_Sem_08020301_GeneralFormatOfImport_010() runs on GeneralComp { + log (s_test); + setverdict(pass); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_010()); +} +} + +module Sem_08020301_GeneralFormatOfImport_010_import +{ + signature Signature1 (in integer p_param1); +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_011.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_011.ttcn new file mode 100644 index 0000000..8d85c2c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_011.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that parameterized template is imported together with parameter names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Data template + +module Sem_08020301_GeneralFormatOfImport_011 { + +import from Sem_08020301_GeneralFormatOfImport_011_import { type R; template m_test1 }; + +type component GeneralComp {} + +type record RLocal { // compatible type with Sem_08020301_GeneralFormatOfImport_011_import.R + integer field1, + integer field2 +} +testcase TC_Sem_08020301_GeneralFormatOfImport_011() runs on GeneralComp { + + // type compatibility is checked during parameter passing and template assignment: + // for this check, type information for the template parameters and template type + // should be available at this point to compile the script correctly + template RLocal m_res := m_test1(p_param2 := 10); + if (match({1, 10}, m_res)) // testing if parameter name is imported + { setverdict(pass); } + else + { setverdict(fail); } +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_011()); +} +} + +module Sem_08020301_GeneralFormatOfImport_011_import { + type record R { + integer field1, + integer field2 + } + template R m_test1(integer p_param1 := 1 , integer p_param2 := 2) := { + field1 := p_param1, + field2 := p_param2 + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_012.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_012.ttcn new file mode 100644 index 0000000..02e3e59 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_012.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that function is imported together with parameter names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Function + +module Sem_08020301_GeneralFormatOfImport_012 { + +import from Sem_08020301_GeneralFormatOfImport_012_import { function f_div }; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_012() runs on GeneralComp { + + // testing if function parameter names were imported + // type compatibility is checked during parameter passing and return value assignment: for + // this check, the type information for the function parameters and return values should be + // available at this point to compile the script correctly + var integer v_res := f_div(p_param1 := 10, p_param2 := 5); + if (v_res == 2) + { setverdict(pass); } + else + { setverdict(fail); } +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_012()); +} +} + +module Sem_08020301_GeneralFormatOfImport_012_import { + function f_div(integer p_param1, integer p_param2) return integer { + return p_param1 / p_param2; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_013.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_013.ttcn new file mode 100644 index 0000000..fc5f573 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_013.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that altstep is imported together with parameter names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Altstep + +module Sem_08020301_GeneralFormatOfImport_013 { + +import from Sem_08020301_GeneralFormatOfImport_013_import { altstep a_test }; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_013() runs on GeneralComp { + // testing if parameter names are imported + // type compatibility is checked during parameter passing: for this check, the type information for + // the altstep parameters should be available at this point to compile the script correctly + a_test(p_param2 := 2, p_param1 := 1); +} + +control{ + execute(TC_Sem_08020301_GeneralFormatOfImport_013()); +} +} + +module Sem_08020301_GeneralFormatOfImport_013_import { + altstep a_test(integer p_param1, integer p_param2) { + [] any timer.timeout {} + [else] { + if ( match(p_param1, 1) and match(p_param2, 2) ) { setverdict(pass); } + else { setverdict(fail); } + } + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_014.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_014.ttcn new file mode 100644 index 0000000..ca30fd8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_014.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that test case is imported together with parameter names + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// A definition is imported together with its name and all local definitions. +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Test case + +module Sem_08020301_GeneralFormatOfImport_014 { + +import from Sem_08020301_GeneralFormatOfImport_014_import { testcase TC_Sem_08020301_GeneralFormatOfImport_014 }; + +control{ + // testing if parameter names are imported + // type compatibility is checked during parameter passing: for this check, the type information for + // the test case parameters should be available at this point to compile the script correctly + execute(TC_Sem_08020301_GeneralFormatOfImport_014(p_param2 := 2, p_param1 := 1)); +} +} + +module Sem_08020301_GeneralFormatOfImport_014_import { + type component GeneralComp {} + testcase TC_Sem_08020301_GeneralFormatOfImport_014(integer p_param1, integer p_param2) runs on GeneralComp { + if ( match(p_param1, 1) and match(p_param2, 2)) { setverdict(pass); } + else { setverdict(fail); } + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_015.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_015.ttcn new file mode 100644 index 0000000..93c9a42 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_015.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that information about module parameter type is imported together with module parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Module parameter + +module Sem_08020301_GeneralFormatOfImport_015 { + +import from Sem_08020301_GeneralFormatOfImport_015_import { modulepar PX_TEST }; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_015() runs on GeneralComp { + // type compatibility is checked during assignment: for this check, the type information for PX_TEST + // should be available at this point to compile the script correctly + var integer v_test := PX_TEST; + if (v_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_015()); +} +} + +module Sem_08020301_GeneralFormatOfImport_015_import { + modulepar integer PX_TEST := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_016.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_016.ttcn new file mode 100644 index 0000000..a0ca1d5 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_016.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that information about type of constant is imported together with constant + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction d: +// A definition is imported together with all information of referenced definitions that +// are necessary for the usage of the imported definition, independent of the visibility +// of the referenced definitions. +// Table 8: +// Possible referenced definitions for a signature: parameter types + +module Sem_08020301_GeneralFormatOfImport_016 { + +import from Sem_08020301_GeneralFormatOfImport_016_import { const c_test }; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_016() runs on GeneralComp { + // type compatibility is checked during assignment: for this check, the type information for c_test + // should be available at this point to compile the script correctly + var integer v_test := c_test; + if (v_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_016()); +} +} + +module Sem_08020301_GeneralFormatOfImport_016_import { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_017.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_017.ttcn new file mode 100644 index 0000000..3b9b741 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_017.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify using of import clause with language tag for impoting module having identical language tag + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction h: +// The language specification of the import statement shall be identical to the language +// specification of the source module from which definitions are imported provided +// a language specification is defined in the source module. + +module Sem_08020301_GeneralFormatOfImport_017 { + +import from Sem_08020301_GeneralFormatOfImport_017_import language "TTCN-3:2013" all; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_017() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_017()); +} +} + +module Sem_08020301_GeneralFormatOfImport_017_import language "TTCN-3:2013" { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_018.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_018.ttcn new file mode 100644 index 0000000..d0dd086 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_018.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify using of import clause with language tag for impoting module with no language tag + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction h: +// The language specification of the import statement shall be identical to the language +// specification of the source module from which definitions are imported provided +// a language specification is defined in the source module. + +module Sem_08020301_GeneralFormatOfImport_018 { + +import from Sem_08020301_GeneralFormatOfImport_018_import language "TTCN-3:2013" all; + +type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_018() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_018()); +} +} + +module Sem_08020301_GeneralFormatOfImport_018_import { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_019.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_019.ttcn new file mode 100644 index 0000000..9931acd --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_019.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that type of port is imported from a module as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +/*If the type of the component referenced in a connection operation is known (either when the component reference is a +variable or value returned from a function or the type is defined the runs on, mtc or system clause of the calling +function), the referenced port declaration shall be present in this component type.*/ + +module Sem_08020301_GeneralFormatOfImport_019 { + +import from Sem_08020301_GeneralFormatOfImport_019_import all; + + type component GeneralComp { + port loopbackPort messagePort + } + +testcase TC_Sem_08020301_GeneralFormatOfImport_019() runs on GeneralComp { + + var My_int v_int := 2; //type reference from other module + messagePort.send(v_int); //send message + + alt { + [] messagePort.receive(v_int) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_019()); +} +} + +module Sem_08020301_GeneralFormatOfImport_019_import { + type integer My_int; + type port loopbackPort message{inout My_int}; + +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_020.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_020.ttcn new file mode 100644 index 0000000..9d9cd2a --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Sem_08020301_GeneralFormatOfImport_020.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Verify that prefixed type is evaluated as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +/*In cases where there are no ambiguities the prefixing need not (but may) be present when the imported definitions are +used. When the definition is referenced in the same module where it is defined, the module identifier of the module (the +current module) also may be used for prefixing the identifier of the definition.*/ + +module Sem_08020301_GeneralFormatOfImport_020 { + + import from Sem_08020301_GeneralFormatOfImport_020_import {type My_type}; + + type float My_type; //float type + + type component GeneralComp {} + +testcase TC_Sem_08020301_GeneralFormatOfImport_020() runs on GeneralComp { + + var My_type v_1 := 2.5; //prefixed type + var Sem_08020301_GeneralFormatOfImport_020_import.My_type v_2 := 1; //prefix and the identifier + + if( (match(v_1,2.5)) and (match(v_2,1))) + { + setverdict(pass); + } else { + setverdict(fail); + } + +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020301_GeneralFormatOfImport_020()); +} +} + +module Sem_08020301_GeneralFormatOfImport_020_import { + type integer My_type; //integer type + +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_001.ttcn new file mode 100644 index 0000000..f1aac38 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_001.ttcn @@ -0,0 +1,15 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that import all is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_08020301_GeneralFormatOfImport_001 { + import from Syn_08020301_GeneralFormatOfImport_001_import all; +} + +module Syn_08020301_GeneralFormatOfImport_001_import { + const integer c_myconst := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_002.ttcn new file mode 100644 index 0000000..2052793 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020301_general_format_of_import/Syn_08020301_GeneralFormatOfImport_002.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.1, Ensure that import of specific types is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_08020301_GeneralFormatOfImport_002 { + import from Syn_08020301_GeneralFormatOfImport_002_import { + type all; + template all; + const c_myconst; + testcase all; + altstep all; + function all; + signature all; + modulepar all; + }; + +} + +module Syn_08020301_GeneralFormatOfImport_002_import { + const integer c_myconst := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_001.ttcn new file mode 100644 index 0000000..6efb5b9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.2, Ensure that the value of an explicitly imported constant can be read and carries the same value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020302_ImportingSingleDefinitions_001 { + +import from Sem_08020302_ImportingSingleDefinitions_001_import { + const c_myconst; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020302_ImportingSingleDefinitions_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020302_ImportingSingleDefinitions_001()); +} +} + +module Sem_08020302_ImportingSingleDefinitions_001_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_002.ttcn new file mode 100644 index 0000000..4731fa4 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020302_importing_single_definitions/Sem_08020302_ImportingSingleDefinitions_002.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.2, Ensure that the value of an explicitly imported template can be read and carries the same value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020302_ImportingSingleDefinitions_002 { + + import from Sem_08020302_ImportingSingleDefinitions_002_import { + template m_myTemplate; + }; + + type component GeneralComp {} + type record MyMessageType2 { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_Sem_08020302_ImportingSingleDefinitions_002() runs on GeneralComp { + var MyMessageType2 v_value:={23521, "My String", true}; + + if (match(v_value, m_myTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_08020302_ImportingSingleDefinitions_002()); + } +} + +module Sem_08020302_ImportingSingleDefinitions_002_import { + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + template MyMessageType m_myTemplate := { + field1 := 23521, + field2 := "My String", + field3 := true + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/NegSem_08020303_ImportingGroups_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/NegSem_08020303_ImportingGroups_001.ttcn new file mode 100644 index 0000000..de180b9 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/NegSem_08020303_ImportingGroups_001.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.3, Ensure that constants listed as exceptions in imported groups are not accessible. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_08020303_ImportingGroups_001 { + +import from NegSem_08020303_ImportingGroups_001 { + group CONST_GROUP except { + const c_myotherconst; + } +}; +type component GeneralComp {} +testcase TC_NegSem_08020303_ImportingGroups_001() runs on GeneralComp { + if ( match(c_myotherconst, 123456) ) { // c_myotherconst is excluded and shall not be accessible + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_08020303_ImportingGroups_001()); +} +} + +module NegSem_08020303_ImportingGroups_001_import { + group CONST_GROUP { + const integer c_myconst := 43532; + const integer c_myotherconst := 123456; + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_001.ttcn new file mode 100644 index 0000000..49869c7 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_001.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.3, Ensure that a const defined in a group can be accessed if the group is imported. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020303_ImportingGroups_001 { + +import from Sem_08020303_ImportingGroups_001_import { + group CONST_GROUP; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020303_ImportingGroups_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020303_ImportingGroups_001()); +} +} + +module Sem_08020303_ImportingGroups_001_import { + group CONST_GROUP { + const integer c_myconst := 43532; + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_002.ttcn new file mode 100644 index 0000000..9b55a4f --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_002.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.3, Ensure that the IUT properly handles 'except' clause in group import definitions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_08020303_ImportingGroups_002 { + +import from Sem_08020303_ImportingGroups_002_import { + group CONST_GROUP except { + const c_myconst; + }; + const all; + group CONST_INNER_GROUP except { + const c_myconst; + }; +} + +type component GeneralComp {} + +testcase TC_Sem_08020303_ImportingGroups_002() runs on GeneralComp { + if (c_myconst == 43532) { // c_myconst shall be imported from const all;, the exception must not removed it from the imports. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020303_ImportingGroups_002()); +} +} + +module Sem_08020303_ImportingGroups_002_import { + group CONST_GROUP { + group CONST_INNER_GROUP { + const integer c_myconst := 43532; + } + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_003.ttcn new file mode 100644 index 0000000..5d80362 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020303_importing_groups/Sem_08020303_ImportingGroups_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.3, but that it is in fact a shortcut notation for explicit imports. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_08020303_ImportingGroups_003 { + + import from Sem_08020303_ImportingGroups_003_import { + group CONST_GROUP.CONST_INNER_GROUP except { + const c_myconst; + }; + const all; + } + + type component GeneralComp {} + + testcase TC_Sem_08020303_ImportingGroups_003() runs on GeneralComp { + if (c_myconst == 43532) { // c_myconst shall be imported from const all;, the exception must not removed it from the imports. + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_08020303_ImportingGroups_003()); + } +} + +module Sem_08020303_ImportingGroups_003_import { + group CONST_GROUP { + group CONST_INNER_GROUP { + const integer c_myconst := 43532; + } + } +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_001.ttcn new file mode 100644 index 0000000..7ee050c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that an import of all constants allows access to a sample constant. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_001 { + +import from Sem_08020304_ImportingDefinitionsOfTheSameKind_001_import { + const all; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_001()); +} +} + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_001_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_002.ttcn new file mode 100644 index 0000000..58c8d3b --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that a previously valid const import is not removed by an import covering the same definition with an except. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_002 { + +import from Sem_08020304_ImportingDefinitionsOfTheSameKind_002_import { + const all; + const all except c_myconst; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_002() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_002()); +} +} + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_002_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_003.ttcn new file mode 100644 index 0000000..1b1768f --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020304_importing_definitions_of_the_same_kind/Sem_08020304_ImportingDefinitionsOfTheSameKind_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.4, Ensure that a previously valid const import is not removed by a second import statement excluding the same definition. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_003 { + +import from Sem_08020304_ImportingDefinitionsOfTheSameKind_003_import all; +import from Sem_08020304_ImportingDefinitionsOfTheSameKind_003_import { + const all except c_myconst; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_003() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020304_ImportingDefinitionsOfTheSameKind_003()); +} +} + +module Sem_08020304_ImportingDefinitionsOfTheSameKind_003_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn new file mode 100644 index 0000000..3e5ddb8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.5, Ensure that the constant is not visible after import with except. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_08020305_ImportingAllDefinitionsOfAModule_001 { + +import from NegSem_08020305_ImportingAllDefinitionsOfAModule_001_import all except { +// everything is excluded again + group all; + type all; + template all; + const all; + testcase all; + altstep all; + function all; + signature all; + modulepar all; +}; + +type component GeneralComp {} + +testcase TC_NegSem_08020305_ImportingAllDefinitionsOfAModule_001() runs on GeneralComp { + if (c_myconst == 43532) { // should not be visible due to the const all exception + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_08020305_ImportingAllDefinitionsOfAModule_001()); +} +} + +module NegSem_08020305_ImportingAllDefinitionsOfAModule_001_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn new file mode 100644 index 0000000..8a50f08 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/NegSem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.5, Ensure that the constant is not visible after import with except. + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction b +// In the set of except statements for an all import, only one except statement per +// kind of definition (i.e. for a group, type, etc.) is allowed. + +module NegSem_08020305_ImportingAllDefinitionsOfAModule_002 { + +import from NegSem_08020305_ImportingAllDefinitionsOfAModule_002_import all except { +// everything is excluded again + group all; + type all; + template all; + const c_test1; + testcase all; + altstep all; + function all; + signature all; + modulepar all; + const c_test2; // error: const present more than once in the except part +}; + +type component GeneralComp {} + +testcase TC_NegSem_08020305_ImportingAllDefinitionsOfAModule_002() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_08020305_ImportingAllDefinitionsOfAModule_002()); +} +} + +module NegSem_08020305_ImportingAllDefinitionsOfAModule_002_import { + const integer c_myconst := 43532; + const integer c_test1 := 0; + const integer c_test2 := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn new file mode 100644 index 0000000..eafacfe --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.5, Ensure that the constant is be visible after multiple imports. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_08020305_ImportingAllDefinitionsOfAModule_001 { + +import from Sem_08020305_ImportingAllDefinitionsOfAModule_001_import all; + +type component GeneralComp {} + +testcase TC_Sem_08020305_ImportingAllDefinitionsOfAModule_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020305_ImportingAllDefinitionsOfAModule_001()); +} +} + +module Sem_08020305_ImportingAllDefinitionsOfAModule_001_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn new file mode 100644 index 0000000..01ca417 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020305_importing_all_definitions_of_a_module/Sem_08020305_ImportingAllDefinitionsOfAModule_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.5, Ensure that the constant is be visible after multiple imports. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_08020305_ImportingAllDefinitionsOfAModule_002 { + +import from Sem_08020305_ImportingAllDefinitionsOfAModule_002_import all except { + const all; +}; +import from Sem_08020305_ImportingAllDefinitionsOfAModule_002_import all; // second import overrides the first + +type component GeneralComp {} + +testcase TC_Sem_08020305_ImportingAllDefinitionsOfAModule_002() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020305_ImportingAllDefinitionsOfAModule_002()); +} +} + +module Sem_08020305_ImportingAllDefinitionsOfAModule_002_import { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn new file mode 100644 index 0000000..a0e6454 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:8.2.3.6, Ensure that it is possible to import from previous language versions. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001 language "TTCN-3:2010" { + import from Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001_import language "TTCN-3:2003" { + const all; + } +} + +module Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001_import { + const integer c_myconst := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn new file mode 100644 index 0000000..002c80d --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.6, Ensure that imports work with language references when importing definitions of the same kinds (in this case constants) is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001 { + import from Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001_import language "TTCN-3:2003" { + const all; + } +} + +module Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001_import { + const integer c_myconst := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002.ttcn new file mode 100644 index 0000000..79084c2 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020306_importing_definitions_from_other_t3_editions_and_non_t3_modules/Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.6, Ensure that imports work with language references when importing all definitions of another module is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002 { + import from Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002_import language "TTCN-3:2003" all ; +} + +module Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002_import { + const integer c_myconst := 1; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn new file mode 100644 index 0000000..1db3ec1 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.7, Ensure that the import of import statements works for import all. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001 { + +import from NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001_importA { + import all; +}; + +type component GeneralComp {} + +testcase TC_NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001() runs on GeneralComp { + if (c_myconst == 43532) { // c_myconst shall not be accessible as the import in the importA module is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001()); +} +} + +module NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001_importA { + private import from NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001_importB all; +} + +module NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001_importB { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002.ttcn new file mode 100644 index 0000000..3d2b50e --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.7, Ensure that the import of import statements works for import all. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002 { + +import from Sem_08020307_ImportingOfImportStatementsFromT3Modules_002_importA { + import all; +}; + +type component GeneralComp {} + +testcase TC_NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002() runs on GeneralComp { + if (c_myconst == 43532) { // c_myconst shall not be accessible as the import in the importA module is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002()); +} +} + +module Sem_08020307_ImportingOfImportStatementsFromT3Modules_002_importA { + // imports are private by default + import from NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002_importB all; +} + +module NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002_importB { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/Sem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/Sem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn new file mode 100644 index 0000000..125a9dc --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020307_importing_of_import_statements_from_t3_modules/Sem_08020307_ImportingOfImportStatementsFromT3Modules_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.7, Ensure that the import of import statements works for import all. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_08020307_ImportingOfImportStatementsFromT3Modules_001 { + +import from Sem_08020307_ImportingOfImportStatementsFromT3Modules_001_importA { + import all; +}; + +type component GeneralComp {} + +testcase TC_Sem_08020307_ImportingOfImportStatementsFromT3Modules_001() runs on GeneralComp { + if (c_myconst == 43532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_08020307_ImportingOfImportStatementsFromT3Modules_001()); +} +} + +module Sem_08020307_ImportingOfImportStatementsFromT3Modules_001_importA { + public import from Sem_08020307_ImportingOfImportStatementsFromT3Modules_001_importB all; +} + +module Sem_08020307_ImportingOfImportStatementsFromT3Modules_001_importB { + const integer c_myconst := 43532; +} diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NOTES b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NOTES new file mode 100644 index 0000000..a452036 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NOTES @@ -0,0 +1,3 @@ +- NOTE: imports of compatible external definitions is not easily possible with TTCN-3 alone. + Therefore, the amount of tests possible in this section is highly limited. +- Restriction b is tested as a part of 8.2.3.1 \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn new file mode 100644 index 0000000..83005c8 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.3.8, Ensure that imports referring to future TTCN-3 versions are rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001 { + +import from NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001_import_A language "TTCN-3:9000" all; // shall be rejected as the cited TTCN-3 version is obviously in the future +} + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_001_import_A { +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn new file mode 100644 index 0000000..4476d03 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.8, Verify that modules with explicit language tag cannot import from newer TTCN-3 versions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// The TTCN-3 language specification in an import statement shall be lower or equal +// to the TTCN-3 language specification of the importing module, i.e. a TTCN-3 module +// can only import from earlier or same editions of TTCN-3 but not from later editions. + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002 language "TTCN-3:2012" { + +import from NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002_import language "TTCN-3:2013" all; + +type component GeneralComp {} + +testcase TC_NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002()); +} +} + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_002_import { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003.ttcn new file mode 100644 index 0000000..98fa121 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.8, Verify that modules with explicit language tag cannot import from newer TTCN-3 versions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// The TTCN-3 language specification in an import statement shall be lower or equal +// to the TTCN-3 language specification of the importing module, i.e. a TTCN-3 module +// can only import from earlier or same editions of TTCN-3 but not from later editions. + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003 language "TTCN-3:2012" { + +import from NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003_import all; + +type component GeneralComp {} + +testcase TC_NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003()); +} +} + +module NegSem_08020308_CompatibilityOfLanguageSpecificationsInImports_003_import language "TTCN-3:2013" { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn new file mode 100644 index 0000000..e072088 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.8, Verify that modules with explicit language tag can import from older TTCN-3 versions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// The TTCN-3 language specification in an import statement shall be lower or equal +// to the TTCN-3 language specification of the importing module, i.e. a TTCN-3 module +// can only import from earlier or same editions of TTCN-3 but not from later editions. + +module Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001 language "TTCN-3:2013" { + +import from Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001_import language "TTCN-3:2012" all; + +type component GeneralComp {} + +testcase TC_Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001()); +} +} + +module Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_001_import { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn new file mode 100644 index 0000000..12c9d52 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080203_importing_from_modules/08020308_compatibility_of_language_specifications_in_imports/Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:8.2.3.8, Verify that modules with explicit language tag can import from older TTCN-3 versions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Restriction c: +// The TTCN-3 language specification in an import statement shall be lower or equal +// to the TTCN-3 language specification of the importing module, i.e. a TTCN-3 module +// can only import from earlier or same editions of TTCN-3 but not from later editions. + +module Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002 language "TTCN-3:2013" { + +import from Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002_import all; + +type component GeneralComp {} + +testcase TC_Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002() runs on GeneralComp { + if (c_test == 0) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + // testing if parameter names are imported + execute(TC_Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002()); +} +} + +module Sem_08020308_CompatibilityOfLanguageSpecificationsInImports_002_import language "TTCN-3:2012" { + const integer c_test := 0; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_001.ttcn new file mode 100644 index 0000000..21fd65c --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.4, Ensure that friend visibility works for a sample constant. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080204_DefinitionOfFriendModules_001 { + +import from NegSem_080204_DefinitionOfFriendModules_001_import all; + +type component GeneralComp {} + +testcase TC_NegSem_080204_DefinitionOfFriendModules_001() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible. A friend module statement is missing in NegSem_080204_DefinitionOfFriendModules_001_import. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080204_DefinitionOfFriendModules_001()); +} +} + +module NegSem_080204_DefinitionOfFriendModules_001_import { + friend const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_002.ttcn new file mode 100644 index 0000000..a4f797a --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/NegSem_080204_DefinitionOfFriendModules_002.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.4, Ensure that private definitions are not made visible by friend declarations (for a constant sample definition). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080204_DefinitionOfFriendModules_002 { + +import from NegSem_080204_DefinitionOfFriendModules_002_import all; + +type component GeneralComp {} + +testcase TC_NegSem_080204_DefinitionOfFriendModules_002() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible. The definition is private even though the module is a friend. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080204_DefinitionOfFriendModules_002()); +} +} + +module NegSem_080204_DefinitionOfFriendModules_002_import { + friend module NegSem_080204_DefinitionOfFriendModules_001; + + private const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/Sem_080204_DefinitionOfFriendModules_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/Sem_080204_DefinitionOfFriendModules_001.ttcn new file mode 100644 index 0000000..d96e48e --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080204_definition_of_friend_modules/Sem_080204_DefinitionOfFriendModules_001.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.4, Ensure that friend visibility works for a sample constant. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080204_DefinitionOfFriendModules_001 { + +import from Sem_080204_DefinitionOfFriendModules_001_import all; + +type component GeneralComp {} + +testcase TC_Sem_080204_DefinitionOfFriendModules_001() runs on GeneralComp { + if (c_myconst == 32532) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080204_DefinitionOfFriendModules_001()); +} +} + +module Sem_080204_DefinitionOfFriendModules_001_import { + friend module Sem_080204_DefinitionOfFriendModules_001; + + friend const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_001.ttcn new file mode 100644 index 0000000..d7ea8ef --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that private definition (in this case a sample constant) is not visible using a normal import. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080205_VisibilityOfDefinitions_001 { + +import from NegSem_080205_VisibilityOfDefinitions_001_import all; + +type component GeneralComp {} + +testcase TC_NegSem_080205_VisibilityOfDefinitions_001() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible on import as the definition is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080205_VisibilityOfDefinitions_001()); +} +} + +module NegSem_080205_VisibilityOfDefinitions_001_import { + private const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_002.ttcn new file mode 100644 index 0000000..26823e2 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_002.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that private definition (in this case a sample constant) is not visible using an import of a friend module. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080205_VisibilityOfDefinitions_002 { + +import from NegSem_080205_VisibilityOfDefinitions_002_import all; + +type component GeneralComp {} + +testcase TC_NegSem_080205_VisibilityOfDefinitions_002() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible on import as the definition is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080205_VisibilityOfDefinitions_002()); +} +} + +module NegSem_080205_VisibilityOfDefinitions_002_import { + friend module NegSem_080205_VisibilityOfDefinitions_002; + + private const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_003.ttcn new file mode 100644 index 0000000..3aebd03 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that friend definition (in this case a sample constant) is not visible using a group import of a non-friend module. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080205_VisibilityOfDefinitions_003 { + +import from NegSem_080205_VisibilityOfDefinitions_003_import { + group CONST_GROUP; +} + +type component GeneralComp {} + +testcase TC_NegSem_080205_VisibilityOfDefinitions_003() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible on import as the definition is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080205_VisibilityOfDefinitions_003()); +} +} + +module NegSem_080205_VisibilityOfDefinitions_003_import { + group CONST_GROUP { + friend const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_004.ttcn new file mode 100644 index 0000000..b0ac887 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_004.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that private definition (in this case a sample constant) is not visible using a group import of a non-friend module. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080205_VisibilityOfDefinitions_004 { + +import from NegSem_080205_VisibilityOfDefinitions_004_import { + group CONST_GROUP; +} + +type component GeneralComp {} + +testcase TC_NegSem_080205_VisibilityOfDefinitions_004() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible on import as the definition is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080205_VisibilityOfDefinitions_004()); +} +} + +module NegSem_080205_VisibilityOfDefinitions_004_import { + group CONST_GROUP { + private const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_005.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_005.ttcn new file mode 100644 index 0000000..31638a0 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/NegSem_080205_VisibilityOfDefinitions_005.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that private definition (in this case a sample constant) is not visible using a group import of a friend module. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_080205_VisibilityOfDefinitions_005 { + +import from NegSem_080205_VisibilityOfDefinitions_005_import { + group CONST_GROUP; +} + +type component GeneralComp {} + +testcase TC_NegSem_080205_VisibilityOfDefinitions_005() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall not be visible on import as the definition is private. + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_080205_VisibilityOfDefinitions_005()); +} +} + +module NegSem_080205_VisibilityOfDefinitions_005_import { + friend module NegSem_080205_VisibilityOfDefinitions_005; + + group CONST_GROUP { + private const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_001.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_001.ttcn new file mode 100644 index 0000000..99afaef --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080205_VisibilityOfDefinitions_001 { + +import from Sem_080205_VisibilityOfDefinitions_001_import all; + +type component GeneralComp {} + +testcase TC_Sem_080205_VisibilityOfDefinitions_001() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall be visible on import when it is explicitly set to public. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080205_VisibilityOfDefinitions_001()); +} +} + +module Sem_080205_VisibilityOfDefinitions_001_import { + public const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_002.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_002.ttcn new file mode 100644 index 0000000..0471b10 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_002.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported by a friend module. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080205_VisibilityOfDefinitions_002 { + +import from Sem_080205_VisibilityOfDefinitions_002_import all; + +type component GeneralComp {} + +testcase TC_Sem_080205_VisibilityOfDefinitions_002() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall be visible on import when it is explicitly set to public. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080205_VisibilityOfDefinitions_002()); +} +} + +module Sem_080205_VisibilityOfDefinitions_002_import { + friend module Sem_080205_VisibilityOfDefinitions_002; + + public const integer c_myconst := 32532; +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_003.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_003.ttcn new file mode 100644 index 0000000..9f24925 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported through a group. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080205_VisibilityOfDefinitions_003 { + +import from Sem_080205_VisibilityOfDefinitions_003_import { + group CONST_GROUP; +}; + +type component GeneralComp {} + +testcase TC_Sem_080205_VisibilityOfDefinitions_003() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall be visible on import when it is explicitly set to public. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080205_VisibilityOfDefinitions_003()); +} +} + +module Sem_080205_VisibilityOfDefinitions_003_import { + group CONST_GROUP { + public const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_004.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_004.ttcn new file mode 100644 index 0000000..4744520 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_004.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported through a group of a friend module. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080205_VisibilityOfDefinitions_004 { + +import from Sem_080205_VisibilityOfDefinitions_004_import { + group CONST_GROUP; +}; + +type component GeneralComp {} + +testcase TC_Sem_080205_VisibilityOfDefinitions_004() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall be visible on import when it is explicitly set to public. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080205_VisibilityOfDefinitions_004()); +} +} + +module Sem_080205_VisibilityOfDefinitions_004_import { + friend module Sem_080205_VisibilityOfDefinitions_004; + + group CONST_GROUP { + public const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_005.ttcn b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_005.ttcn new file mode 100644 index 0000000..1b30105 --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/080205_visibility_of_definitions/Sem_080205_VisibilityOfDefinitions_005.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2.5, Ensure that friend definitions (in this case a sample constant) are visible when imported through a group of a friend module. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_080205_VisibilityOfDefinitions_005 { + +import from Sem_080205_VisibilityOfDefinitions_005_import { + group CONST_GROUP; +}; + +type component GeneralComp {} + +testcase TC_Sem_080205_VisibilityOfDefinitions_005() runs on GeneralComp { + if (c_myconst == 32532) { // c_myconst shall be visible on import when it is explicitly set to public. + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_080205_VisibilityOfDefinitions_005()); +} +} + +module Sem_080205_VisibilityOfDefinitions_005_import { + friend module Sem_080205_VisibilityOfDefinitions_005; + + group CONST_GROUP { + friend const integer c_myconst := 32532; + } +} \ No newline at end of file diff --git a/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_001.ttcn b/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_001.ttcn new file mode 100644 index 0000000..8241a9f --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_001.ttcn @@ -0,0 +1,15 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2, Ensure that a TypeDef module definition with public visibility is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_0802_ModuleDefinitionsPart_001 { + public type record MyRecord1 { + integer field1, + charstring field2 + } + +} diff --git a/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_002.ttcn b/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_002.ttcn new file mode 100644 index 0000000..4987a0b --- /dev/null +++ b/core_language/08_modules/0802_module_definitions_part/0802_toplevel/Syn_0802_ModuleDefinitionsPart_002.ttcn @@ -0,0 +1,15 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.2, Ensure that a TypeDef module definition with private visibility is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + + +module Syn_0802_ModuleDefinitionsPart_002 { + private type record MyRecord1 { + integer field1, + charstring field2 + } + +} diff --git a/core_language/08_modules/0803_module_control_part/NegSyn_0803_ModuleControlPart_001.ttcn b/core_language/08_modules/0803_module_control_part/NegSyn_0803_ModuleControlPart_001.ttcn new file mode 100644 index 0000000..7391c34 --- /dev/null +++ b/core_language/08_modules/0803_module_control_part/NegSyn_0803_ModuleControlPart_001.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.3, Ensure that there is not more than one control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSyn_0803_ModuleControlPart_001 { + +control { + var integer count := 0; +} + +control { + var integer count := 0; +} + +} \ No newline at end of file diff --git a/core_language/08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn b/core_language/08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn new file mode 100644 index 0000000..6e55c07 --- /dev/null +++ b/core_language/08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.3, Ensure that the verdict returned from a test case to the control-part does not influence the execution of a second test case. The result of the last test case execution corresponds to the overall test verdict. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_0803_ModuleControlPart_001 { + +type component GeneralComp {} + +testcase TC_Sem_0803_ModuleControlPart_001() runs on GeneralComp { + setverdict(pass); +} + +testcase TC_Sem_0803_ModuleControlPart_001_second(verdicttype p_passthroughVerdict) runs on GeneralComp { + if (match(p_passthroughVerdict, getverdict) and match(getverdict, none) ) { // verdict should be none. + setverdict(fail); + } else { + setverdict(pass); + } +} + + +control { + var verdicttype v_myverdict; + v_myverdict := execute(TC_Sem_0803_ModuleControlPart_001()); + execute(TC_Sem_0803_ModuleControlPart_001_second(v_myverdict)); +} + +} \ No newline at end of file diff --git a/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn new file mode 100644 index 0000000..6e2cca0 --- /dev/null +++ b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.3, Ensure that the module control is able to accept execute statements. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0803_ModuleControlPart_001 { + +type component GeneralComp {} + +testcase TC_Syn_0803_ModuleControlPart_001() runs on GeneralComp { + setverdict(pass); +} + +control { + execute(TC_Syn_0803_ModuleControlPart_001()); +} + +} \ No newline at end of file diff --git a/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn new file mode 100644 index 0000000..7cfc2ca --- /dev/null +++ b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.3, Ensure that the module control part with a few commonly used stateents is accepted. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Syn_0803_ModuleControlPart_002 { + +type component GeneralComp {} + +type record MyRecordType { + integer field1, + charstring field2 +} + +testcase TC_Syn_0803_ModuleControlPart_002() runs on GeneralComp { + setverdict(pass); +} + +control { + var integer v_i := 1; + const charstring v_hello := "Hello World"; + timer t_mytimer; + t_mytimer.start(1.0); + if (v_i == 1) { + execute(TC_Syn_0803_ModuleControlPart_002(), 5.0); + } else { + log("something went wrong"); + } + t_mytimer.stop; +} + +} \ No newline at end of file diff --git a/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn new file mode 100644 index 0000000..4b43681 --- /dev/null +++ b/core_language/08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:8.3, Ensure that an empty control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_0803_ModuleControlPart_003 { + +control { + +} + +} \ No newline at end of file diff --git a/core_language/08_modules/NOTES b/core_language/08_modules/NOTES new file mode 100644 index 0000000..1658e9e --- /dev/null +++ b/core_language/08_modules/NOTES @@ -0,0 +1 @@ +- TODO: add more tests. Pretty basic currently. \ No newline at end of file diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn new file mode 100644 index 0000000..e854216 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Ensure that a port owned by a component cannot be connected with two other ports + ** @verdict pass reject + ** @configuration port:broadcast + ***************************************************/ + +/*NOTE: see Figure 7(c): Two components (A and B with two ports). + * ERROR: Port A connects to port B1 and port B2, this is not allowed + * */ + +module NegSem_0901_Communication_ports_001{ + + + type component GeneralComp{ + port IntegerInputPortType messagePortA,messagePortB; + }; + + type port IntegerInputPortType message { + inout integer + } + + + +testcase TC_NegSem_0901_Communication_ports_001() runs on GeneralComp system GeneralComp { + +// generate test components + var GeneralComp MycompA; + var GeneralComp MycompB; + MycompA := GeneralComp.create; + MycompB := GeneralComp.create; + +// make the connections between ports + connect(MycompA:messagePortA,MycompB:messagePortA); + connect(MycompA:messagePortA,MycompB:messagePortB); //Error: not allowed, MycompA messagePortA is already connected to MycompB messagePortA +} +control{ + execute(TC_NegSem_0901_Communication_ports_001()); +} +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn new file mode 100644 index 0000000..8690ddb --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that it is not possible to connect a mapped port + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(f): connection of two TSI ports is not allowed + * */ + +module NegSem_0901_Communication_ports_002{ + + + type port loopbackPort message { + inout integer + } + type port MyPort message { + inout integer + } + +type component GeneralComp { + port loopbackPort messagePort; + port MyPort messagePortB; + +} + +testcase TC_NegSem_0901_Communication_ports_002() runs on GeneralComp { + +connect(mtc:messagePort,mtc:messagePortB); // not allowed + +} + +control{ + execute(TC_NegSem_0901_Communication_ports_002()); +} + +} diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn new file mode 100644 index 0000000..b3f816a --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that it is not possible to connect a port with two other ports owned by the same component + ** @verdict pass reject + ** @configuration port:broadcast + ***************************************************/ + +/*NOTE: see Figure 7(a): MyCompA has 3 ports and A2 shall not be connected to A1 and A3 both + * */ + +module NegSem_0901_Communication_ports_003{ + + type charstring address; + type port IntegerInputPortType message { + inout integer + } + +type component MycompA { // MyCompA has 3 ports + port IntegerInputPortType messagePortA1,messagePortA2,messagePortA3 +} + +testcase TC_NegSem_0901_Communication_ports_003() runs on MycompA { + +connect(mtc:messagePortA1,mtc:messagePortA2); +connect(mtc:messagePortA2,mtc:messagePortA3); // Error: this is not allowed + } + +control{ + execute(TC_NegSem_0901_Communication_ports_003()); +} + +} diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_004.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_004.ttcn new file mode 100644 index 0000000..065b97b --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_004.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that it is not possible to map a connected port + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(b): GeneralComp port p1 is mapped to a TSI port P1. + * Therefore mapping GeneralComp port p2 with TSI port P1 gives an error. + * */ + + + +module NegSem_0901_Communication_ports_004 { + + type port MyPort message { + inout integer + } + + type component GeneralComp + { + port MyPort p1; + port MyPort p2; + } + + type component SystemComp + { + port MyPort p1; + } + + testcase TC_NegSem_0901_Communication_ports_004() runs on GeneralComp system SystemComp { + +//create a test component + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + map(self:p1, system:p1); // error: v_ptc.p1 is already mapped to SystemComp.p1 + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_004()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_005.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_005.ttcn new file mode 100644 index 0000000..fc94427 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_005.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that it is not possible to connect a port with a port owned by the same component + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(e): GeneralComp have two ports (p1 and p2). + * ERROR: Port p1 is connected to p1 (self), therefore connection between p1 and p2 gives an error + * */ + + +module NegSem_0901_Communication_ports_005 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + testcase TC_NegSem_0901_Communication_ports_005() runs on GeneralComp system GeneralComp { + + connect(self:p1, self:p1); + connect(self:p1, self:p2); // error expected here, since p1 is already connected to p1. + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_005()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_006.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_006.ttcn new file mode 100644 index 0000000..9b085ab --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_006.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that only 1:1 connection between component port and TSI are allowed + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(d): MyCompA has a port (p1). + * ERROR: TSI have two ports p1 and p2. GeneralComp port S1 can not be connected to both p1 and p2. + * */ + +module NegSem_0901_Communication_ports_006 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P S1; + } + + type component MyComp + { + port P p1, p2; + } + + testcase TC_NegSem_0901_Communication_ports_006() runs on GeneralComp system GeneralComp { + +// Creating test component: + var MyComp MycompA; + MycompA := MyComp.create; + +// make the connections between ports: + connect(self:S1,MycompA:p1); + connect(self:S1,MycompA:p2); //not allowed, since p1 is already connected to S1 + + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_006()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_007.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_007.ttcn new file mode 100644 index 0000000..7e12089 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_007.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a two TSI port cannot be connected + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(f): Two TSI port cannot be connected + * */ + +module NegSem_0901_Communication_ports_007 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + testcase TC_NegSem_0901_Communication_ports_007() runs on GeneralComp system GeneralComp { + var GeneralComp s := system; + map(s:p2, system:p1); // error: p1 and p2 cannot be connected + + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_007()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_008.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_008.ttcn new file mode 100755 index 0000000..1698688 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_008.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that mapping an already connected port is not allowed + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(g): Two components (A and B). MycompA:p1 is connected to MycompB:p1. + * Therefore mapping MycompB to TSI port p1 is not allowed + * */ + +module NegSem_0901_Communication_ports_008 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1; + } + + testcase TC_NegSem_0901_Communication_ports_008() runs on GeneralComp system GeneralComp { + + // generate test components + var GeneralComp MycompA; + var GeneralComp MycompB; + MycompA := GeneralComp.create; + MycompB := GeneralComp.create; + + connect(MycompA:p1,MycompB:p1); + map(MycompB:p1,system:p1); // not allowed, since MyCompB:p1 is already connected to MyCompA:p1 + + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_008()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_009.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_009.ttcn new file mode 100644 index 0000000..89a7196 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_009.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that connections within the test system interface are not allowed + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction a): Connections within the test system interface are not allowed. + +module NegSem_0901_Communication_ports_008 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + testcase TC_NegSem_0901_Communication_ports_008() runs on GeneralComp system GeneralComp { + map(system:p1, system:p1); // mapping system port to itself: error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_008()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_010.ttcn b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_010.ttcn new file mode 100644 index 0000000..a931d16 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_010.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a two TSI port cannot be connected + ** @verdict pass reject + ***************************************************/ + +/*NOTE: see Figure 7(f): Two TSI port cannot be connected + * */ + +module NegSem_0901_Communication_ports_010 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + type component General_System_Comp + { + port P p_system_1, p_system_2; + } + + testcase TC_NegSem_0901_Communication_ports_010() runs on GeneralComp system General_System_Comp { + + + connect(system:p_system_1, system:p_system_2); // error: p_system_1 and p_system_2 cannot be connected + + setverdict(pass); + } + + control{ + execute(TC_NegSem_0901_Communication_ports_010()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_001.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_001.ttcn new file mode 100644 index 0000000..505c532 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_001.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the IUT correctly handles loopback message + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Loopback test: messagePort is a loopback port and sends (2). If receives(2) pass, else failed. +module Sem_0901_Communication_ports_001{ + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_0901_Communication_ports_001() runs on GeneralComp { + + + messagePort.send(2); //can send also in-line template + + alt { + [] messagePort.receive(2) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_0901_Communication_ports_001()); +} + +} diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_002.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_002.ttcn new file mode 100644 index 0000000..34db430 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_002.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the the IUT receives the message sent by mycompA + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration port:broadcast + ***************************************************/ + +// Two component mycompA and B message exchange +module Sem_0901_Communication_ports_002{ + + type port myport message { + inout integer + } + + +type component Mysystem + { + timer t_rec,t_rec2; + port myport messagePort; + } +function fsend() runs on Mysystem { +messagePort.send(2); + t_rec2.start(20.0); + alt { + [] messagePort.receive(3) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + [] t_rec2.timeout { + setverdict( inconc ); + } + } +t_rec2.stop; +} +function frec() runs on Mysystem { + t_rec.start( 20.0 ); + alt { + [] messagePort.receive(2) { + messagePort.send(3); + setverdict( pass ); + } + [] messagePort.receive { + setverdict( fail ); + } + [] t_rec.timeout { + setverdict( inconc ); + } + } +t_rec.stop; +} + +testcase TC_Sem_0901_Communication_ports_002() runs on Mysystem system Mysystem { + var Mysystem MyCompA; + var Mysystem MyCompB; + +MyCompA:=Mysystem.create; +MyCompB:=Mysystem.create; +connect(MyCompA:messagePort,MyCompB:messagePort); +connect(MyCompB:messagePort,MyCompA:messagePort); + + +MyCompB.start(frec()); +MyCompA.start(fsend()); + +//MyCompB.stop; +//MyCompA.stop; + + MyCompB.done; + MyCompA.done; + +} +control{ + execute(TC_Sem_0901_Communication_ports_002()); +} +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_003.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_003.ttcn new file mode 100644 index 0000000..826ffd7 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_003.ttcn @@ -0,0 +1,97 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the the IUT receives the message sent by mycompB and mycompC + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration port:broadcast + ***************************************************/ + +// 3 component message exchange +module Sem_0901_Communication_ports_003{ + + type port myport message { + inout integer + } + + +type component Mysystem + { + timer t_rec,t_rec2; + port myport messagePort; + } +function fsend() runs on Mysystem { + messagePort.send(2) to all component; + t_rec2.start(30.0); + alt { + [] messagePort.receive(3) { + setverdict(pass); + t_rec2.stop; + } + [] messagePort.receive { + setverdict(fail); + } + [] t_rec2.timeout { + setverdict( inconc ); + } + } +t_rec2.stop; +} +function frec() runs on Mysystem { + t_rec.start( 10.0 ); + alt { + [] messagePort.receive(2) { + messagePort.send(3); + setverdict( pass ); + } + [] messagePort.receive { + setverdict( fail ); + } + [] t_rec.timeout { + setverdict( inconc ); + } + } +t_rec.stop; +} + +testcase TC_Sem_0901_Communication_ports_003() runs on Mysystem system Mysystem { + var Mysystem MyCompA; + var Mysystem MyCompB; + var Mysystem MyCompC; + +MyCompA:=Mysystem.create; +MyCompB:=Mysystem.create; +MyCompC:=Mysystem.create; +connect(MyCompA:messagePort,MyCompB:messagePort); +connect(MyCompB:messagePort,MyCompA:messagePort); +connect(MyCompA:messagePort,MyCompC:messagePort); +connect(MyCompC:messagePort,MyCompA:messagePort); + + +MyCompB.start(frec()); +MyCompC.start(frec()); +MyCompA.start(fsend()); + +/* alt { + [] messagePort.receive(3) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + }*/ + +// wait until all components finish +MyCompB.done; +MyCompC.done; +MyCompA.done; + +MyCompB.stop; +MyCompC.stop; +MyCompA.stop; + +} +control{ + execute(TC_Sem_0901_Communication_ports_003()); +} +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_004.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_004.ttcn new file mode 100644 index 0000000..158fbb0 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the IUT correctly handles message exch. between ports + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration port:broadcast + ***************************************************/ + +// GeneralComp has two ports. mess.portA sends a message to messageportB. +module Sem_0901_Communication_ports_004{ + + + type port IntegerPortType message { + inout integer + } + + +type component GeneralComp { + port IntegerPortType messagePortA,messagePortB +} + +testcase TC_Sem_0901_Communication_ports_004() runs on GeneralComp { + + + messagePortA.send(2); //can send also in-line template + + alt { + [] messagePortB.receive(2) { + setverdict(pass); + } + [] messagePortB.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_0901_Communication_ports_004()); +} + +} diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_005.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_005.ttcn new file mode 100644 index 0000000..11a817b --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_005.ttcn @@ -0,0 +1,100 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the the IUT receives the message sent by mycompA + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration port:broadcast + ***************************************************/ + +//Mycomp A has two ports and MycompB has two ports. +module Sem_0901_Communication_ports_005{ + + type port myport message { + inout integer + } + + +type component Mysystem + { + timer t_rec,t_rec2; + port myport messagePort1,messagePort2; + } +function fsend() runs on Mysystem { +messagePort1.send(1); +messagePort2.send(2); + t_rec2.start(20.0); + alt { + [] messagePort1.receive(3) { + setverdict(pass); + } + [] messagePort1.receive { + setverdict(fail); + } + [] t_rec2.timeout { + setverdict( inconc ); + } + } + alt { + [] messagePort2.receive(4) { + setverdict(pass); + } + [] messagePort2.receive { + setverdict(fail); + } + [] t_rec2.timeout { + setverdict( inconc ); + } + } +t_rec2.stop; +} +function frec() runs on Mysystem { + t_rec.start( 20.0 ); + alt { + [] messagePort1.receive(1) { + messagePort1.send(3); + setverdict( pass ); + } + [] messagePort1.receive { + setverdict( fail ); + } + [] t_rec.timeout { + setverdict( inconc ); + } + } + alt { + [] messagePort2.receive(2) { + messagePort2.send(4); + setverdict( pass ); + } + [] messagePort2.receive { + setverdict( fail ); + } + [] t_rec.timeout { + setverdict( inconc ); + } + } +t_rec.stop; +} + +testcase TC_Sem_0901_Communication_ports_005() runs on Mysystem system Mysystem { + var Mysystem MyCompA; + var Mysystem MyCompB; + +MyCompA:=Mysystem.create; +MyCompB:=Mysystem.create; +connect(MyCompA:messagePort1,MyCompB:messagePort1); +connect(MyCompB:messagePort2,MyCompA:messagePort2); + + +MyCompB.start(frec()); +MyCompA.start(fsend()); + +// MyCompB.stop; +// MyCompA.stop; +MyCompB.done; +MyCompA.done; +} +control{ + execute(TC_Sem_0901_Communication_ports_005()); +} +} diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_006.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_006.ttcn new file mode 100644 index 0000000..04e66be --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_006.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a port can connect to itself + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Figure 6: Allowed connections, connection scheme e) + +module Sem_0901_Communication_ports_006 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_0901_Communication_ports_006() runs on GeneralComp system GeneralComp { + connect(self:p, self:p); + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_0901_Communication_ports_006()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_007.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_007.ttcn new file mode 100644 index 0000000..be79a13 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_007.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a port can connect to another port of the same component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Figure 6: Allowed connections, connection scheme f) + +module Sem_0901_Communication_ports_007 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + testcase TC_Sem_0901_Communication_ports_007() runs on GeneralComp system GeneralComp { + connect(self:p1, self:p2); + if(p1.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_0901_Communication_ports_007()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_008.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_008.ttcn new file mode 100644 index 0000000..1b393e6 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_008.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that more than one component port can mapped to a single system port + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Figure 6: Allowed connections, connection scheme h) + +module Sem_0901_Communication_ports_008 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkMapped() runs on GeneralComp + { + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_0901_Communication_ports_007() runs on GeneralComp system GeneralComp { + // components are created alive so that their mappings are not destroyed when behaviour stops + var GeneralComp v_ptc1 := GeneralComp.create alive, + v_ptc2 := GeneralComp.create alive; + map(self:p, system:p); + map(v_ptc1:p, system:p); + map(v_ptc2:p, system:p); + v_ptc1.start(checkMapped()); + v_ptc2.start(checkMapped()); + checkMapped(); + all component.done; + } + + control{ + execute(TC_Sem_0901_Communication_ports_007()); + } +} + diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_009.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_009.ttcn new file mode 100755 index 0000000..3bd9fff --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_009.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a component port can be connected to two other component ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/*NOTE: figure 6(g): A component port can be connected to two other component ports */ + +module Sem_0901_Communication_ports_009 { + + type port MyPort message { + inout integer + } + + type component GeneralComp + { + port MyPort p; + } + + function checkConnected() runs on GeneralComp + { + if(p.checkstate("Connected")) { + setverdict(pass,"Connected"); + } else { + setverdict(fail,"Not Connected"); + } + } + + testcase TC_Sem_0901_Communication_ports_009() runs on GeneralComp system GeneralComp { + +//creating 3 components: + var GeneralComp v_ptcA := GeneralComp.create; + var GeneralComp v_ptcB := GeneralComp.create; + var GeneralComp v_ptcC := GeneralComp.create; + + + connect(v_ptcA:p, v_ptcB:p); + connect(v_ptcA:p, v_ptcC:p); + + v_ptcB.start(checkConnected()); + v_ptcC.start(checkConnected()); + + } + + control{ + execute(TC_Sem_0901_Communication_ports_009()); + } +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_010.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_010.ttcn new file mode 100755 index 0000000..eed5d22 --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_010.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a component port can be mapped to TSI port + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* NOTE: figure 6(b): Ensure that a component port can be mapped to a TSI port */ + +module Sem_0901_Communication_ports_010 { + + type port MyPort message { + inout integer + } + + type component GeneralComp + { + port MyPort p; + } + + type component MyCompA + { + port MyPort p; + } + + function checkMapped() runs on MyCompA + { + if(p.checkstate("Mapped")) { + setverdict(pass,"Mapped"); + } else { + setverdict(fail,"Not Mapped"); + } + } + + testcase TC_Sem_0901_Communication_ports_010() runs on MyCompA system GeneralComp { + + map(self:p,system:p); + checkMapped(); + } + + control{ + execute(TC_Sem_0901_Communication_ports_010()); + } +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_011.ttcn b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_011.ttcn new file mode 100755 index 0000000..061412f --- /dev/null +++ b/core_language/09_test_configurations/0901_communication_ports/Sem_0901_Communication_ports_011.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 478 + ** @version 0.0.1 + ** @purpose 1:9.1, Verify that a component ports can be mapped to TSI ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* NOTE: figure 6(d): Ensure that component ports can be mapped to a TSI ports */ + +module Sem_0901_Communication_ports_011 { + + type port MyPort message { + inout integer + } + + type component GeneralComp + { + port MyPort p1,p2; + } + + type component MyComp + { + port MyPort p1,p2; + } + function checkMapped() runs on MyComp + { + if(p1.checkstate("Mapped") and p2.checkstate("Mapped")) { + setverdict(pass,"Mapped"); + } else { + setverdict(fail,"Mapped"); + } + } + + testcase TC_Sem_0901_Communication_ports_011() runs on MyComp system GeneralComp { + + map(self:p1, system:p1); + map(self:p2, system:p2); + + checkMapped(); + } + + control{ + execute(TC_Sem_0901_Communication_ports_011()); + } +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_001.ttcn b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_001.ttcn new file mode 100644 index 0000000..e306ee4 --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the IUT correctly handles the assoc. of two port to the same system interface + ** @verdict pass reject + ***************************************************/ +//Two comp. ports are connected to the same system interface port (not allowed). +module NegSem_0902_Communication_ports_001{ + + type port loopbackPort message { + inout integer + } + + type port MyMessagePortType message { + inout integer + } + + +type component GeneralComp + { + port MyMessagePortType MycomportA, MycomportB + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } +// MyTestSystemInterface is the test system interface +testcase TC_NegSem_0902_Communication_ports_001() runs on GeneralComp system MyTestSystemInterface { +// establishing the port connections +map(mtc:MycomportA, system:messagePort); +map(mtc:MycomportB, system:messagePort); // not allowed + +} +control{ + execute(TC_NegSem_0902_Communication_ports_001()); +} +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_002.ttcn b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_002.ttcn new file mode 100644 index 0000000..246628d --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the mycomp is connected to two system interface port. + ** @verdict pass reject + ***************************************************/ + +//It is not allowed to connect one port connect to two system interface port. +module NegSem_0902_Communication_ports_002{ + + type port loopbackPort message { + inout integer + } + type port MyMessagePortType message { + inout integer + } + +type component GeneralComp + { + port MyMessagePortType Mycomport + } + +type component MyTestSystemInterface + { + port loopbackPort messagePortA,messagePortB + } +// MyTestSystemInterface is the test system interface +testcase TC_NegSem_0902_Communication_ports_002() runs on GeneralComp system MyTestSystemInterface { +// establishing the port connections +map(mtc:Mycomport, system:messagePortA); +map(mtc:Mycomport, system:messagePortB); // not allowed + +setverdict(fail); + +} +control{ + execute(TC_NegSem_0902_Communication_ports_002()); +} +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_003.ttcn b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_003.ttcn new file mode 100644 index 0000000..2423dea --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_003.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the two system interf. port cannot connect + ** @verdict pass reject + ***************************************************/ + +//Two system interface ports are not allowed to connect +module NegSem_0902_Communication_ports_003{ + + type port loopbackPort message { + inout integer + } +type component MyTestSystemInterface + { + port loopbackPort messagePortA,messagePortB + } +// MyTestSystemInterface is the test system interface + +testcase TC_NegSem_0902_Communication_ports_003() runs on MyTestSystemInterface { +// establishing the port connections +map(system:messagePortA, system:messagePortB); // not allowed + +setverdict(fail); + +} +control{ + execute(TC_NegSem_0902_Communication_ports_003()); +} +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_004.ttcn b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_004.ttcn new file mode 100644 index 0000000..b595000 --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/NegSem_0902_Communication_ports_004.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the a connected port cannot be mapped + ** @verdict pass reject + ***************************************************/ + +// A connected port cannot be mapped with a system interface port +module NegSem_0902_Communication_ports_004{ + + type port loopbackPort message { + inout integer + } +type port IntegerOutputPortType message { + inout integer + } + + +type component MyTestSystemInterface + { + port IntegerOutputPortType messagePort + } +// MyTestSystemInterface is the test system interface +testcase TC_NegSem_0902_Communication_ports_004() runs on MyTestSystemInterface system MyTestSystemInterface { +// establishing the port connections + var MyTestSystemInterface MycompA; + var MyTestSystemInterface MycompB; +MycompA := MyTestSystemInterface.create; +MycompB := MyTestSystemInterface.create; + +connect(MycompA:messagePort,MycompB:messagePort); +map(MycompB:messagePort, system:messagePort); // not allowed this type of connection + +} +control{ + execute(TC_NegSem_0902_Communication_ports_004()); +} +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_001.ttcn b/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_001.ttcn new file mode 100644 index 0000000..49470a3 --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_001.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the IUT port correctly mapped with a system interface + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Mycompport A is mapped with a system interface +module Sem_0902_Communication_ports_001{ + + type port loopbackPort message { + inout integer + } +type port IntegerOutputPortType message { + inout integer + } + +type component GeneralComp + { + + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } +// MyTestSystemInterface is the test system interface +testcase TC_Sem_0902_Communication_ports_001() runs on GeneralComp system MyTestSystemInterface { +// establishing the port connections +map(mtc:MycomportA, system:messagePort); + + + MycomportA.send(2); //can send also in-line template + + alt { + [] MycomportA.receive(2) { + setverdict(pass); + } + [] MycomportA.receive { + setverdict(fail); + } + } +} +control{ + execute(TC_Sem_0902_Communication_ports_001()); +} +} \ No newline at end of file diff --git a/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_002.ttcn b/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_002.ttcn new file mode 100644 index 0000000..336ac5a --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/Sem_0902_Communication_ports_002.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that the IUTs two ports are mapped correctly to system interfaces + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Two ports are mapped to two system interface +module Sem_0902_Communication_ports_002{ + + type port loopbackPort message { + inout integer + } + type port MyMessagePortType message { + inout integer + } + +type component GeneralComp +{ +var integer v_received1:=0; +var integer v_received2:=0; +port MyMessagePortType myPortA,myPortB +} + +type component MyTestSystemInterface + { + port loopbackPort messagePortA,messagePortB + } + +// MyTestSystemInterface is the test system interface +testcase TC_Sem_0902_Communication_ports_002() runs on GeneralComp system MyTestSystemInterface { +// establishing the port connections +map(mtc:myPortA, system:messagePortA); +map(mtc:myPortB, system:messagePortB); + + + myPortA.send(2); //can send also in-line template + myPortB.send(3); + + myPortA.receive(integer:?) -> value v_received1 ; + myPortB.receive(integer:?) -> value v_received2 ; + + if ((v_received1+v_received2)==5) + { + setverdict(pass); + } + else + { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_0902_Communication_ports_002()); +} + +} diff --git a/core_language/09_test_configurations/0902_test_system_interface/Syn_0902_Communication_ports_001.ttcn b/core_language/09_test_configurations/0902_test_system_interface/Syn_0902_Communication_ports_001.ttcn new file mode 100644 index 0000000..647f72f --- /dev/null +++ b/core_language/09_test_configurations/0902_test_system_interface/Syn_0902_Communication_ports_001.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:9, Ensure that two component can be mapped by one system interface +** @verdict pass accept, noexecution + ***************************************************/ + //Two components are mapped to the same system interface +module Syn_0902_Communication_ports_001{ + + type port myPort message { + inout integer + } + + +type component MyTestSystemInterface + { + port myPort messagePort; + } + +// MyTestSystemInterface is the test system interface +testcase TC_Syn_0902_Communication_ports_001() runs on MyTestSystemInterface system MyTestSystemInterface { +// establishing the port connections + var MyTestSystemInterface MycompA; + var MyTestSystemInterface MycompB; +MycompA := MyTestSystemInterface.create; +MycompB := MyTestSystemInterface.create; + +map(MycompA:messagePort, system:messagePort); +map(MycompB:messagePort, system:messagePort); + +} +control{ + execute(TC_Syn_0902_Communication_ports_001()); +} +} \ No newline at end of file diff --git a/core_language/10_constants/NOTES b/core_language/10_constants/NOTES new file mode 100644 index 0000000..e293a84 --- /dev/null +++ b/core_language/10_constants/NOTES @@ -0,0 +1,3 @@ +- TODO: missing test for init with functions +- TODO: missing test for init with expressions +- TODO: missing test for init structured types with optional fields diff --git a/core_language/10_constants/NegSem_10_Constants_001.ttcn b/core_language/10_constants/NegSem_10_Constants_001.ttcn new file mode 100644 index 0000000..0fbd5e2 --- /dev/null +++ b/core_language/10_constants/NegSem_10_Constants_001.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Assign rnd to constant used in type, not allowed since constant expressions used in types have to be known at compile-time. + ** @verdict pass reject + ***************************************************/ +module NegSem_10_Constants_001 { + + const float c_i := rnd(314E-2); // not allowed by standard + type float MyFloat (c_i); + + type component GeneralComp {} + + testcase TC_NegSem_10_Constants_001() runs on GeneralComp { + var MyFloat v_f := c_i; + log(v_f); + setverdict(pass); + } + + control{ + execute(TC_NegSem_10_Constants_001()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/NegSem_10_Constants_002.ttcn b/core_language/10_constants/NegSem_10_Constants_002.ttcn new file mode 100644 index 0000000..3249855 --- /dev/null +++ b/core_language/10_constants/NegSem_10_Constants_002.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, A value is assigned only once to a constant + ** @verdict pass reject + ***************************************************/ +module NegSem_10_Constants_002 { + + const float c_i := 3.14; + + + type component GeneralComp {} + + testcase TC_NegSem_10_Constants_002() runs on GeneralComp { + c_i := 3.15; //error because value is assigned only once to the constant + } + + control{ + execute(TC_NegSem_10_Constants_002()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/NegSem_10_Constants_003.ttcn b/core_language/10_constants/NegSem_10_Constants_003.ttcn new file mode 100644 index 0000000..a318766 --- /dev/null +++ b/core_language/10_constants/NegSem_10_Constants_003.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Constant shall not be of port type + ** @verdict pass reject + ***************************************************/ +module NegSem_10_Constants_003 { + + //only for negSyn constant shall not be of port type + type port MyMessagePortType message + { + inout integer + } + + + type component GeneralComp { + } + + testcase TC_NegSem_10_Constants_003() runs on GeneralComp { + const MyMessagePortType c_port:= 5;//error - constant shall not be of port type + }//end testcase + + control{ + execute(TC_NegSem_10_Constants_003()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/NegSem_10_Constants_004.ttcn b/core_language/10_constants/NegSem_10_Constants_004.ttcn new file mode 100755 index 0000000..f64acf1 --- /dev/null +++ b/core_language/10_constants/NegSem_10_Constants_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:10, Ensure that dot notation of a field in a record, which actual value is null shall cause an error + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: +Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + +module NegSem_10_Constants_004 { + + type integer address; + type record MyRecordType + { + address field1, + integer field2 optional + }; + + type component GeneralComp { + } + + testcase TC_NegSem_10_Constants_004() runs on GeneralComp { + + var MyRecordType R1:= {field1 := null, + field2 := 2}; + + const integer C1 := R1.field1; //error + + if (match(C1, R1.field1)) { setverdict(pass,"match") } + else { setverdict(fail) } + } + + control{ + execute(TC_NegSem_10_Constants_004()); + } +} diff --git a/core_language/10_constants/NegSem_10_Constants_005.ttcn b/core_language/10_constants/NegSem_10_Constants_005.ttcn new file mode 100755 index 0000000..c2506f6 --- /dev/null +++ b/core_language/10_constants/NegSem_10_Constants_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:10, Ensure that index notation of a field in a set of type, which actual value is null shall cause an error + ** @verdict pass reject + ***************************************************/ + +/* The following requirements are tested: +Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + +module NegSem_10_Constants_005 { + + type integer address; + type default MyDef; + type set of address MySetofInt; + + type component GeneralComp { + } + + testcase TC_NegSem_10_Constants_005() runs on GeneralComp { + + var MySetofInt R1:= {[0] := null}; + var MyDef R2:= null; + + const default C2 := R2; //allowed + const integer C1 := R1[0]; //error + + if (match(C1,R1[0])) { setverdict(pass,"match") } + else { setverdict(fail) } + } + + control{ + execute(TC_NegSem_10_Constants_005()); + } +} diff --git a/core_language/10_constants/Sem_10_Constants_001.ttcn b/core_language/10_constants/Sem_10_Constants_001.ttcn new file mode 100644 index 0000000..e616da8 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_001.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Assign and read constants + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_001 { + + const integer c_i := 5; + + type component GeneralComp {} + + testcase TC_Sem_10_Constants_001() runs on GeneralComp { + const integer c_j := 5; + + if (c_i == c_j){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_10_Constants_001()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_002.ttcn b/core_language/10_constants/Sem_10_Constants_002.ttcn new file mode 100644 index 0000000..744800e --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_002.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Assign and read constants values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_002 { + + const integer c_ai[3] := {1, 3, 5}; + + type component GeneralComp {} + + testcase TC_Sem_10_Constants_002() runs on GeneralComp { + const integer c_j := 5; + + if (c_ai[2] == c_j){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_10_Constants_002()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_003.ttcn b/core_language/10_constants/Sem_10_Constants_003.ttcn new file mode 100644 index 0000000..3ee70f5 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_003.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Single expression and constant values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_003 { + + const float c_p :=3.0; + const float c_i :=0.14; + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_003() runs on GeneralComp { + + const float c_pi := (c_p+c_i); + + if (c_pi == 3.14){ + setverdict(pass); + } + else { + setverdict(fail); + } + }//end testcase + + control{ + execute(TC_Sem_10_Constants_003()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_004.ttcn b/core_language/10_constants/Sem_10_Constants_004.ttcn new file mode 100644 index 0000000..b1fb761 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_004.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Constant used within invoke function with return + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_004 { + + type component GeneralComp { + } + //2 + function f_Sem_10_Constants_004(integer p_int) runs on GeneralComp return integer{ + const integer c_i := 2; + if(p_int==0) + { + return c_i; + } + else + { + return 0; + } + } + + testcase TC_Sem_10_Constants_004() runs on GeneralComp { + const integer c_int := 2; + if (f_Sem_10_Constants_004(0)==c_int) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } //end testcase + + control{ + execute(TC_Sem_10_Constants_004()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_005.ttcn b/core_language/10_constants/Sem_10_Constants_005.ttcn new file mode 100644 index 0000000..41f1a52 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Constant used within predefined function + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_005 { + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_005() runs on GeneralComp { + + const integer c_j := 5; + const charstring c_str_j := int2str(c_j); + + if (c_str_j=="5"){ + setverdict(pass); + } + else { + setverdict(fail); + } + }//end testcase + + control{ + execute(TC_Sem_10_Constants_005()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_006.ttcn b/core_language/10_constants/Sem_10_Constants_006.ttcn new file mode 100644 index 0000000..c7cf2a6 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Record type used as a constant + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_006 { + + type record MyRecordType + { + bitstring field1, + boolean field2, + charstring field3 + }; + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_006() runs on GeneralComp { + const MyRecordType c_mRT1 := {'1010'B,true,"string"}; + const MyRecordType c_mRT2 := {field1 := '1010'B, + field2 := true, + field3 := "string"}; + + if (c_mRT1==c_mRT2) + { + setverdict(pass); + } + else { + setverdict(fail); + } + }// end testcase + + control{ + execute(TC_Sem_10_Constants_006()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_007.ttcn b/core_language/10_constants/Sem_10_Constants_007.ttcn new file mode 100644 index 0000000..918898a --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_007.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Record type used as a constant with optional fields + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_007 { + + type record MyRecordType + { + bitstring field1, + boolean field2 optional, + charstring field3 optional + + }; + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_007() runs on GeneralComp { + const MyRecordType c_mRT3 := {field1 := '1010'B, + field2 := -, + field3 := -}; + + if (not isbound(c_mRT3.field2) and + not isbound(c_mRT3.field3) and + match(c_mRT3.field1, '1010'B)) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_10_Constants_007()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_008.ttcn b/core_language/10_constants/Sem_10_Constants_008.ttcn new file mode 100644 index 0000000..1c7bcf1 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_008.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Set type used as a constant + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_008 { + + type set MySetType + { + bitstring field1, + boolean field2, + charstring field3 + }; + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_008() runs on GeneralComp { + const MySetType c_mST1 := {'1010'B,true,"string"}; + const MySetType c_mST2 := {field1 := '1010'B, + field2 := true, + field3 := "string"}; + + if (c_mST1==c_mST2) + { + setverdict(pass); + } + else { + setverdict(fail); + } + }// end testcase + + control{ + execute(TC_Sem_10_Constants_008()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Sem_10_Constants_009.ttcn b/core_language/10_constants/Sem_10_Constants_009.ttcn new file mode 100644 index 0000000..5c57f33 --- /dev/null +++ b/core_language/10_constants/Sem_10_Constants_009.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:10, Set type used as a constant with optional fields + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_10_Constants_009 { + + type record MySetType + { + bitstring field1, + boolean field2 optional, + charstring field3 optional + + }; + + type component GeneralComp { + } + + testcase TC_Sem_10_Constants_009() runs on GeneralComp { + const MySetType c_mST3 := {field1 := '1010'B, + field2 := -, + field3 := -}; + + if (not isbound(c_mST3.field2) and + not isbound(c_mST3.field3) and + match(c_mST3.field1, '1010'B)) + { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_10_Constants_009()); + } +} \ No newline at end of file diff --git a/core_language/10_constants/Syn_10_Constants_001.ttcn b/core_language/10_constants/Syn_10_Constants_001.ttcn new file mode 100644 index 0000000..dd9acae --- /dev/null +++ b/core_language/10_constants/Syn_10_Constants_001.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Create constants + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_10_Constants_001 { + const integer c_i1 := 5, c_i2 := 3; + const float c_f := 3.14E-4; + const boolean c_b := true, c_b2 := false; + const bitstring c_bs := '1011'B; +} \ No newline at end of file diff --git a/core_language/10_constants/Syn_10_Constants_002.ttcn b/core_language/10_constants/Syn_10_Constants_002.ttcn new file mode 100644 index 0000000..cf62e4f --- /dev/null +++ b/core_language/10_constants/Syn_10_Constants_002.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Assign default constants values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_10_Constants_002 { + const default c_d := null; +} \ No newline at end of file diff --git a/core_language/10_constants/Syn_10_Constants_003.ttcn b/core_language/10_constants/Syn_10_Constants_003.ttcn new file mode 100644 index 0000000..56013f6 --- /dev/null +++ b/core_language/10_constants/Syn_10_Constants_003.ttcn @@ -0,0 +1,11 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Assign component constants values + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_10_Constants_003 { + type component GeneralComp {} + + const GeneralComp c_c := null; +} \ No newline at end of file diff --git a/core_language/10_constants/Syn_10_Constants_004.ttcn b/core_language/10_constants/Syn_10_Constants_004.ttcn new file mode 100644 index 0000000..8fac226 --- /dev/null +++ b/core_language/10_constants/Syn_10_Constants_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:10, Define constants in different scopes + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_10_Constants_004 { + type component GeneralComp { + timer t; + const integer cv_i1 := 10; + } + + const integer c_i1 := 5; + + altstep a_Syn_10_Constants_004() runs on GeneralComp { + const integer cl_j := 12; + [] t.timeout { + const integer cl_k := 13; + } + } + + function f_Syn_10_Constants_004() runs on GeneralComp { + const integer cl_i := 2; + } + + testcase TC_Syn_10_Constants_004() runs on GeneralComp { + const integer cl_i := 3; + } + + control { + const integer cl_i := 1; + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/NOTES b/core_language/11_variables/1101_value_variables/NOTES new file mode 100644 index 0000000..d88dd44 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NOTES @@ -0,0 +1,4 @@ +- TODO: other types as integer are used +- TODO: init with functions +- TODO: init with expressions +- TODO: init structured types with optional fields diff --git a/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_001.ttcn b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_001.ttcn new file mode 100644 index 0000000..d1d11bc --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_001.ttcn @@ -0,0 +1,18 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Variables should be assigned only by values + ** @verdict pass reject + ***************************************************/ +module NegSem_1101_ValueVars_001 { + type component GeneralComp {} + + testcase TC_NegSem_1101_ValueVars_001() runs on GeneralComp { + var integer v_i := ?; // ? is not a value + setverdict(pass); + } + + control { + execute(TC_NegSem_1101_ValueVars_001()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn new file mode 100644 index 0000000..ae55a64 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.1, Ensure that partially initialized variables are evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1101_ValueVars_002 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_NegSem_1101_ValueVars_002() runs on GeneralComp { + var IntegerSet v_set := {a1:=1,a2:=omit}; + + if ( v_set == {a1:=1,a2:=omit,a3:=3} ) { //attempted use of partially initialized variable + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1101_ValueVars_002()); +} + +} diff --git a/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn new file mode 100755 index 0000000..0827936 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_003.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:11.1, Ensure that dot notation referencing to a field, which actual value is null shall cause an error. + ** @verdict pass reject + *****************************************************************/ + +/* The following requirements are tested: +Restriction h. : Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + +module NegSem_1101_ValueVars_003 { + +type component GeneralComp { +} + + type integer address; + type record MyRecordType + { + address field1, + integer field2 optional + }; + + +testcase TC_NegSem_1101_ValueVars_003() runs on GeneralComp { + var MyRecordType R1:= {field1 := null, + field2 := -}; + + var integer Myvar := R1.field1; //error + + if (match(Myvar, R1.field1)) { setverdict(pass,"match") } + else { setverdict(fail) } + } + + +control{ + execute(TC_NegSem_1101_ValueVars_003()); +} + +} diff --git a/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn new file mode 100755 index 0000000..367f6ed --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_004.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:11.1, Ensure that index notation referencing to a "set of", which actual value is null shall cause an error. + ** @verdict pass reject + *****************************************************************/ + +/* The following requirements are tested: +Restriction h. : Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + +module NegSem_1101_ValueVars_004 { + +type component GeneralComp { +} + + type integer address; + type set of address MySetofInt; + +testcase TC_NegSem_1101_ValueVars_004() runs on GeneralComp { + + var MySetofInt R1:= {[0] := null}; + + var integer Myvar := R1[0]; //error + + if (match(Myvar,R1[0])) { setverdict(pass,"match") } + else { setverdict(fail) } + } + + +control{ + execute(TC_NegSem_1101_ValueVars_004()); +} + +} diff --git a/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn new file mode 100644 index 0000000..6941d55 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSem_1101_ValueVars_005.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:11.1, Variables should be assigned only by values + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn b/core_language/11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn new file mode 100644 index 0000000..cbf0a88 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/NegSyn_1101_ValueVars_001.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Define variables in module scope + ** @verdict pass reject + ***************************************************/ +module NegSyn_1101_ValueVars_001 { + var integer v_i1 := 5; +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn new file mode 100644 index 0000000..a8c4ea5 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_001.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Define variables in different scopes + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1101_ValueVars_001 { + type component GeneralComp { + timer t; + var integer vc_i1 := 10; + } + + altstep a_Sem_1101_ValueVars_001() runs on GeneralComp { + var integer v_j := 12; + [] t.timeout { + var integer v_k := 13; + } + } + + function f_Sem_1101_ValueVars_001() runs on GeneralComp { + var integer v_i := 2; + } + + testcase TC_Sem_1101_ValueVars_001() runs on GeneralComp { + var integer v_i := 3; + f_Sem_1101_ValueVars_001(); + + t.start(1.0); + alt { + [] a_Sem_1101_ValueVars_001(); + } + + setverdict(pass); + } + + control { + var integer v_i := 1; + execute(TC_Sem_1101_ValueVars_001()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn new file mode 100644 index 0000000..9f0520c --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_002.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Define variables in different scopes + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1101_ValueVars_002 { + type component GeneralComp {} + + testcase TC_Sem_1101_ValueVars_002() runs on GeneralComp { + var boolean v_b := true; + if (v_b){ + setverdict(pass); + } + else { + setverdict(fail); + } + v_b := false; + if (not v_b){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_1101_ValueVars_002()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn new file mode 100644 index 0000000..cfc4e69 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_003.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Read and write variables + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1101_ValueVars_003 { + type component GeneralComp { + timer t; + var integer vc_ai[3] := {1, 3, 5}; + } + + testcase TC_Sem_1101_ValueVars_003() runs on GeneralComp { + var integer v_i := 3; + v_i := 5; + vc_ai[1] := 5; + + if (vc_ai[1] == v_i){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_1101_ValueVars_003()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn new file mode 100644 index 0000000..44044fa --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_004.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.1, Ensure that partially initialized variables are evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1101_ValueVars_004 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +testcase TC_Sem_1101_ValueVars_004() runs on GeneralComp { + var IntegerSet v_set := {a1:=1,a2:=omit}; + v_set.a3 := 3; + + if ( match(v_set, {a1:=1,a2:=omit,a3:=3}) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1101_ValueVars_004()); +} + +} diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn new file mode 100644 index 0000000..43493fb --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_005.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.1, Ensure that partially initialized variables are evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1101_ValueVars_005 { + +type component GeneralComp { +} + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + +function f_partial () runs on GeneralComp return IntegerSet { + return {a1:=1,a2:=omit}; +} + +testcase TC_Sem_1101_ValueVars_005() runs on GeneralComp { + var IntegerSet v_set := f_partial(); + v_set.a3 := 3; + + if ( match(v_set, {a1:=1,a2:=omit,a3:=3}) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1101_ValueVars_005()); +} + +} diff --git a/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn new file mode 100644 index 0000000..f588b56 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Sem_1101_ValueVars_006.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn b/core_language/11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn new file mode 100644 index 0000000..a403963 --- /dev/null +++ b/core_language/11_variables/1101_value_variables/Syn_1101_ValueVars_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.1, Define variables in different scopes + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_1101_ValueVars_001 { + type component GeneralComp { + var integer vc_i1 := 10; + } + + altstep a_Syn_1101_ValueVars_001() runs on GeneralComp { + var integer v_j := 12; + [] any timer.timeout { + var integer v_k := 13; + } + } + + function f_Syn_1101_ValueVars_001() runs on GeneralComp { + var integer v_i := 2; + } + + testcase TC_Syn_1101_ValueVars_001() runs on GeneralComp { + var integer v_i := 3; + } + + control { + var integer v_i := 1; + } +} \ No newline at end of file diff --git a/core_language/11_variables/1102_template_variables/NOTES b/core_language/11_variables/1102_template_variables/NOTES new file mode 100644 index 0000000..b3161e5 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NOTES @@ -0,0 +1,4 @@ +- TODO: use other types as integer +- TODO: init with functions +- TODO: init with expressions +- TODO: init structured types with optional fields diff --git a/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn new file mode 100644 index 0000000..92f3ffc --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.2, Template variables should be assigned with unitialized variables + ** @verdict pass reject + ***************************************************/ +module NegSem_1102_TemplateVars_001 { + type component GeneralComp {} + + testcase TC_NegSem_1102_TemplateVars_001() runs on GeneralComp { + var template integer v_i1; + var template integer v_i2 := v_i1; // v_i1 is not initialized + + setverdict(pass); + } + + control { + execute(TC_NegSem_1102_TemplateVars_001()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn new file mode 100644 index 0000000..fb0ae57 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_002.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.2, Ensure that partially initialized templates are evaluated correctly. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1102_TemplateVars_002 { + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type port loopbackPort message { + inout IntegerSet + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_1102_TemplateVars_002() runs on GeneralComp { + var template IntegerSet mw_pattern := {a1:=1,a2:=*}; + var IntegerSet v_set := {a1:=1,a2:=2,a3:=3} + + messagePort.send(v_set); + + alt { + [] messagePort.receive(mw_pattern) { //attempted matching of partially initialized template + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_NegSem_1102_TemplateVars_002()); +} + +} diff --git a/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn new file mode 100755 index 0000000..8ddf726 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_003.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:11.2, Ensure that dot notation referencing to a field, which actual value is null shall cause an error. + ** @verdict pass reject + *****************************************************************/ + +/* The following requirements are tested: +Restriction k.: Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + + +module NegSem_1102_TemplateVars_003 { + + type integer address; + type record MyRecordType + { + address field1, + integer field2 optional + }; + + type port loopbackPort message { + inout integer, address + } + + type component GeneralComp { + port loopbackPort messagePort + } + + + +testcase TC_NegSem_1102_TemplateVars_003() runs on GeneralComp { + + var MyRecordType R1:= {field1 := null, + field2 := -}; + + var template integer v_set := R1.field1; //error + + messagePort.send(R1.field1); + + alt { + [] messagePort.receive(v_set) { + setverdict(pass,v_set); + } + [] messagePort.receive { + setverdict(fail,v_set); + } + } +} +control{ + execute(TC_NegSem_1102_TemplateVars_003()); +} + +} diff --git a/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn new file mode 100755 index 0000000..e334385 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSem_1102_TemplateVars_004.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:11.2, Ensure that index notation referencing to a set of, which actual value is null shall cause an error. + ** @verdict pass reject + *****************************************************************/ + +/* The following requirements are tested: +Restriction k. : Using the dot notation and index notation for referencing a field, alternative or element of an address value, which actual value is null shall cause an +error. +*/ + +module NegSem_1102_TemplateVars_004 { + + type integer address; + type set of address MySet; + + type port loopbackPort message { + inout integer + } + + type component GeneralComp { + port loopbackPort messagePort + } + + + +testcase TC_NegSem_1102_TemplateVars_004() runs on GeneralComp { + + var MySet R1:= {[0] := null}; + + var template integer v_set := R1[0]; //error + + messagePort.send(R1[0]); + + alt { + [] messagePort.receive(v_set) { + setverdict(pass,v_set); + } + [] messagePort.receive { + setverdict(fail,v_set); + } + } +} +control{ + execute(TC_NegSem_1102_TemplateVars_004()); +} + +} diff --git a/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn b/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn new file mode 100644 index 0000000..382df4b --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_001.ttcn @@ -0,0 +1,9 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.2, Define template variables in module scope + ** @verdict pass reject + ***************************************************/ +module NegSyn_1102_TemplateVars_001 { + var template integer v_i1 := 5; +} \ No newline at end of file diff --git a/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn b/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn new file mode 100644 index 0000000..7fd662b --- /dev/null +++ b/core_language/11_variables/1102_template_variables/NegSyn_1102_TemplateVars_002.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn new file mode 100644 index 0000000..b5241f1 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_001.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.2, Define variables in different scopes + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1102_TemplateVars_001 { + type component GeneralComp { + timer t; + var template integer vc_i1 := omit; + } + + altstep a_Sem_1102_TemplateVars_001() runs on GeneralComp { + var integer v_j := 12; + [] t.timeout { + var template integer v_k := ?; + } + } + + function f_Sem_1102_TemplateVars_001() runs on GeneralComp { + var template integer v_i := *; + } + + testcase TC_Sem_1102_TemplateVars_001() runs on GeneralComp { + var template integer v_i := (1, 2, 3); + f_Sem_1102_TemplateVars_001(); + + t.start(1.0); + alt { + [] a_Sem_1102_TemplateVars_001(); + } + + setverdict(pass); + } + + control { + var template integer v_i := (1..2); + execute(TC_Sem_1102_TemplateVars_001()); + } +} \ No newline at end of file diff --git a/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn new file mode 100644 index 0000000..5c1bb6a --- /dev/null +++ b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_002.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.2, Ensure that partially initialized templates are evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1102_TemplateVars_002 { + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type port loopbackPort message { + inout IntegerSet + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_1102_TemplateVars_002() runs on GeneralComp { + var template IntegerSet mw_pattern := {a1:=1,a2:=*}; + var IntegerSet v_set := {a1:=1,a2:=2,a3:=3} + mw_pattern.a3 := 3; + + messagePort.send(v_set); + + alt { + [] messagePort.receive(mw_pattern) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_Sem_1102_TemplateVars_002()); +} + +} diff --git a/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn new file mode 100644 index 0000000..5e228c5 --- /dev/null +++ b/core_language/11_variables/1102_template_variables/Sem_1102_TemplateVars_003.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:11.2, Ensure that partially initialized templates are evaluated correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1102_TemplateVars_003 { + + type set IntegerSet { + integer a1 optional, + integer a2 optional, + integer a3 optional + }; + + type port loopbackPort message { + inout IntegerSet + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_partial () runs on GeneralComp return template IntegerSet { + var template IntegerSet mw_return := {a1:=1,a2:=*}; + + return mw_return; +} + +testcase TC_Sem_1102_TemplateVars_003() runs on GeneralComp { + var template IntegerSet mw_pattern := f_partial(); + var IntegerSet v_set := {a1:=1,a2:=2,a3:=3} + mw_pattern.a3 := 3; + + messagePort.send(v_set); + + alt { + [] messagePort.receive(mw_pattern) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_Sem_1102_TemplateVars_003()); +} + +} diff --git a/core_language/11_variables/1102_template_variables/Syn_1102_TemplateVars_001.ttcn b/core_language/11_variables/1102_template_variables/Syn_1102_TemplateVars_001.ttcn new file mode 100644 index 0000000..37d541e --- /dev/null +++ b/core_language/11_variables/1102_template_variables/Syn_1102_TemplateVars_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:11.2, Define template variables in different scopes + ** @verdict pass accept, noexecution + ***************************************************/ +module Syn_1102_TemplateVars_001 { + type component GeneralComp { + var template integer vc_i1 := omit; + } + + altstep a_Syn_1102_TemplateVars_001() runs on GeneralComp { + var integer v_j := 12; + [] any timer.timeout { + var template integer v_k := ?; + } + } + + function f_Syn_1102_TemplateVars_001() runs on GeneralComp { + var template integer v_i := *; + } + + testcase TC_Syn_1102_TemplateVars_001() runs on GeneralComp { + var template integer v_i := (1, 2, 3); + } + + control { + var template integer v_i := (1..2); + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_001.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_001.ttcn new file mode 100644 index 0000000..2ee9907 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can not be initialized with negative duration + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer value is non-neg float + **/ + + +module NegSem_12_toplevel_timer_001 { + type component TComp{ + timer t_timer := -1.0; // not allowed + } + testcase TC_NegSem_12_toplevel_timer_001() runs on TComp{ + t_timer.start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_001()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_002.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_002.ttcn new file mode 100644 index 0000000..ba31f90 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer in array can not be initialized with negative duration + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer value is non-neg float + **/ + + +module NegSem_12_toplevel_timer_002 { + type component TComp{ + timer t_timer[2] := {-1.0, 1.0}; + } + testcase TC_NegSem_12_toplevel_timer_002() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_002()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_003.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_003.ttcn new file mode 100644 index 0000000..0b83632 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure uninitialized timer can't be started + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSem_12_toplevel_timer_003 { + type component TComp{ + timer t_timer; + } + testcase TC_NegSem_12_toplevel_timer_003() runs on TComp{ + t_timer.start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_003()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_004.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_004.ttcn new file mode 100644 index 0000000..57f6b6d --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure uninitialized timer in array can't be started + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSem_12_toplevel_timer_004 { + type component TComp{ + timer t_timer[2] := {-, 1.0}; + } + testcase TC_NegSem_12_toplevel_timer_004() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_004()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_005.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_005.ttcn new file mode 100644 index 0000000..2b285d3 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure uninitialized timer in array can't be started + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSem_12_toplevel_timer_005 { + type component TComp{ + timer t_timer[2]; + } + testcase TC_NegSem_12_toplevel_timer_005() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_005()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_006.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_006.ttcn new file mode 100644 index 0000000..bfb936e --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax - reject single timer instance initialized with array + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSem_12_toplevel_timer_006 { + type component TComp{ + timer t_timer := {1.0, 1.0, 1.0}; + } + testcase TC_NegSem_12_toplevel_timer_006() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_006()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_007.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_007.ttcn new file mode 100644 index 0000000..d86970c --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_007.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax -- reject array initialization with wrong number of initializers + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSem_12_toplevel_timer_007 { + type component TComp{ + timer t_timer[4] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSem_12_toplevel_timer_007() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSem_12_toplevel_timer_007()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_008.ttcn b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_008.ttcn new file mode 100644 index 0000000..ce191b1 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSem_12_toplevel_timer_008.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax -- reject array of timers initizlized with a single float value + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_008 { + type component TComp{ + timer t_timer[4] := 1.0; + } + testcase TC_NegSyn_12_toplevel_timer_008() runs on TComp{ + t_timer[0].start; + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_008()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_001.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_001.ttcn new file mode 100644 index 0000000..8a3653a --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_001.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can`t be used in module control parts when declared in components + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timers can be declared in component and used in test cases, functions, altsteps on this component + **/ + + +module NegSyn_12_toplevel_timer_001 { + type component TComp{ + timer t_timer:=01.0; + } + testcase TC_NegSyn_12_toplevel_timer_001(integer f) runs on TComp{ + if (f==0){ + setverdict(fail); + } + else{ + setverdict(pass); + } + } + control{ + + t_timer.start; + if (t_timer.running){ + execute(TC_NegSyn_12_toplevel_timer_001(0)) + } + else{ + execute(TC_NegSyn_12_toplevel_timer_001(1)) + } + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_002.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_002.ttcn new file mode 100644 index 0000000..770ed16 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_002 { + type component TComp{ + timer :=10.0; + } + testcase TC_NegSyn_12_toplevel_timer_002() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_002()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_003.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_003.ttcn new file mode 100644 index 0000000..869b6ff --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_003 { + type component TComp{ + timer t_timer :=; + } + testcase TC_NegSyn_12_toplevel_timer_003() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_003()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_004.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_004.ttcn new file mode 100644 index 0000000..db7a297 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:04, Ensure timer declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_04_toplevel_timer_004 { + type component TComp{ + timer t_timer 0.0; + } + testcase TC_NegSyn_04_toplevel_timer_004() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_04_toplevel_timer_004()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_005.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_005.ttcn new file mode 100644 index 0000000..8361cc3 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_005 { + type component TComp{ + timer t_timer := 1; + } + testcase TC_NegSyn_12_toplevel_timer_005() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_005()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_006.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_006.ttcn new file mode 100644 index 0000000..55c0af5 --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer array declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_006 { + type component TComp{ + timer t_timer[5] := 1.0, 1.0, 1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_12_toplevel_timer_006() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_006()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_007.ttcn b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_007.ttcn new file mode 100644 index 0000000..a28ac9b --- /dev/null +++ b/core_language/12_timers/12_toplevel/NegSyn_12_toplevel_timer_007.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer array declaration syntax + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module NegSyn_12_toplevel_timer_007 { + type component TComp{ + timer t_timer[5] := {1.0 1.0, 1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_12_toplevel_timer_007() runs on TComp{ + + } + control{ + + execute(TC_NegSyn_12_toplevel_timer_007()) + + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_001.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_001.ttcn new file mode 100644 index 0000000..9875624 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in components + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timers can be declared in component type + **/ + + +module Sem_12_toplevel_timer_001 { + type component TComp{ + timer t_timer:=10.0; + } + testcase TC_Sem_12_toplevel_timer_001() runs on TComp{ + t_timer.start; + if (t_timer.running){ + setverdict(pass) + } + else { + setverdict(fail) + } + } + control{ + execute(TC_Sem_12_toplevel_timer_001()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_002.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_002.ttcn new file mode 100644 index 0000000..924abb6 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_002.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in module control parts + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer can be declared in module control, test cases, functions, altsteps + **/ + + +module Sem_12_toplevel_timer_002 { + type component TComp{ + } + testcase TC_Sem_12_toplevel_timer_002(verdicttype v_verdict) runs on TComp{ + setverdict(v_verdict); + } + control{ + timer t_timer:=10.0; + t_timer.start; + if (t_timer.running){ + execute(TC_Sem_12_toplevel_timer_002(pass)) + } + else{ + execute(TC_Sem_12_toplevel_timer_002(fail)) + } + + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_003.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_003.ttcn new file mode 100644 index 0000000..b6ffe1e --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer can be declared in module control, test cases, functions, altsteps + **/ + + +module Sem_12_toplevel_timer_003 { + type component TComp{ + timer aux_t; + } + altstep a_step () runs on TComp{ + timer t_timer:=3.0; + [] aux_t.timeout{ + t_timer.start; + if (t_timer.running){ + setverdict(pass); + stop; + } + else{ + setverdict(fail); + stop; + } + t_timer.stop; + } + + }; + testcase TC_Sem_12_toplevel_timer_003() runs on TComp{ + aux_t.start(0.0); + a_step(); + } + control{ + execute(TC_Sem_12_toplevel_timer_003()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_004.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_004.ttcn new file mode 100644 index 0000000..0627f9b --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer can be declared in module control, test cases, functions, altsteps + **/ + + +module Sem_12_toplevel_timer_004 { + type component TComp{ + } + function func() + { + timer t_timer:=10.0; + t_timer.start; + if (t_timer.running){ + setverdict(pass); + } + else { + setverdict(fail); + } + + } + testcase TC_Sem_12_toplevel_timer_004() runs on TComp{ + func(); + } + control{ + execute(TC_Sem_12_toplevel_timer_004()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_005.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_005.ttcn new file mode 100644 index 0000000..689dc8e --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer can be declared in module control, test cases, functions, altsteps + **/ + + +module Sem_12_toplevel_timer_005 { + type component TComp{ + } + testcase TC_Sem_12_toplevel_timer_005() runs on TComp{ + timer t_timer:=10.0; + t_timer.start; + if (t_timer.running){ + setverdict(pass); + } + else{ + setverdict(fail); + } + } + control{ + execute(TC_Sem_12_toplevel_timer_005()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_006.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_006.ttcn new file mode 100644 index 0000000..ff30dcd --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_006.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer`s elapsed time is plausible + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer value is non-neg float + **/ + + +module Sem_12_toplevel_timer_006 { + type component TComp{ + timer t_timer1:=1.05; + timer t_timer2:=1.0; + timer t_timer3:=0.95; + } + altstep a_step() runs on TComp{ + []t_timer2.timeout{ + if (match(t_timer3.running, false) and t_timer1.running){ + setverdict(pass); + } + else { + setverdict(fail); + } + } + []t_timer1.timeout{ + setverdict(fail); + } + } + testcase TC_Sem_12_toplevel_timer_006() runs on TComp{ + + t_timer1.start; + t_timer2.start; + t_timer3.start; + a_step(); + + } + control{ + execute(TC_Sem_12_toplevel_timer_006()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_007.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_007.ttcn new file mode 100644 index 0000000..ce656e3 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_007.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in components but used in test cases + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timers can be declared in component and used in test cases, functions, altsteps on this component + **/ + + +module Sem_12_toplevel_timer_007 { + type component TComp{ + timer t_timer:=10.0; + } + testcase TC_Sem_12_toplevel_timer_007() runs on TComp{ + + t_timer.start; + if (t_timer.running){ + setverdict(pass); + } + else{ + setverdict(fail); + } + } + control{ + execute(TC_Sem_12_toplevel_timer_007()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_008.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_008.ttcn new file mode 100644 index 0000000..b68bb2b --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_008.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in components but used in functions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timers can be declared in component and used in test cases, functions, altsteps on this component + **/ + + +module Sem_12_toplevel_timer_008 { + type component TComp{ + timer t_timer:=10.0; + } + function func() runs on TComp + { + + t_timer.start; + if (t_timer.running){ + setverdict( pass ); + } + else { + setverdict( fail ); + } + + } + testcase TC_Sem_12_toplevel_timer_008() runs on TComp{ + func(); + } + control{ + execute(TC_Sem_12_toplevel_timer_008()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_009.ttcn b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_009.ttcn new file mode 100644 index 0000000..567a8b7 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Sem_12_toplevel_timer_009.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer can be declared in components but used in altsteps + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timers can be declared in component and used in test cases, functions, altsteps on this component + **/ + + +module Sem_12_toplevel_timer_009 { + type component TComp{ + timer aux_t; + timer t_timer:=10.0; + } + altstep a_step () runs on TComp{ + + [] aux_t.timeout{ + t_timer.start; + if (t_timer.running){ + setverdict(pass); + } + else{ + setverdict(fail); + } + } + + }; + testcase TC_Sem_12_toplevel_timer_009() runs on TComp{ + aux_t.start(0.0); + a_step(); + } + control{ + execute(TC_Sem_12_toplevel_timer_009()) + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_001.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_001.ttcn new file mode 100644 index 0000000..6de2a5c --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_001.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure non-initialized timer declaration syntax + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module Syn_12_toplevel_timer_001 { + type component TComp{ + timer t_timer; + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_002.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_002.ttcn new file mode 100644 index 0000000..b37c626 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_002.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer array declaration syntax + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module Syn_12_toplevel_timer_002 { + type component TComp{ + timer t_timer[5]; + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_003.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_003.ttcn new file mode 100644 index 0000000..9d9c239 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_003.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure definition of a list of timers is allowed as a single declaration + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module Syn_12_toplevel_timer_003 { + type component TComp{ + timer t_timer1, t_timer2 := 2.0, t_timer_array1[5], t_timer_array2[3] := {0.0, 1.0, 2.0}; + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_004.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_004.ttcn new file mode 100644 index 0000000..4633a46 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_004.ttcn @@ -0,0 +1,16 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer array initialization syntax + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/timer array values are non-neg float or minus + **/ + + +module Syn_12_toplevel_timer_004 { + type component TComp{ + timer t_timer[5] := {1.0, -, 1.0, 1.0, 1.0}; + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_005.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_005.ttcn new file mode 100644 index 0000000..d04802e --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_005.ttcn @@ -0,0 +1,17 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration with expression + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module Syn_12_toplevel_timer_006 { + control { + var anytype v_any := { float := 1.0 }; + timer t_timer := v_any.float; + } +} \ No newline at end of file diff --git a/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_006.ttcn b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_006.ttcn new file mode 100644 index 0000000..4dadb05 --- /dev/null +++ b/core_language/12_timers/12_toplevel/Syn_12_toplevel_timer_006.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure timer declaration with expression + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/12 Declaring timers/Timer declaration syntax + **/ + + +module Syn_12_toplevel_timer_005 { + function one() return float + { + return 1.0; + } + control { + timer t_timer := one(); + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_001.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_001.ttcn new file mode 100644 index 0000000..7185dfd --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_001.ttcn @@ -0,0 +1,146 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:12, Ensure received messages can be a combination of value and matching mechanism + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Messages are instances of types declared in the in-out-inout clauses of message port type definition + **/ +/* + * #reqname /Requirements/13 Declaring messages/Received messages can also be declared as a combination of value and matching mechanisms + **/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Variable as a message + **/ + + +module Sem_13_declaring_msg_001 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + var MsgType1 msg1 := c_message; + src.send(msg1); + } + + function f_receiver() runs on Receiver + { + template MsgType1 t_msg := { + i := 1, + k:=1.0, + b:=true, + v:=pass, + bs:='0101'B, + hs:='123ABD'H, + os:='FF96'O, + cs:="""ab""", + ucs:="the", + rec1:={i:=1}, + set1:={int1:=1, str1:="the"}, + union1:=make_union(), + enum1:=Bash, + arr1:={1,2,3}}; + + var MsgType1 v_message; + + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(t_msg) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail, "The template failed to match the message"); } + } + } + + testcase TC_Sem_13_declaring_msg_001() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_001()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_002.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_002.ttcn new file mode 100644 index 0000000..2348dc6 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_002.ttcn @@ -0,0 +1,127 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure received messages can`t be matched with wrong template + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Received messages can also be declared as a combination of value and matching mechanisms + **/ + + +module Sem_13_declaring_msg_002 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + var MsgType1 msg1 := c_message; + src.send(msg1); + } + + function f_receiver() runs on Receiver + { + // Mismatch in fields i and k + template MsgType1 t_msg := {i := 2, k:=1.3, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, union1 := ?, arr1:={1,2,3}}; + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(t_msg) -> value v_message { setverdict(fail, "The template must not match the message"); } + [] t_timer.timeout { setverdict(pass); } + } + } + + testcase TC_Sem_13_declaring_msg_002() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_002()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_003.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_003.ttcn new file mode 100644 index 0000000..c9581f6 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_003.ttcn @@ -0,0 +1,128 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared by in-line templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Variable as a message + **/ + + +module Sem_13_declaring_msg_003 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + var MsgType1 msg1 := c_message; + src.send(msg1); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(MsgType1: {1, 1.0, true, pass, '0101'B, '123ABD'H, 'FF96'O, + """ab""", "the", {i:=1}, {int1:=1, str1:="the"}, make_union(), Bash, {1,2,3}}) + -> value v_message + { + setverdict(pass); + } + [] t_timer.timeout { setverdict(fail, "The template failed to match the message"); } + } + } + + testcase TC_Sem_13_declaring_msg_003() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_003()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_004.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_004.ttcn new file mode 100644 index 0000000..df97673 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_004.ttcn @@ -0,0 +1,131 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared by global templates + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Global template as a message + **/ + + +module Sem_13_declaring_msg_004 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + + function f_sender() runs on Sender + { + src.send(global); + } + + function f_receiver() runs on Receiver + { + template MsgType1 local:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := ?, rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(local) { setverdict(pass); } + [] t_timer.timeout { setverdict(fail, "Failed to match global template"); } + } + } + + testcase TC_Sem_13_declaring_msg_004() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_004()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_005.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_005.ttcn new file mode 100644 index 0000000..0ff5640 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_005.ttcn @@ -0,0 +1,137 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared and passed via template variables + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Template variable as a message + **/ + + +module Sem_13_declaring_msg_005 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + function f_sender() runs on Sender + { + var template MsgType1 template_var:= { + i := 1, k:=1.0, b:=true, v:=pass, + bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", + union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + src.send(template_var); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(global) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail); } + } + } + + testcase TC_Sem_13_declaring_msg_005() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_005()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_006.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_006.ttcn new file mode 100644 index 0000000..5e3b4d8 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_006.ttcn @@ -0,0 +1,135 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared and passed via inline template + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Inline template as a message + **/ + + +module Sem_13_declaring_msg_006 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + function f_sender() runs on Sender + { + src.send(MsgType1:{ + i := 1, k:=1.0, b:=true, v:=pass, + bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", + union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(global) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail); } + } + } + + testcase TC_Sem_13_declaring_msg_006() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_006()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_007.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_007.ttcn new file mode 100644 index 0000000..6541121 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_007.ttcn @@ -0,0 +1,136 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared and passed via parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Parameter as a message + **/ + + +module Sem_13_declaring_msg_007 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + function f_sender(in MsgType1 v_message) runs on Sender + { + src.send(v_message); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(global) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail); } + } + } + + testcase TC_Sem_13_declaring_msg_007() runs on MTC system MTC + { + var MsgType1 v_message := { + i := 1, k:=1.0, b:=true, v:=pass, + bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", + union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender(v_message)); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_007()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_008.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_008.ttcn new file mode 100644 index 0000000..c5d69b1 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_008.ttcn @@ -0,0 +1,136 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared and passed via template parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Template parameter as a message + **/ + + +module Sem_13_declaring_msg_008 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + function f_sender(template MsgType1 v_template_message) runs on Sender + { + src.send(v_template_message); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(global) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail); } + } + } + + testcase TC_Sem_13_declaring_msg_008() runs on MTC system MTC + { + var template MsgType1 v_template_message := { + i := 1, k:=1.0, b:=true, v:=pass, + bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", + union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender(v_template_message)); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control{ + + execute(TC_Sem_13_declaring_msg_008()) + + + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_009.ttcn b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_009.ttcn new file mode 100644 index 0000000..8613ee6 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_declaring_msg_009.ttcn @@ -0,0 +1,133 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure instances of messages can be declared and passed via template parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/13 Declaring messages/Sorts of message insances/Local template as a message + **/ + + +module Sem_13_declaring_msg_009 { + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort1 message{ + out MsgType1; + in MsgType2; + } + type port MyPort2 message{ + out MsgType2; + in MsgType1; + } + type component Sender{ + port MyPort1 src; + } + + type component Receiver{ + port MyPort2 dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_message := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := """ab""", + ucs := "the", + rec1 := {i:=1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + template MsgType1 global:= {i := 1, k:=1.0, b:=true, v:=pass, bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + + function f_sender() runs on Sender + { + template MsgType1 v_template_message := { + i := 1, k:=1.0, b:=true, v:=pass, + bs:='0101'B, hs:='123ABD'H, + os:='FF96'O, cs:="""ab""", ucs:="the", + union1 := make_union(), + rec1:={i:=1}, set1:={int1:=1, str1:="the"}, + enum1:=Bash, arr1:={1,2,3} + }; + src.send(v_template_message); + } + + function f_receiver() runs on Receiver + { + var MsgType1 v_message; + timer t_timer := 3.0; + t_timer.start; + alt + { + [] dst.receive(global) -> value v_message { setverdict(pass); } + [] t_timer.timeout { setverdict(fail); } + } + } + + testcase TC_Sem_13_declaring_msg_009() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.done; + } + control { + execute(TC_Sem_13_declaring_msg_009()) + } +} \ No newline at end of file diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_001.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_001.ttcn new file mode 100644 index 0000000..91ec1d5 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_001.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'record' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_001{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // CompositeType + t_timer.start; + src.send(c_values.rec1); + alt { + [] src.receive(c_values.rec1) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected CompositeType ", c_values.rec1); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.rec1) { setverdict(pass); dst.send(c_values.rec1); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected CompositeType", c_values.rec1); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_001() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_001()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_002.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_002.ttcn new file mode 100644 index 0000000..f971c57 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_002.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'record of' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_002{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // MyArray + t_timer.start; + src.send(c_values.arr1); + alt { + [] src.receive(c_values.arr1) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected MyArray ", c_values.arr1); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.arr1) { setverdict(pass); dst.send(c_values.arr1); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected MyArray", c_values.arr1); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_002() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_002()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_003.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_003.ttcn new file mode 100644 index 0000000..946a6c3 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_003.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'enum' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_003{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // MyEnum + t_timer.start; + src.send(c_values.enum1); + alt { + [] src.receive(c_values.enum1) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected MyEnum ", c_values.enum1); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.enum1) { setverdict(pass); dst.send(c_values.enum1); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected MyEnum", c_values.enum1); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_003() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_003()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_004.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_004.ttcn new file mode 100644 index 0000000..27f78a6 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_004.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'set' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_004{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // MySet + t_timer.start; + src.send(c_values.set1); + alt { + [] src.receive(c_values.set1) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected MySet ", c_values.set1); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.set1) { setverdict(pass); dst.send(c_values.set1); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected MySet", c_values.set1); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_004() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_004()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_005.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_005.ttcn new file mode 100644 index 0000000..28900b6 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_005.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'union' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_005{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // MyUnion + t_timer.start; + src.send(c_values.union1); + alt { + [] src.receive(c_values.union1) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected MyUnion ", c_values.union1); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.union1) { setverdict(pass); dst.send(c_values.union1); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected MyUnion", c_values.union1); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_005() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_005()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_006.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_006.ttcn new file mode 100644 index 0000000..c0a2de0 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_006.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'bitstring' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_006{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // bitstring + t_timer.start; + src.send(c_values.bs); + alt { + [] src.receive(c_values.bs) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected bitstring ", c_values.bs); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.bs) { setverdict(pass); dst.send(c_values.bs); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected bitstring", c_values.bs); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_006() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_006()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_007.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_007.ttcn new file mode 100644 index 0000000..31ec533 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_007.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'boolean' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_007{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // boolean + t_timer.start; + src.send(c_values.b); + alt { + [] src.receive(c_values.b) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected boolean ", c_values.b); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.b) { setverdict(pass); dst.send(c_values.b); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected boolean", c_values.b); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_007() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_007()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_008.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_008.ttcn new file mode 100644 index 0000000..aa07dc4 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_008.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'charstring' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_008{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // charstring + t_timer.start; + src.send(c_values.cs); + alt { + [] src.receive(c_values.cs) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected charstring ", c_values.cs); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.cs) { setverdict(pass); dst.send(c_values.cs); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected charstring", c_values.cs); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_008() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_008()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_009.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_009.ttcn new file mode 100644 index 0000000..5151005 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_009.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'float' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_009{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // float + t_timer.start; + src.send(c_values.k); + alt { + [] src.receive(c_values.k) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected float ", c_values.k); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.k) { setverdict(pass); dst.send(c_values.k); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected float", c_values.k); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_009() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_009()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_010.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_010.ttcn new file mode 100644 index 0000000..0ae5b59 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_010.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'hexstring' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_010{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // hexstring + t_timer.start; + src.send(c_values.hs); + alt { + [] src.receive(c_values.hs) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected hexstring ", c_values.hs); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.hs) { setverdict(pass); dst.send(c_values.hs); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected hexstring", c_values.hs); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_010() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_010()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_011.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_011.ttcn new file mode 100644 index 0000000..dca9724 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_011.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'integer' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_011{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // integer + t_timer.start; + src.send(c_values.i); + alt { + [] src.receive(c_values.i) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected integer ", c_values.i); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.i) { setverdict(pass); dst.send(c_values.i); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected integer", c_values.i); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_011() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_011()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_012.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_012.ttcn new file mode 100644 index 0000000..1d63d52 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_012.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'octetstring' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_012{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // octetstring + t_timer.start; + src.send(c_values.os); + alt { + [] src.receive(c_values.os) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected octetstring ", c_values.os); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.os) { setverdict(pass); dst.send(c_values.os); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected octetstring", c_values.os); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_012() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_012()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_013.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_013.ttcn new file mode 100644 index 0000000..7f1252b --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_013.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'universal charstring' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_013{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // universal charstring + t_timer.start; + src.send(c_values.ucs); + alt { + [] src.receive(c_values.ucs) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected universal charstring ", c_values.ucs); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.ucs) { setverdict(pass); dst.send(c_values.ucs); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected universal charstring", c_values.ucs); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_013() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_013()) + } +} diff --git a/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_014.ttcn b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_014.ttcn new file mode 100644 index 0000000..5d60239 --- /dev/null +++ b/core_language/13_messages/13_toplevel/Sem_13_toplevel_declaring_msg_various_types_014.ttcn @@ -0,0 +1,142 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:13, Port with type anytype can send and receive messages of any basic or structured type: 'verdicttype' type. + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/13 Declaring messages/Any type can be declared as type of message in a message port type + + +module Sem_13_toplevel_declaring_msg_various_types_014{ + type record CompositeType{ + integer i + } + type set MySet{ + integer int1, + charstring str1 + } + type enumerated MyEnum{ + Perl,Bash,Python + } + type integer MyArray[3]; + type union MyUnion{ + integer int, + float real + } + type record MsgType1{ + integer i, + float k, + boolean b, + verdicttype v, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + CompositeType rec1, + MySet set1, + MyUnion union1, + MyEnum enum1, + MyArray arr1 + } + type record MsgType2{ + integer j + } + + type port MyPort message{ + inout integer; + inout float; + inout boolean; + inout verdicttype; + inout bitstring; + inout hexstring; + inout octetstring; + inout charstring; + inout universal charstring; + inout CompositeType; + inout MySet; + inout MyUnion; + inout MyEnum; + inout MyArray; + } + + type component Sender{ + timer t_timer := 2.0; + port MyPort src; + } + + type component Receiver{ + port MyPort dst; + } + type component MTC {} + + function make_union() return MyUnion + { + var MyUnion result; + result.int := 1; + return result; + } + + const MsgType1 c_values := { + i := 1, + k := 1.0, + b := true, + v := pass, + bs := '0101'B, + hs := '123ABD'H, + os := 'FF96'O, + cs := "ab", + ucs := "the", + rec1 := {1}, + set1 := {int1:=1, str1:="the"}, + union1 := make_union(), + enum1 := Bash, + arr1 := {1,2,3} + }; + + function f_sender() runs on Sender + { + // verdicttype + t_timer.start; + src.send(c_values.v); + alt { + [] src.receive(c_values.v) { setverdict(pass); } + [] src.receive { + setverdict(fail, "Unexpected data, expected verdicttype ", c_values.v); + stop; + } + [] t_timer.timeout { + setverdict(fail, "No response from echo service"); + stop; + } + } + } + + function f_receiver() runs on Receiver + { + timer t_timer := 30.0; + t_timer.start; + alt + { + [] dst.receive(c_values.v) { setverdict(pass); dst.send(c_values.v); } + + [] dst.receive { setverdict(fail, "Unexpected messagem expected verdicttype", c_values.v); stop; } + [] t_timer.timeout { setverdict(fail, "No more messages"); stop; } + } + } + + testcase TC_Sem_13_toplevel_declaring_msg_various_types_014() runs on MTC system MTC + { + var Sender c_sender := Sender.create; + var Receiver c_receiver := Receiver.create; + connect(c_sender:src, c_receiver:dst); + c_sender.start(f_sender()); + c_receiver.start(f_receiver()); + c_sender.done; + c_receiver.kill; + } + control { + execute(TC_Sem_13_toplevel_declaring_msg_various_types_014()) + } +} diff --git a/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_001.ttcn b/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_001.ttcn new file mode 100644 index 0000000..d283757 --- /dev/null +++ b/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_001.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that nonblocking signature contains in parameter + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1400_procedure_signatures_001 { + + signature p_procedure_signatures_001(out integer p_par1) noblock; // noblock keyword, shall only have in parameters + + template p_procedure_signatures_001 s_returnTemplate := { + p_par1 := - } + + type port remotePort procedure { + inout p_procedure_signatures_001; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { } + + testcase TC_NegSem_1400_procedure_signatures_001() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_NegSem_1400_procedure_signatures_001()); + } + +} \ No newline at end of file diff --git a/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_002.ttcn b/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_002.ttcn new file mode 100644 index 0000000..23c8929 --- /dev/null +++ b/core_language/14_procedure_signatures/NegSem_1400_procedure_signatures_002.ttcn @@ -0,0 +1,73 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:14, Ensure that blocking calls needs response or exception handling + ** @verdict pass reject + *****************************************************************/ +// Multiple calls requires response or exception handling if the signature is blocking + +module NegSem_1400_procedure_signatures_002 { + + signature p_Sig1_001( in charstring key ); // noblock needed for multiple calls without response or exections + + + type port remotePort procedure { + inout p_Sig1_001; + } + + type component GeneralComp { + port remotePort PCO; + var integer MyComp; + } + + + function f_Server() runs on GeneralComp { + timer t_guard; + + const charstring key[3] := {"My String1", "hello", "Probe string"}; + + t_guard.start( 5.0 ); + + for ( var integer i := 0; i < 3; i := i + 1 ) { + PCO.call( p_Sig1_001:{key[i]});} + setverdict(pass); + + t_guard.timeout; + setverdict(fail); + } + + function f_client() runs on GeneralComp { + + } + + testcase TC_NegSem_1400_procedure_signatures_002() runs on GeneralComp system GeneralComp { + + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + + + connect(server:PCO, client:PCO); + + server.start(f_Server()); + client.start(f_client()); + + + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_NegSem_1400_procedure_signatures_002()); + } + +} \ No newline at end of file diff --git a/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_001.ttcn b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_001.ttcn new file mode 100644 index 0000000..fe3bf50 --- /dev/null +++ b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_001.ttcn @@ -0,0 +1,79 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:14, Ensure that the IUT calls signature exception + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Exception is a charstring + +module Sem_1400_procedure_signatures_001 { + + signature p_Sig1_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer + exception (charstring); //execption is a string + + + type port remotePort procedure { + inout p_Sig1_001; + } + + type component GeneralComp { + port remotePort PCO; + var integer MyComp; + } + + + function f_Server() runs on GeneralComp { + PCO.raise(p_Sig1_001,"My string"); // raise exception + } + + function f_client() runs on GeneralComp { + timer t_timeout:=30.0; + + t_timeout.start; + + alt { + [] PCO.catch(p_Sig1_001,charstring:"My string") { + setverdict(pass); // receive exception + } + [] PCO.catch(p_Sig1_001,charstring:?) // receive anything else + { + setverdict(fail); + } + + [] t_timeout.timeout { + setverdict(fail); + } + + } +} + + testcase TC_Sem_1400_procedure_signatures_001() runs on GeneralComp system GeneralComp { + + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + + + connect(server:PCO, client:PCO); + + + server.start(f_Server()); + client.start(f_client()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1400_procedure_signatures_001()); + } + +} \ No newline at end of file diff --git a/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_002.ttcn b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_002.ttcn new file mode 100644 index 0000000..1867dcb --- /dev/null +++ b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_002.ttcn @@ -0,0 +1,80 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:14, Ensure that with noblock signature the IUT can raise exception + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Singature exception is a charsting with noblock signature + +module Sem_1400_procedure_signatures_002 { + + signature p_Sig1_001(in integer p_par1) noblock + exception (charstring); //execption is a string + + + type port remotePort procedure { + inout p_Sig1_001; + } + + type component GeneralComp { + port remotePort PCO; + var integer MyComp; + } + + + function f_Server() runs on GeneralComp { + PCO.raise(p_Sig1_001,"My string"); // raise exception + } + + function f_client() runs on GeneralComp { + timer t_timeout:=30.0; + + t_timeout.start; + + alt { + + [] PCO.catch(p_Sig1_001,charstring:"My string") { + setverdict(pass); // receive exception + } + + [] PCO.catch(p_Sig1_001,charstring:?) //receive anything else + { + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(fail); + } + + } +} + + testcase TC_Sem_1400_procedure_signatures_002() runs on GeneralComp system GeneralComp { + + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + + + connect(server:PCO, client:PCO); + + + server.start(f_Server()); + client.start(f_client()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1400_procedure_signatures_002()); + } + +} \ No newline at end of file diff --git a/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_003.ttcn b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_003.ttcn new file mode 100644 index 0000000..1ba5ddc --- /dev/null +++ b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_003.ttcn @@ -0,0 +1,72 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:14, Ensure that non blocking signatures can raise exception + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Singature exception is an integer + +module Sem_1400_procedure_signatures_003 { + + signature p_Sig1_001(in integer p_par1) noblock + exception (integer); //execption is an integer + + type port remotePort procedure { + inout p_Sig1_001; + } + + type component GeneralComp { + port remotePort PCO; + var integer MyComp; + } + + + function f_Server() runs on GeneralComp { + PCO.raise(p_Sig1_001,5); // raise exception + } + + function f_client() runs on GeneralComp { + timer t_timeout:=30.0; + var integer temp; + t_timeout.start; + + PCO.catch(p_Sig1_001,integer:5)-> value temp; + if (temp==5) + { + setverdict(pass); // receive exception + } + else{ + setverdict(fail); + } +} + + testcase TC_Sem_1400_procedure_signatures_003() runs on GeneralComp system GeneralComp { + + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + + + connect(server:PCO, client:PCO); + + + server.start(f_Server()); + client.start(f_client()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1400_procedure_signatures_003()); + } + +} \ No newline at end of file diff --git a/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_004.ttcn b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_004.ttcn new file mode 100644 index 0000000..9059dd1 --- /dev/null +++ b/core_language/14_procedure_signatures/Sem_1400_procedure_signatures_004.ttcn @@ -0,0 +1,68 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:14, Ensure that multiple calls can be send without ack using non-blocking signature + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Multiple calls without response or execption need noblock signature + +module Sem_1400_procedure_signatures_004 { + + signature p_Sig1_001( in charstring key ) noblock; + + + type port remotePort procedure { + inout p_Sig1_001; + } + + type component GeneralComp { + port remotePort PCO; + var integer MyComp; + } + + type component SystemComp { + } + + const charstring key[3] := {"My String1", "hello", "Probe string"}; + + function f_Server() runs on GeneralComp { + for (var integer i := 0; i < lengthof(key); i := i + 1) { + PCO.getcall(p_Sig1_001:{key[i]}); + } + setverdict(pass); + } + + function f_client() runs on GeneralComp { + for (var integer i := 0; i < lengthof(key); i := i + 1) { + PCO.call(p_Sig1_001:{key[i]}) ; + } + } + + testcase TC_Sem_1400_procedure_signatures_004() runs on GeneralComp system SystemComp { + + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + timer t_guard; + + connect(server:PCO, client:PCO); + + server.start(f_Server()); + client.start(f_client()); + + t_guard.start( 5.0 ); + alt { + [] all component.done {} + [] t_guard.timeout { + setverdict(fail); + all component.stop; + } + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1400_procedure_signatures_004(), 10.0); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_001.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_001.ttcn new file mode 100644 index 0000000..b77262f --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_001.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that a simple record-based message template can be defined. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_001 { + +type record MyMessageType { + integer field1 optional, + charstring field2, + boolean field3 +} + +template MyMessageType m_myTemplate := { + field1 := omit, + field2 := "My string", + field3 := true +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_002.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_002.ttcn new file mode 100644 index 0000000..2d510b2 --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_002.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that a simple record-based message template with a wildcard ? is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_002 { + +type record MyMessageType { + integer field1 optional +} + +template MyMessageType m_myTemplate := { + field1 := ? +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_003.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_003.ttcn new file mode 100644 index 0000000..83b60e4 --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_003.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that a simple record-based message template can be defined with a pattern in a charstring field. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_003 { + +type record MyMessageType { + charstring field2 +} + +template MyMessageType m_myTemplate := { + field2 := pattern "abc*xyz" +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_004.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_004.ttcn new file mode 100644 index 0000000..b0feba6 --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_004.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that a primitive type template can be defined with a ? wildcard. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_004 { + +template integer m_myTemplate := ?; + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_005.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_005.ttcn new file mode 100644 index 0000000..ae06a7c --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_005.ttcn @@ -0,0 +1,12 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that a primitive type template can be defined with a one-of notation. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_005 { + +template integer m_myTemplate := (1, 2, 3); + +} \ No newline at end of file diff --git a/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_006.ttcn b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_006.ttcn new file mode 100644 index 0000000..72fbf90 --- /dev/null +++ b/core_language/15_templates/1501_declaring_message_templates/Syn_1501_DeclaringMessageTemplates_006.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.1, Ensure that all port operations are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1501_DeclaringMessageTemplates_006 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1 optional, + charstring field2, + boolean field3 + } + + template MyMessageType m_myTemplate := { + field1 := omit, + field2 := "My string", + field3 := true + } + + testcase TC_Syn_1501_DeclaringMessageTemplates_006() runs on GeneralComp { + pt_myPort.send(m_myTemplate); + pt_myPort.receive(m_myTemplate); + pt_myPort.trigger(m_myTemplate); + pt_myPort.check(receive(m_myTemplate)); + setverdict(pass); + } + + control{ + execute(TC_Syn_1501_DeclaringMessageTemplates_006()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/NOTES b/core_language/15_templates/1502_declaring_signature_templates/NOTES new file mode 100644 index 0000000..fca9d61 --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/NOTES @@ -0,0 +1,2 @@ +The semantic tests in this section require the execution of the control scripts, +which launch the remote procedure server and client operations. \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_001.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_001.ttcn new file mode 100644 index 0000000..f2cb2aa --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_001.ttcn @@ -0,0 +1,117 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.2, Test in-line templates for accepting procedure replies. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1502_DeclaringSignatureTemplates_001 { + + /** + * @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_1502_DeclaringSignatureTemplates_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_1502_DeclaringSignatureTemplates_001 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_1502_DeclaringSignatureTemplates_001 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_1502_DeclaringSignatureTemplates_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_1502_DeclaringSignatureTemplates_001; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_1502_DeclaringSignatureTemplates_001:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_001:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_001:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_001:s_returnTemplate value 1) { //check that procedure is returning correct values + 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_Sem_1502_DeclaringSignatureTemplates_001 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_1502_DeclaringSignatureTemplates_001:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_1502_DeclaringSignatureTemplates_001:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + } + + + testcase TC_Sem_1502_DeclaringSignatureTemplates_001() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1502_DeclaringSignatureTemplates_001()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_002.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_002.ttcn new file mode 100644 index 0000000..b58d66f --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_002.ttcn @@ -0,0 +1,115 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.2, Test in-line templates for accepting procedure replies. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1502_DeclaringSignatureTemplates_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 can return value any value + */ + signature p_Sem_1502_DeclaringSignatureTemplates_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_1502_DeclaringSignatureTemplates_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_1502_DeclaringSignatureTemplates_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_1502_DeclaringSignatureTemplates_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_1502_DeclaringSignatureTemplates_002; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_1502_DeclaringSignatureTemplates_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_002:s_wrongTemplate value ?) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_002:s_returnTemplate value ?) { //check that procedure is returning correct values + 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_Sem_1502_DeclaringSignatureTemplates_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_1502_DeclaringSignatureTemplates_002:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_1502_DeclaringSignatureTemplates_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_1502_DeclaringSignatureTemplates_002() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1502_DeclaringSignatureTemplates_002()); + } + +} diff --git a/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_003.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_003.ttcn new file mode 100644 index 0000000..db853f2 --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Sem_1502_DeclaringSignatureTemplates_003.ttcn @@ -0,0 +1,112 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.2, Test in-line templates for accepting procedure replies. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1502_DeclaringSignatureTemplates_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 can return value any value + */ + signature p_Sem_1502_DeclaringSignatureTemplates_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_1502_DeclaringSignatureTemplates_003 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_1502_DeclaringSignatureTemplates_003 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_1502_DeclaringSignatureTemplates_003 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_1502_DeclaringSignatureTemplates_003; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_1502_DeclaringSignatureTemplates_003:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_1502_DeclaringSignatureTemplates_003:?) { //any reply is accepted + 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_Sem_1502_DeclaringSignatureTemplates_003 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_1502_DeclaringSignatureTemplates_003:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_1502_DeclaringSignatureTemplates_003:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_1502_DeclaringSignatureTemplates_003() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_1502_DeclaringSignatureTemplates_003()); + } + +} diff --git a/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_001.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_001.ttcn new file mode 100644 index 0000000..1e2a050 --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_001.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.2, Ensure that signature templates with explicit values are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1502_DeclaringSignatureTemplates_001 { + + signature p_Syn_1502_DeclaringSignatureTemplates_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Syn_1502_DeclaringSignatureTemplates_001 s_myTemplate := { + p_par1 := 1, + p_par2 := 2, + p_par3 := 3 + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_002.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_002.ttcn new file mode 100644 index 0000000..518ff38 --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_002.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.2, Ensure that signature templates with wildcards are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1502_DeclaringSignatureTemplates_002 { + + signature p_Syn_1502_DeclaringSignatureTemplates_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Syn_1502_DeclaringSignatureTemplates_002 s_myTemplate := { + p_par1 := 1, + p_par2 := ?, + p_par3 := ? + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_003.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_003.ttcn new file mode 100644 index 0000000..a7658f7 --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_003.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.2, Ensure that the basic operations call and getreply are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1502_DeclaringSignatureTemplates_003 { + + type port MyProcedurePortType procedure { + inout p_Syn_1502_DeclaringSignatureTemplates_003; + } + + type component GeneralComp { + port MyProcedurePortType pt_myPort; + } + + signature p_Syn_1502_DeclaringSignatureTemplates_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Syn_1502_DeclaringSignatureTemplates_003 m_myTemplate := { + p_par1 := 1, + p_par2 := 2, + p_par3 := 3 + } + + template p_Syn_1502_DeclaringSignatureTemplates_003 mw_myTemplate := { + p_par1 := 1, + p_par2 := ?, + p_par3 := ? + } + + testcase TC_Syn_1502_DeclaringSignatureTemplates_003() runs on GeneralComp { + pt_myPort.call(p_Syn_1502_DeclaringSignatureTemplates_003:m_myTemplate, nowait); + pt_myPort.getreply(p_Syn_1502_DeclaringSignatureTemplates_003:m_myTemplate); + setverdict(pass); + } + + control{ + execute(TC_Syn_1502_DeclaringSignatureTemplates_003()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_004.ttcn b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_004.ttcn new file mode 100644 index 0000000..b143c1d --- /dev/null +++ b/core_language/15_templates/1502_declaring_signature_templates/Syn_1502_DeclaringSignatureTemplates_004.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.2, Ensure that the raise and catch operations are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1502_DeclaringSignatureTemplates_004 { + + type port MyProcedurePortType procedure { + inout p_Syn_1502_DeclaringSignatureTemplates_004; + } + + type component GeneralComp { + port MyProcedurePortType pt_myPort; + } + + signature p_Syn_1502_DeclaringSignatureTemplates_004(in integer p_par1, out integer p_par2, inout integer p_par3) return integer exception (integer); + + template p_Syn_1502_DeclaringSignatureTemplates_004 m_myTemplate := { + p_par1 := 1, + p_par2 := 2, + p_par3 := 3 + } + + template p_Syn_1502_DeclaringSignatureTemplates_004 mw_myTemplate := { + p_par1 := 1, + p_par2 := ?, + p_par3 := ? + } + + testcase TC_Syn_1502_DeclaringSignatureTemplates_004() runs on GeneralComp { + pt_myPort.raise(p_Syn_1502_DeclaringSignatureTemplates_004, integer:5); + pt_myPort.catch(p_Syn_1502_DeclaringSignatureTemplates_004, integer:5); + setverdict(pass); + } + + control{ + execute(TC_Syn_1502_DeclaringSignatureTemplates_004()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_001.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_001.ttcn new file mode 100644 index 0000000..f3d475f --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_001.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error for re-assignment of a global non-parameterized template + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSem_1503_GlobalAndLocalTemplates_001 +{ + template integer t := ?; + type component GeneralComp { + } + testcase TC_NegSem_1503_GlobalAndLocalTemplates_001() runs on GeneralComp { + t := 2; // error expected + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_002.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_002.ttcn new file mode 100644 index 0000000..2853325 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_002.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error for re-assignment of a global non-parameterized template + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSem_1503_GlobalAndLocalTemplates_002 +{ + type component GeneralComp { + } + testcase TC_NegSem_1503_GlobalAndLocalTemplates_002() runs on GeneralComp { + template integer t := ?; + t := 2; // error expected + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_003.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_003.ttcn new file mode 100644 index 0000000..4b8bdc2 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_003.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error for re-assignment of a global parameterized template + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSem_1503_GlobalAndLocalTemplates_003 +{ + template integer t(in integer p) := (0..p); + type component GeneralComp { + } + testcase TC_NegSem_1503_GlobalAndLocalTemplates_003() runs on GeneralComp { + t := 2; // error expected + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_004.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_004.ttcn new file mode 100644 index 0000000..3c3396c --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSem_1503_GlobalAndLocalTemplates_004.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error for re-assignment of a local parameterized template + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSem_1503_GlobalAndLocalTemplates_004 +{ + type component GeneralComp { + } + testcase TC_NegSem_1503_GlobalAndLocalTemplates_004() runs on GeneralComp { + template integer t(in integer p) := (0..p); + t := 2; // error expected + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_001.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_001.ttcn new file mode 100644 index 0000000..0c69ba1 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_001.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error if no value is assigned in a global non-parameterized template declaration + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSyn_1503_GlobalAndLocalTemplates_001 +{ + template integer t; +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_002.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_002.ttcn new file mode 100644 index 0000000..4f5aa98 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_002.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error if no value is assigned in a local non-parameterized template declaration + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSyn_1503_GlobalAndLocalTemplates_002 +{ + type component GeneralComp { + } + testcase TC_NegSyn_1503_GlobalAndLocalTemplates_002() runs on GeneralComp { + template integer t; + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_003.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_003.ttcn new file mode 100644 index 0000000..25e0870 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_003.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error if no value is assigned in a global parameterized template declaration + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSyn_1503_GlobalAndLocalTemplates_003 +{ + template integer t(in integer p); +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_004.ttcn b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_004.ttcn new file mode 100644 index 0000000..81c7861 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/NegSyn_1503_GlobalAndLocalTemplates_004.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that there's an error if no value is assigned in a local parameterized template declaration + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Both global and local templates are initialized at the place of their +// declaration. This means, all template fields which are not affected by +// parameterization shall receive a value or matching mechanism. Template +// fields affected by parameterization are initialized at the time of +// template use. +module NegSyn_1503_GlobalAndLocalTemplates_004 +{ + type component GeneralComp { + } + testcase TC_NegSyn_1503_GlobalAndLocalTemplates_004() runs on GeneralComp { + template integer t(in integer p); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_001.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_001.ttcn new file mode 100644 index 0000000..3bae3bb --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_001.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a template values can be accessed with the dot notation as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_001 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_myTemplate := { + field1 := 2, + field2 := "foobar", + field3 := true +} + +testcase TC_Sem_1503_GlobalAndLocalTemplates_001() runs on GeneralComp { + if (match(2,m_myTemplate.field1) and match("foobar", m_myTemplate.field2) and match(true, m_myTemplate.field3)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_001()); +} +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_002.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_002.ttcn new file mode 100644 index 0000000..0e15f1f --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_002.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a template actual parameter is passed through correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_002 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true +} + +testcase TC_Sem_1503_GlobalAndLocalTemplates_002() runs on GeneralComp { + if (valueof(m_myTemplate(2).field1) == 2) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_002()); +} +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_003.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_003.ttcn new file mode 100644 index 0000000..9de5cff --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_003.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a send operation with actual parameters of a global parameterized template is accepted. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_003 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := "abcxyz", + field3 := true + } + + testcase TC_Sem_1503_GlobalAndLocalTemplates_003() runs on GeneralComp { + pt_myPort.send(m_myTemplate(2)); + setverdict(pass); + } + + control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_003()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_004.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_004.ttcn new file mode 100644 index 0000000..e315211 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_004.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a parameterized local template in a test case is accepted. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_004 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_Sem_1503_GlobalAndLocalTemplates_004() runs on GeneralComp { + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := "abcxyz", + field3 := true + } + + pt_myPort.send(m_myTemplate(2)); + setverdict(pass); + } + + control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_004()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_005.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_005.ttcn new file mode 100644 index 0000000..799af30 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a send operation with actual parameters of a global parameterized template is accepted with the actual parameter being a template parameter. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_005 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + MyMessageType field3 optional + } + + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := "abc1xyz", + field3 := omit + } + + template MyMessageType m_myOtherTemplate(template MyMessageType p_myTemplate):= { + field1 := 2, + field2 := "abcxyz", + field3 := p_myTemplate + } + + testcase TC_Sem_1503_GlobalAndLocalTemplates_005() runs on GeneralComp { + pt_myPort.send(m_myOtherTemplate(m_myTemplate(2))); + setverdict(pass); + } + + control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_005()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_006.ttcn b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_006.ttcn new file mode 100644 index 0000000..5cf8610 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Sem_1503_GlobalAndLocalTemplates_006.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a send operation with actual parameters of a global parameterized template is accepted with the actual parameter being an inline template. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1503_GlobalAndLocalTemplates_006 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + MyMessageType field3 optional + } + + template MyMessageType m_myOtherTemplate(template MyMessageType p_myTemplate):= { + field1 := 2, + field2 := "abcxyz", + field3 := p_myTemplate + } + + testcase TC_Sem_1503_GlobalAndLocalTemplates_006() runs on GeneralComp { + pt_myPort.send(m_myOtherTemplate(MyMessageType:{2,"foobar",omit})); + setverdict(pass); + } + + control{ + execute(TC_Sem_1503_GlobalAndLocalTemplates_006()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_001.ttcn b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_001.ttcn new file mode 100644 index 0000000..28a4cf1 --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_001.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a global parameterized template is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1503_GlobalAndLocalTemplates_001 { + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_004.ttcn b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_004.ttcn new file mode 100644 index 0000000..7ce556b --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_004.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a parameterized local template in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1503_GlobalAndLocalTemplates_004 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + control{ + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true + } + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_005.ttcn b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_005.ttcn new file mode 100644 index 0000000..5d97f0b --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_005.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a parameterized local template in a function is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1503_GlobalAndLocalTemplates_005 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + function f_testTemplate() { + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true + } + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_006.ttcn b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_006.ttcn new file mode 100644 index 0000000..0e4704f --- /dev/null +++ b/core_language/15_templates/1503_global_and_local_templates/Syn_1503_GlobalAndLocalTemplates_006.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.3, Ensure that a parameterized local template in an altstep is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1503_GlobalAndLocalTemplates_006 { + + type port MyMessagePortType message { + inout MyMessageType + } + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + altstep f_testTemplate() runs on GeneralComp { + [] pt_myPort.receive { + template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true + } + } + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_001.ttcn b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_001.ttcn new file mode 100644 index 0000000..b9851e0 --- /dev/null +++ b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.4, Ensure that inline templates are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1504_InlineTemplates_001 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +testcase TC_Syn_1504_InlineTemplates_001() runs on GeneralComp { + pt_myPort.send(MyMessageType:{2, "abcxyz", true}); + setverdict(pass); +} + +control{ + execute(TC_Syn_1504_InlineTemplates_001()); +} +} \ No newline at end of file diff --git a/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_002.ttcn b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_002.ttcn new file mode 100644 index 0000000..78ff423 --- /dev/null +++ b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_002.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.4, Ensure that modified parameterized inline templates are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1504_InlineTemplates_002 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_myTemplate(integer p_myFormalParam):= { + field1 := p_myFormalParam, + field2 := pattern "abc*xyz", + field3 := true +} + +testcase TC_Syn_1504_InlineTemplates_002() runs on GeneralComp { + pt_myPort.send(MyMessageType:modifies m_myTemplate(2) := {field2:="foobar"}); + setverdict(pass); +} + +control{ + execute(TC_Syn_1504_InlineTemplates_002()); +} +} \ No newline at end of file diff --git a/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_003.ttcn b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_003.ttcn new file mode 100644 index 0000000..b00f906 --- /dev/null +++ b/core_language/15_templates/1504_inline_templates/Syn_1504_InlineTemplates_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.4, Ensure that modified plain inline templates are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1504_InlineTemplates_003 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_myTemplate := { + field1 := 2, + field2 := pattern "abc*xyz", + field3 := true +} + +testcase TC_Syn_1504_InlineTemplates_003() runs on GeneralComp { + pt_myPort.send(MyMessageType:modifies m_myTemplate := {field2:="foobar"}); + setverdict(pass); +} + +control{ + execute(TC_Syn_1504_InlineTemplates_003()); +} +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_001.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_001.ttcn new file mode 100644 index 0000000..8be497d --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_001.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that a modified template does not refer to itself. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_001 { + +type record of integer MyMessageType; + +template MyMessageType m_myBaseTemplate := { 0, 1, 2, 3, 4 }; + +template MyMessageType m_myOtherTemplate modifies m_myOtherTemplate := { + [2]:=3, // switch the positions of 2 and 3 + [3]:=2 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_002.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_002.ttcn new file mode 100644 index 0000000..dbe4c2a --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_002.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that a modified template does not omit possible parameters of the base template. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_002 { + +type record of integer MyMessageType; + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_value) := { + field1 := p_value, + field2 := "Hello World", + field3 := true +} + +// illegal definition as the (integer p_value) formal parameter is missing and must +// not be omitted. +template MyMessageType m_templateTwo modifies m_templateOne := { + field3 := false +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_003.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_003.ttcn new file mode 100644 index 0000000..89480b4 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_003.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that a modified template does not omit possible parameters introduced in any modification step. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_003 { + +type record of integer MyMessageType; + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue, boolean p_boolValue) modifies m_templateOne := { + field1 := p_intValue, + field3 := p_boolValue +} + +// illegal as it is missing the (boolean p_boolValue) formal parameter introduced in the previous +// modification step. +template MyMessageType m_templateThree(integer p_intValue) modifies m_templateTwo := { + field2 := "foobar" +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_004.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_004.ttcn new file mode 100644 index 0000000..18030a6 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_004.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that parameter names in modified templates are the same. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_004 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_value) := { + field1 := p_value, + field2 := "Hello World", + field3 := true +} + +// illegal as p_intValue is a different parameter name than p_value +template MyMessageType m_templateTwo(integer p_intValue) modifies m_templateOne := { + field3 := false +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_005.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_005.ttcn new file mode 100644 index 0000000..6fd3cfd --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_005.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the dash in default parameter values of a modified templates is only accepted when the base template actually has a default value. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_005 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +// illegal as p_intValue does not have a default value that can be referred to with the "-". +template MyMessageType m_templateTwo(integer p_intValue := -) modifies m_templateOne := { + field1 := p_intValue +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_006.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_006.ttcn new file mode 100644 index 0000000..79f3318 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_006.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the same parameter name is used when modifying the base template. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_006 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +// illegal as parameter name mismatch p_intValue defined in m_templateOne +template MyMessageType m_templateTwo(integer p_value := -) modifies m_templateOne := { + field1 := p_value +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_007.ttcn b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_007.ttcn new file mode 100644 index 0000000..48d1af1 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSem_1505_ModifiedTemplates_007.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the same parameter type is used when modifying the base template. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1505_ModifiedTemplates_007 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +// illegal as parameter type mismatch boolean defined in m_templateOne +template MyMessageType m_templateTwo(boolean p_intValue) modifies m_templateOne := { + field1 := 5 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/NegSyn_1505_ModifiedTemplates_001.ttcn b/core_language/15_templates/1505_modified_templates/NegSyn_1505_ModifiedTemplates_001.ttcn new file mode 100644 index 0000000..981709f --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/NegSyn_1505_ModifiedTemplates_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the base tamplate and modified template cannot be the same + ** @verdict pass reject, noexectuion + *****************************************************************/ +//Restriction a) +/*A modified template shall not refer to itself, either directly or indirectly, i.e. recursive derivation is not +allowed.*/ + +module NegSyn_1505_ModifiedTemplates_001{ + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue) modifies m_templateOne := { + field1 := 5 +} + +//error: not allowed to modify itself +template MyMessageType m_templateTwo(integer p_intValue) modifies m_templateTwo := { + field1 := 10 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_001.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_001.ttcn new file mode 100644 index 0000000..4c4c834 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_001.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the values of plain modified template definitions are as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1505_ModifiedTemplates_001 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne := { + field1 := 2, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo modifies m_templateOne := { + field1 := 4 +} + +testcase TC_Sem_1505_ModifiedTemplates_001() runs on GeneralComp { + if (match(valueof(m_templateTwo.field1), 4) and + match(valueof(m_templateTwo.field2), "Hello World") and + match(valueof(m_templateTwo.field3), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_002.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_002.ttcn new file mode 100644 index 0000000..92c93c5 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that a modified template of a record of type using index notation access works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1505_ModifiedTemplates_002 { + +type component GeneralComp { +} + +type record of integer MyMessageType; + +template MyMessageType m_myBaseTemplate := { 0, 1, 2, 3, 4 }; + +template MyMessageType m_myOtherTemplate modifies m_myBaseTemplate := { + [2]:=3, // switch the positions of 2 and 3 + [3]:=2 +} + +testcase TC_Sem_1505_ModifiedTemplates_002() runs on GeneralComp { + if (match(valueof(m_myOtherTemplate[0]), 0) and + match(valueof(m_myOtherTemplate[1]), 1) and + match(valueof(m_myOtherTemplate[2]), 3) and + match(valueof(m_myOtherTemplate[3]), 2) and + match(valueof(m_myOtherTemplate[4]), 4) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_003.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_003.ttcn new file mode 100644 index 0000000..163522c --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_003.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1505_ModifiedTemplates_003 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue:=2, boolean p_boolValue:=false) modifies m_templateOne := { + field1 := p_intValue, + field3 := p_boolValue +} + +testcase TC_Sem_1505_ModifiedTemplates_003() runs on GeneralComp { + if (match(valueof(m_templateTwo.field1), 2) and + match(valueof(m_templateTwo.field2), "Hello World") and + match(valueof(m_templateTwo.field3), false) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_004.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_004.ttcn new file mode 100644 index 0000000..65db536 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_004.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected when the modified template uses the dash for the default value. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1505_ModifiedTemplates_004 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue:=2) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue := -) modifies m_templateOne := { + field1 := p_intValue +} + +testcase TC_Sem_1505_ModifiedTemplates_004() runs on GeneralComp { + if (match(valueof(m_templateTwo.field1), 2) and + match(valueof(m_templateTwo.field2), "Hello World") and + match(valueof(m_templateTwo.field3), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_004()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_005.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_005.ttcn new file mode 100644 index 0000000..b639d38 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_005.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + //Restriction a) +/*In case of templates, template fields or list elements of simple types, union and enumerated types, the +matching mechanism specified in the modified template is simply replacing its corresponding content in its +parent.*/ + +module Sem_1505_ModifiedTemplates_005 { + +type component GeneralComp { } + +type union MyMessageType { + integer field +} + +template MyMessageType m_templateOne := { //union type + field :=2 +} + +template MyMessageType m_templateTwo(integer p_intValue := 10) modifies m_templateOne := { + field := p_intValue +} + +testcase TC_Sem_1505_ModifiedTemplates_005() runs on GeneralComp { + if (match(valueof(m_templateTwo.field) , 10) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_005()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_006.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_006.ttcn new file mode 100644 index 0000000..c2e9aa9 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_006.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Restriction a) +/*In case of templates, template fields or list elements of simple types, union and enumerated types, the +matching mechanism specified in the modified template is simply replacing its corresponding content in its +parent.*/ + +module Sem_1505_ModifiedTemplates_006 { + +type component GeneralComp { } + + +type enumerated MyEnum { + A,B,C +} + +type record MyMessageType { + integer field1, + MyEnum field2 +} + +template MyMessageType m_templateOne := { + field1 :=10, + field2 := A //enum type +} + +template MyMessageType m_templateTwo(MyEnum p_intValue := B) modifies m_templateOne := { + field2 := p_intValue +} + +testcase TC_Sem_1505_ModifiedTemplates_006() runs on GeneralComp { + if (match(valueof(m_templateTwo.field2) , B) and match(valueof(m_templateTwo.field1) , 10)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_006()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_007.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_007.ttcn new file mode 100644 index 0000000..40e36cf --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_007.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + //Restriction b) + +/*If a record or set field or its corresponding matching mechanism is – implicitly or explicitly by using the not used symbol "-" - +left unspecified in the modified template, then the matching mechanism in the corresponding field of the +parent template shall be used.*/ + +module Sem_1505_ModifiedTemplates_007 { + +type component GeneralComp { } + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue:=2, boolean p_boolValue:=false) modifies m_templateOne := { + field1 := p_intValue, + field2 := -, //not used symbol + field3 := p_boolValue +} + +testcase TC_Sem_1505_ModifiedTemplates_007() runs on GeneralComp { + if (match(valueof(m_templateTwo.field1) , 2) and + match(valueof(m_templateTwo.field2) , "Hello World") and + match(valueof(m_templateTwo.field3) , false) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_007()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_008.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_008.ttcn new file mode 100644 index 0000000..98901ff --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_008.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the values of plain modified template definitions are as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/*A modified template may also be declared fuzzy using the @fuzzy modifier. +If a fuzzy modified template modifies a non-fuzzy unparameterized template, the inherited fields before modification will be the same for every evaluation of the fuzzy template.*/ + +module Sem_1505_ModifiedTemplates_008 { + +type port MyMessagePortType message { + inout MyMessageType +} + +type component GeneralComp { + port MyMessagePortType pt_myPort; +} + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne := { + field1 := 2, + field2 := "Hello World", + field3 := - +} + +template @fuzzy MyMessageType m_templateTwo modifies m_templateOne := { + field1 := 4, + field3 := true +} + +testcase TC_Sem_1505_ModifiedTemplates_008() runs on GeneralComp { + if ((valueof(m_templateTwo.field1) == 4) and + (valueof(m_templateTwo.field2) == "Hello World") and + (valueof(m_templateTwo.field3) == true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_008()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_009.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_009.ttcn new file mode 100644 index 0000000..4e198a1 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_009.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +//Restriction c) +/*For templates, template fields and elements of record of and set of types, the above rules specified for +records and sets apply with the following deviations: + * if the value list notation is used, only the number of elements listed in the modified template is inherited +from the parent (i.e. the list is truncated at the last element of the list notation in the modified template)*/ + +module Sem_1505_ModifiedTemplates_009 { + +type component GeneralComp { } + +type record of charstring MyMessageType; + +template MyMessageType m_templateOne := {"A","AB", "ABC", "ABCD","ABCDE","ABCDEF"}; + + +template MyMessageType m_templateTwo modifies m_templateOne := { "-", "AB", "ABC"} //after 3rd element no more elements are inherited from the parent + +testcase TC_Sem_1505_ModifiedTemplates_009() runs on GeneralComp { + if (match(valueof(m_templateTwo),{"-", "AB", "ABC"})) + { + setverdict(pass,m_templateTwo); + } else { + setverdict(fail,m_templateTwo); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_009()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_010.ttcn b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_010.ttcn new file mode 100644 index 0000000..8c9807c --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Sem_1505_ModifiedTemplates_010.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that default values in formal parameters of modified templates are working as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +//Restriction c) +/*For templates, template fields and elements of record of and set of types, the above rules specified for +records and sets apply with the following deviations: + * if the value list notation is used, only the number of elements listed in the modified template is inherited +from the parent (i.e. the list is truncated at the last element of the list notation in the modified template)*/ +module Sem_1505_ModifiedTemplates_010 { + +type component GeneralComp { } + +type set of integer MyMessageType; + +template MyMessageType m_templateOne := {1,2,3,4,5,6,7,8,9,10}; + + +template MyMessageType m_templateTwo modifies m_templateOne := {2,2,3} //after 3rd element no more elements are inherited from the parent + modification on the first element + +testcase TC_Sem_1505_ModifiedTemplates_010() runs on GeneralComp { + if (match(valueof(m_templateTwo),{2,2,3})) + { + setverdict(pass,m_templateTwo); + } else { + setverdict(fail,m_templateTwo); + } +} + +control{ + execute(TC_Sem_1505_ModifiedTemplates_010()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_001.ttcn b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_001.ttcn new file mode 100644 index 0000000..bda3f32 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that plain modified template definitions are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1505_ModifiedTemplates_001 { + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne := { + field1 := 2, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo modifies m_templateOne := { + field1 := 4 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_002.ttcn b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_002.ttcn new file mode 100644 index 0000000..a4b81fd --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that a modified template does not omit possible parameters introduced in any modification step. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1505_ModifiedTemplates_002 { + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_value) := { + field1 := p_value, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_value, boolean p_boolValue) modifies m_templateOne := { + field1 := p_value, + field3 := p_boolValue +} + +template MyMessageType m_templateThree(integer p_value, boolean p_boolValue) modifies m_templateTwo := { + field2 := "foobar" +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_003.ttcn b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_003.ttcn new file mode 100644 index 0000000..44ca924 --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_003.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that the default values in formal parameters of modified templates are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1505_ModifiedTemplates_003 { + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue:=2, boolean p_boolValue:=false) modifies m_templateOne := { + field1 := p_intValue, + field3 := p_boolValue +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_004.ttcn b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_004.ttcn new file mode 100644 index 0000000..321b5eb --- /dev/null +++ b/core_language/15_templates/1505_modified_templates/Syn_1505_ModifiedTemplates_004.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.5, Ensure that dash as default parameter values are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1505_ModifiedTemplates_004 { + +type record MyMessageType { + integer field1, + charstring field2, + boolean field3 +} + +template MyMessageType m_templateOne(integer p_intValue:=2) := { + field1 := p_intValue, + field2 := "Hello World", + field3 := true +} + +template MyMessageType m_templateTwo(integer p_intValue := -) modifies m_templateOne := { + field1 := p_intValue +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150601_referencing_individual_string_elements/NegSem_150601_ReferencingIndividualStringElements_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150601_referencing_individual_string_elements/NegSem_150601_ReferencingIndividualStringElements_001.ttcn new file mode 100644 index 0000000..43651e6 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150601_referencing_individual_string_elements/NegSem_150601_ReferencingIndividualStringElements_001.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.1, Ensure that the referencing of individual string elements inside templates or template fields is forbidden. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150601_ReferencingIndividualStringElements_001 { + +type component GeneralComp { } + +testcase TC_NegSem_150601_ReferencingIndividualStringElements_001() runs on GeneralComp { + var template charstring m_char1 := "MYCHAR1"; + var template charstring m_char2; + + // illegal acchess. Instead, substr should be used. + m_char2 := m_char1[1]; + + if (m_char2 == "Y") { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_150601_ReferencingIndividualStringElements_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_001.ttcn new file mode 100644 index 0000000..a177ee7 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_001.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that fields with omit values on the right-hand side of an assignment are rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150602_ReferencingRecordAndSetFields_001 { + +type component GeneralComp { } + +type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional +} + +type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_001() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := 5, + f2 := omit + } + + // shall cause an error as omit is assigned to m_R1.f2 + var template MyRecordOne m_R2 := m_R1.f2.g2; + // if we get here, something must be wrong + setverdict(fail); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_001()); +} + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_002.ttcn new file mode 100644 index 0000000..9f27f95 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_002.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that fields with * values on the right-hand side of an assignment are rejected + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150602_ReferencingRecordAndSetFields_002 { + +type component GeneralComp { } + +type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional +} + +type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_002() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := 5, + f2 := omit + } + + m_R1.f2 := *; + + // shall cause an error as * is assigned to m_R1.f2 + var template MyRecordTwo m_R2 := m_R1.f2.g2; + // if we get here, something must be wrong + setverdict(fail); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_002()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_003.ttcn new file mode 100644 index 0000000..0c3d7bc --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_003.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that value lists on the right-hand side of an assignment are not acceped. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150602_ReferencingRecordAndSetFields_003 { + +type component GeneralComp { } + +type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional +} + +type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_003() runs on GeneralComp { + var template MyRecordOne m_R1 := ( + { + f1 := omit, + f2 := + { + g1 := 0, + g2 := omit + } + }, + { + f1 := 5, + f2 := + { + g1 := 1, + g2 := + { + g1 := 2, + g2 := omit + } + } + } + ); + + // shall cause an error as value list is assigned to m_R1 + var template MyRecordTwo m_R2 := m_R1.f2; + m_R2 := m_R1.f2.g2; + m_R2 := m_R1.f2.g2.g2; + // if we get here, something must be wrong + setverdict(fail); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_003()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_004.ttcn new file mode 100644 index 0000000..752df0a --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_004.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that complement lists on the right-hand side of an assignment are not acceped. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150602_ReferencingRecordAndSetFields_004 { + +type component GeneralComp { } + +type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional +} + +type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_004() runs on GeneralComp { + var template MyRecordOne m_R1 := complement( + { + f1 := omit, + f2 := + { + g1 := 0, + g2 := omit + } + }, + { + f1 := 5, + f2 := + { + g1 := 1, + g2 := + { + g1 := 2, + g2 := omit + } + } + } + ); + + // shall cause an error as a complement list is assigned to m_R1 + var template MyRecordTwo m_R2 := m_R1.f2; + m_R2 := m_R1.f2.g2; + m_R2 := m_R1.f2.g2.g2; + // if we get here, something must be wrong + setverdict(fail); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_004()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_005.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_005.ttcn new file mode 100644 index 0000000..5da2efa --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_005.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that referencing a template field with the ifpresent attribute causes a rejection. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150602_ReferencingRecordAndSetFields_005 { + +type component GeneralComp { } + +type record MyRecordOne { + MyRecordOne f1 optional +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_005() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := * ifpresent + } + var template MyRecordOne m_R2 := { + f1 := m_R1.f1.f1 // access to a field with ifpresent shall cause an error! + } + setverdict(fail); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_005()); +} + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_006.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_006.ttcn new file mode 100644 index 0000000..6bfd583 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/NegSem_150602_ReferencingRecordAndSetFields_006.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that referencing a field of an address type, which actual value is null shall cause rejection. + ** @verdict pass reject + *****************************************************************/ + +//Restriction d) +/*Special value null: referencing a field of an address type, which actual value is null shall cause an error.*/ + +module NegSem_150602_ReferencingRecordAndSetFields_006 { + +type component GeneralComp { } + +type integer address; + +type record MyRecordOne { + address f1 +} + +testcase TC_NegSem_150602_ReferencingRecordAndSetFields_006() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := null + } + var template MyRecordOne m_R2 := { + f1 := m_R1.f1.f1 // access to a field with null shall cause an error! + } + setverdict(pass); +} + +control{ + execute(TC_NegSem_150602_ReferencingRecordAndSetFields_006()); +} + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_001.ttcn new file mode 100644 index 0000000..b65bb76 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_001.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.6.2, ? shall be returned for mandatory subfields and * shall be returned for optional subfields. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150602_ReferencingRecordAndSetFields_001 { + + type component GeneralComp { } + + type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional + } + + type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional + } + + testcase TC_Sem_150602_ReferencingRecordAndSetFields_001() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := 0, + f2 := ? + } + + // m_R2.g1 is mandatory, therefore it shall be ? + // m_R2.g2 is optional, therefore it shall be * + var template MyRecordTwo m_R2 := m_R1.f2; + + var template(value) MyRecordTwo m_value := { + g1 := 5, + g2 := omit + } + + // match against ? + var boolean v_matchRes1 := match(5, m_R2.g1); + + + if (v_matchRes1) { + setverdict(pass); + } else { + setverdict(fail, "match against ?"); + } + + } + + control{ + execute(TC_Sem_150602_ReferencingRecordAndSetFields_001()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_002.ttcn new file mode 100644 index 0000000..aad9fbf --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_002.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.2, Ensure that the recurisve anyvalue expansion is performed correctly when new values are assigned. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150602_ReferencingRecordAndSetFields_002 { + +type component GeneralComp { } + +type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional +} + +type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional +} + +testcase TC_Sem_150602_ReferencingRecordAndSetFields_002() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := 0, + f2 := ? + } + + m_R1.f2.g2.g2 := {g1:=1, g2:=omit}; + // as f2 is ? and we access g2.g2, TTCN-3 should expand the following fields to + // contain the following values: + // m_R1.f1 = 0 + // m_R1.f2 = { + // g1 = ? + // g2 = { + // g1 = ?, + // g2 = { + // g1 = 1 + // g2 = omit + // } + // } + // } + + if (match(valueof(m_R1.f1), 0) and + ispresent(m_R1.f2.g2) and + ispresent(m_R1.f2.g2.g2) and + ( ispresent(m_R1.f2.g2.g2.g2) == false) and + match( valueof(m_R1.f2.g2.g2.g1), 1 ) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_150602_ReferencingRecordAndSetFields_002()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_003.ttcn new file mode 100644 index 0000000..941e407 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_003.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.6.2, ? shall be returned for mandatory subfields and * shall be returned for optional subfields. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150602_ReferencingRecordAndSetFields_003 { + + type component GeneralComp { } + + type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional + } + + type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional + } + + testcase TC_Sem_150602_ReferencingRecordAndSetFields_003() runs on GeneralComp { + var boolean v_matchRes; + var template MyRecordOne m_R1 := { + f1 := 0, + f2 := ? + } + + // m_R2.g1 is mandatory, therefore it shall be ? + // m_R2.g2 is optional, therefore it shall be * + var template MyRecordTwo m_R2 := m_R1.f2; + var MyRecordTwo m_value := { + g1 := 5, + g2 := omit + } + + // match against {?, *} + v_matchRes := match(m_value, MyRecordTwo:{m_R2.g1, m_R2.g2}); + + + if (v_matchRes) { + setverdict(pass); + } else { + setverdict(fail, "match against {?, *}"); + } + + } + + control{ + execute(TC_Sem_150602_ReferencingRecordAndSetFields_003()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_004.ttcn new file mode 100644 index 0000000..592a970 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150602_referencing_record_and_set_fields/Sem_150602_ReferencingRecordAndSetFields_004.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.6.2, ? shall be returned for mandatory subfields and * shall be returned for optional subfields. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150602_ReferencingRecordAndSetFields_004 { + + type component GeneralComp { } + + type record MyRecordTwo { + integer g1, + MyRecordTwo g2 optional + } + + type record MyRecordOne { + integer f1 optional, + MyRecordTwo f2 optional + } + + testcase TC_Sem_150602_ReferencingRecordAndSetFields_004() runs on GeneralComp { + var template MyRecordOne m_R1 := { + f1 := 0, + f2 := ? + } + + // m_R2.g1 is mandatory, therefore it shall be ? + // m_R2.g2 is optional, therefore it shall be * + var template MyRecordTwo m_R2 := m_R1.f2; + + var MyRecordTwo m_value := { + g1 := 5, + g2 := omit + } + + // match against {?, *} - use dotted notation to cover other expansion thread + var boolean v_matchRes := match(m_value, MyRecordTwo:{m_R1.f2.g1, m_R1.f2.g2}); + + + if (v_matchRes) { + setverdict(pass); + } else { + setverdict(fail, "match against {?, *} - use dotted notation to cover other expansion thread"); + } + } + + control{ + execute(TC_Sem_150602_ReferencingRecordAndSetFields_004()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_001.ttcn new file mode 100644 index 0000000..71f7ec5 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_001.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing an element within a value list causes an error in the context of record of. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_001 { + + type component GeneralComp { } + + type record of integer RoI; + type record of RoI RoRoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_001() runs on GeneralComp { + var template RoI m_one; + var template RoRoI m_two; + template RoRoI constraint_value := {{},{0},{0,0},{0,0,0}}; + + m_two := ( constraint_value, constraint_value ); // value list + m_one := m_two[0]; // shall cause an error as we access a value list + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_001()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_002.ttcn new file mode 100644 index 0000000..c4cc978 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_002.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that access to unitialized fields in the context of record of is rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_002 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_002() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one[0] := 0; + m_one[2] := 1; + v_test := valueof(m_one[1]); // shall cause an error as element one is an unitialized field + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_002()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_003.ttcn new file mode 100644 index 0000000..9c2f8ef --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_003.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that anyvalueornone fields in the context of record of is rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_003 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_003() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {0,*,1,2}; + v_test := valueof(m_one[1]); // shall cause an error as element one is an "any value or none" field + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_003()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_004.ttcn new file mode 100644 index 0000000..6cda609 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_004.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that complement value lists in the context of record of are rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_004 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_004() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {0,complement(1,3,5),1,2}; + v_test := valueof(m_one[1]); // shall cause an error as element one is a complement list + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_004()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_005.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_005.ttcn new file mode 100644 index 0000000..662e8ec --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_005.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that subset in the context of record of are rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_005 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_005() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {0,subset(1,3,5),1,2}; + v_test := valueof(m_one[1]); // shall cause an error as element one is a subset + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_005()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_006.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_006.ttcn new file mode 100644 index 0000000..16c5fb6 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_006.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that superset in the context of record of are rejected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_006 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_006() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {0,superset(1,3,5),1,2}; + v_test := valueof(m_one[1]); // shall cause an error as element one is a superset + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_006()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_007.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_007.ttcn new file mode 100644 index 0000000..660e046 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_007.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that access into permutation in record of templates is forbidden. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_007 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_007() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {permutation(0,1,3,?),2,*}; + v_test := valueof(m_one[2]); // shall cause an error as the third element (index 2) will be inside the permutation + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_007()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_008.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_008.ttcn new file mode 100644 index 0000000..c335332 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_008.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that access to record of indexes is forbidden when a previous index entry is a permutation with a *. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_008 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_008() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {permutation(0,1,3,*),2,?}; + v_test := valueof(m_one[5]); // shall cause an error as the permutation contains a * that is able to cover any record of indexes + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_008()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_009.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_009.ttcn new file mode 100644 index 0000000..cb428e9 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_009.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that access to ifpresent fields is not allowed. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_009 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_009() runs on GeneralComp { + var template RoI m_one; + var integer v_test; + + m_one := {1 ifpresent,2,?}; + v_test := valueof(m_one[0]); // shall cause an error due to the presence of ifpresent + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_009()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_010.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_010.ttcn new file mode 100644 index 0000000..098a0a4 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_010.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing AnyValueOrNone fields is not allowed. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_010 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_010() runs on GeneralComp { + var template RoI m_one; + + m_one := ?; + m_one[2] := 2; + // assignment should yield {?,?,2,*} + + if (not match(5,m_one[0])) { + setverdict(fail); + } + if (not match(5,m_one[1])) { + setverdict(fail); + } + if (not match(2,m_one[2])) { + setverdict(fail); + } + if (not match(5,m_one[3])) { // shall cause an error due to the presence of AnyValueOrNone + setverdict(fail); + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_010()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_011.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_011.ttcn new file mode 100644 index 0000000..07456b5 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_011.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing uninitialized fields is not allowed. + ** @verdict pass reject + *****************************************************************/ + + //Restriction a) Omit: referencing an element within a record of, set of or array field to which omit is assigned shall follow the rules specified in clause 6.2.3. + + /*Clause 6.2.3: If the value of the element indicated by the index at the right-hand of an assignment is undefined (uninitialized), this +shall cause a semantic or runtime error. Referencing an identified element of an uninitialized or omitted record of or set +of field or value on the right hand side of an assignment shall cause an error.*/ + + +module NegSem_150603_ReferencingRecordOfAndSetElements_011 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_011() runs on GeneralComp { + + var template RoI m_one; + var template RoI m_two; + + m_one := {1,-}; // {1,-} + m_two := {m_one[1],4}; // {-,4} error not allowed referencing + + if (not isvalue(m_two)) { + setverdict(pass); + } + + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_011()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_012.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_012.ttcn new file mode 100644 index 0000000..10e9bce --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_012.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing uninitialized fields is not allowed. + ** @verdict pass reject + *****************************************************************/ + +//Restriction a) Omit: referencing an element within a record of, set of or array field to which omit is assigned shall follow the rules specified in clause 6.2.3. + +/*Clause 6.2.3: If the value of the element indicated by the index at the right-hand of an assignment is undefined (uninitialized), this +shall cause a semantic or runtime error. Referencing an identified element of an uninitialized or omitted record of or set +of field or value on the right hand side of an assignment shall cause an error.*/ + + +module NegSem_150603_ReferencingRecordOfAndSetElements_012{ + + type component GeneralComp { } + + type set of integer SoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_012() runs on GeneralComp { + + var template SoI m_one; + var template SoI m_two; + + m_one := {1,-}; // {1,-} + m_two := {m_one[1],2}; // {-,2} error not allowed referencing + + if (not isvalue(m_two)) { + setverdict(pass); + } + + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_012()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_013.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_013.ttcn new file mode 100644 index 0000000..9d10284 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_013.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing uninitialized fields is not allowed. + ** @verdict pass reject + *****************************************************************/ + +//Restriction a) Omit: referencing an element within a record of, set of or array field to which omit is assigned shall follow the rules specified in clause 6.2.3. + +/*Clause 6.2.3: If the value of the element indicated by the index at the right-hand of an assignment is undefined (uninitialized), this +shall cause a semantic or runtime error. Referencing an identified element of an uninitialized or omitted record of or set +of field or value on the right hand side of an assignment shall cause an error.*/ + + +module NegSem_150603_ReferencingRecordOfAndSetElements_013{ + + type component GeneralComp { } + + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_013() runs on GeneralComp { + + var integer m_one[2]; + var integer m_two[2]; + + m_one := {1,-}; // {1,-} + m_two := {m_one[1],2}; // {-,2} error not allowed referencing + + if (not isvalue(m_two)) { + setverdict(pass); + } + + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_013()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_014.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_014.ttcn new file mode 100644 index 0000000..cab3c38 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_014.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing an element within a value list causes an error in the context of set of. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_014 { + + type component GeneralComp { } + + type set of integer RoI; + type set of RoI RoRoI; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_014() runs on GeneralComp { + var template RoI m_one; + var template RoRoI m_two; + template RoRoI constraint_value := {{},{0},{0,0},{0,0,0}}; + + m_two := ( constraint_value, constraint_value ); // value list + m_one := m_two[0]; // shall cause an error as we access a value list + + setverdict(fail); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_014()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_015.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_015.ttcn new file mode 100644 index 0000000..c83a028 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/NegSem_150603_ReferencingRecordOfAndSetElements_015.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing an element of an address type, which actual value is null shall cause an error. + ** @verdict pass reject + *****************************************************************/ + + //Restriction h) +/*Special value null: referencing an element of an address type, which actual value is null shall cause an error.*/ + +module NegSem_150603_ReferencingRecordOfAndSetElements_015 { + + type component GeneralComp { } + + type set of integer RoI; + type integer address; + + testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_015() runs on GeneralComp { + var address v_add := null; + var template RoI m_one; + + + m_one := {v_add, 1}; // // shall cause an error as we access a value list + + setverdict(pass); + } + + control{ + execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_015()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_001.ttcn new file mode 100644 index 0000000..24d7832 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that assignment of an anyvalue on the right hand side yields an anyvalue in the context of record of. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150603_ReferencingRecordOfAndSetElements_001 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_001() runs on GeneralComp { + var template RoI m_one; + var template RoI m_two; + + m_one := {0,?,2}; + m_two := {0,1,2}; + m_two[1] := m_one[1]; + + if (match(5,m_two[1])) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_001()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_002.ttcn new file mode 100644 index 0000000..1cb8ca8 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_002.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that assignment to a anyvalue in the context of record of is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150603_ReferencingRecordOfAndSetElements_002 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_002() runs on GeneralComp { + var template RoI m_one; + + m_one := ?; + m_one[2] := 2; + // assignment should yield {?,?,2,*} + + if (not match(5,m_one[0])) { + setverdict(fail); + } + if (not match(5,m_one[1])) { + setverdict(fail); + } + if (not match(2,m_one[2])) { + setverdict(fail); + } + + setverdict(pass); + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_002()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_003.ttcn new file mode 100644 index 0000000..916eb22 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_003.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that assignment to a anyvalue in the context of record of is handled correctly in two subsequent assignments. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150603_ReferencingRecordOfAndSetElements_003 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_003() runs on GeneralComp { + var template RoI m_one; + + m_one := ?; + m_one[2] := 2; + // assignment should yield {?,?,2,*} + m_one[4] := 3; + // assignment should yield {?,?,2,?,3,*} + + if (match(5,m_one[0]) and + match(5,m_one[1]) and + match(2,m_one[2]) and + match(5,m_one[3]) and + match(3,m_one[4]) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_003()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_004.ttcn new file mode 100644 index 0000000..dcba625 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_004.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that assignment to a anyvalue in the context of record of is handled correctly when the first element is changed. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150603_ReferencingRecordOfAndSetElements_004 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_004() runs on GeneralComp { + var template RoI m_one; + + m_one := ?; + m_one[0] := 2; + // assignment should yield {2,*} + + if (not match(2,m_one[0])) { + setverdict(fail); + } + + setverdict(pass); + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_004()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_005.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_005.ttcn new file mode 100644 index 0000000..662cd85 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_005.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that access outside permutation fields is allowed and works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150603_ReferencingRecordOfAndSetElements_005 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_005() runs on GeneralComp { + var template RoI m_one; + var template integer m_two; + + m_one := {permutation(0,1,3,?),2,?}; + // assignment should yield ? + m_two := m_one[5]; + + if (match(5,m_two)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_005()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_006.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_006.ttcn new file mode 100644 index 0000000..ac49474 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_006.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing an element within a record of, set of or array field to which omit is assigned works as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Restriction a) +/*Omit: referencing an element within a record of, set of or array field to which omit is assigned shall follow the rules specified in clause 6.2.3.*/ + + +module Sem_150603_ReferencingRecordOfAndSetElements_006 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_006() runs on GeneralComp { + var template RoI m_one; + var template RoI m_two := {6}; + + m_one := {1,-,3}; + // assignment should yield omit + m_two := m_one; + + if (ispresent(m_two)) { + setverdict(pass,m_two); + } else { + setverdict(fail,m_two); + } + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_006()); + } + + + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_007.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_007.ttcn new file mode 100644 index 0000000..b6ec17c --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150603_referencing_record_of_and_set_elements/Sem_150603_ReferencingRecordOfAndSetElements_007.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.3, Ensure that referencing an element within a record of, set of or array field to which omit is assigned works as expected + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + + //Restriction g) +/* AnyElementsOrNone: when referencing an element of a record of or set of template or field that contains AnyElementsOrNone, the result of an operation + * is dependent on the position of AnyElementsOrNone, the referenced index and length attributes attached to AnyElementsOrNone. +*/ + + +module Sem_150603_ReferencingRecordOfAndSetElements_007 { + + type component GeneralComp { } + + type record of integer RoI; + + testcase TC_Sem_150603_ReferencingRecordOfAndSetElements_007() runs on GeneralComp { + var template RoI m_one; + + m_one := {1,?, * length(1..3), 5}; + m_one[1] := 2; + m_one[2] := 2; + + // assignment should yield {1,2,2,?,?,5} + + if (not match(1,m_one[0])) { + setverdict(fail,m_one); + } + if (not match(2,m_one[1])) { + setverdict(fail,m_one); + } + if (not match(2,m_one[2])) { + setverdict(fail,m_one); + } + + setverdict(pass); + } + + control{ + execute(TC_Sem_150603_ReferencingRecordOfAndSetElements_007()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NOTES b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NOTES new file mode 100644 index 0000000..7053c8c --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NOTES @@ -0,0 +1 @@ +The semantic tests in this section require the corresponding remote procedure implemented \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NegSem_150604_ReferencingSignatureParameters_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NegSem_150604_ReferencingSignatureParameters_001.ttcn new file mode 100644 index 0000000..f2089e6 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/NegSem_150604_ReferencingSignatureParameters_001.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.6.4, Test modification of signature parameters. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_150604_ReferencingSignatureParameters_001 { + +/** + * @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_150604_ReferencingSignatureParameters_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + +template p_NegSem_150604_ReferencingSignatureParameters_001 s_baseTemplate := ( + {p_par1 := -, p_par2 := 4, p_par3 := ?} , {p_par1 := -, p_par2 := 4, p_par3 := 1} +); + +template p_NegSem_150604_ReferencingSignatureParameters_001 s_returnTemplate modifies s_baseTemplate := { + p_par3 := 5 +} //cannot modify list value template + +template p_NegSem_150604_ReferencingSignatureParameters_001 s_wrongTemplate modifies s_baseTemplate := { + p_par3 := 3 +} //cannot modify list value template + + + type port remotePort procedure { + out p_NegSem_150604_ReferencingSignatureParameters_001; + } + +type component GeneralComp { + port remotePort PCO; +} + +testcase TC_NegSem_150604_ReferencingSignatureParameters_001() runs on GeneralComp { + +} + +control{ + execute(TC_NegSem_150604_ReferencingSignatureParameters_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001.ttcn new file mode 100644 index 0000000..1b44d87 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150604_referencing_signature_parameters/Sem_150604_ReferencingSignatureParameters_001.ttcn @@ -0,0 +1,78 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.6.4, Test modification of signature parameters. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150604_ReferencingSignatureParameters_001 { + +/** + * @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() 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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_001.ttcn new file mode 100644 index 0000000..be8fac5 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_001.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables does not allow referencing alternatives inside an union with omit + ** @verdict pass reject + *****************************************************************/ + + //Restriction a) + /*referencing an alternative of a union template or template field to which Omit, AnyValueOrNone, + * a template list or a complemented list is assigned, at the right hand side of an assignment, shall cause an error.*/ + + + +module NegSem_150605_Referencing_union_alternatives_001 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + + + type component GeneralComp { } + + + testcase TC_NegSem_150605_Referencing_union_alternatives_001() runs on GeneralComp { + + + + + var template ExampleType m_template; + var template integer m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b:= omit; + + m_template_2 := m_template.b.u1; //error: omit + + setverdict(pass); + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_001()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_002.ttcn new file mode 100644 index 0000000..3e577d5 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_002.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables does not allow referencing alternatives inside an union with AnyValueOrNone + ** @verdict pass reject + *****************************************************************/ +//Restriction a) +/*referencing an alternative of a union template +or template field to which Omit, AnyValueOrNone, a template list or a complemented list is assigned, at the right hand side of an assignment, shall cause an error.*/ + + +module NegSem_150605_Referencing_union_alternatives_002 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + + + type component GeneralComp { } + + + testcase TC_NegSem_150605_Referencing_union_alternatives_002() runs on GeneralComp { + + + + + var template ExampleType m_template; + var template integer m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b:= *; + + m_template_2 := m_template.b.u1; //error: AnyValueOrNone + + setverdict(pass); + + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_002()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_003.ttcn new file mode 100644 index 0000000..8debccb --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_003.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables does not allow referencing alternatives inside an union with list + ** @verdict pass reject + *****************************************************************/ + + //Restriction a) +/*referencing an alternative of a union template +or template field to which Omit, AnyValueOrNone, a template list or a complemented list is assigned, at the right hand side of an assignment, shall cause an error.*/ + + +module NegSem_150605_Referencing_union_alternatives_003 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + + + type component GeneralComp { } + + + testcase TC_NegSem_150605_Referencing_union_alternatives_003() runs on GeneralComp { + + + + + var template ExampleType m_template; + var template integer m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b.u1:=(1,2); + m_template.b.u2:=2.0; + + m_template_2 := m_template.b.u1; //error: value list + + setverdict(pass); + + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_003()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_004.ttcn new file mode 100644 index 0000000..1d78051 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_004.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables does not allow referencing alternatives inside an union with complemented list + ** @verdict pass reject + *****************************************************************/ + + //Restriction a) +/*referencing an alternative of a union template +or template field to which Omit, AnyValueOrNone, a template list or a complemented list is assigned, at the right hand side of an assignment, shall cause an error.*/ + + +module NegSem_150605_Referencing_union_alternatives_004 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + + + type component GeneralComp { } + + + testcase TC_NegSem_150605_Referencing_union_alternatives_004() runs on GeneralComp { + + + + + var template ExampleType m_template; + var template integer m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b.u1:=complement(1,2); + m_template.b.u2:=2.0; + + m_template_2 := m_template.b.u1; //error: complement value list + + setverdict(pass); + + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_004()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_005.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_005.ttcn new file mode 100644 index 0000000..249a957 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_005.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that referencing an alternative of a union template field to which the ifpresent attribute is attached, shall cause an error + ** @verdict pass reject + *****************************************************************/ + +//Restriction c) +/*Ifpresent attribute: referencing an alternative of a union template field to which the ifpresent attribute is +attached, shall cause an error (irrespective of the value or the matching mechanism to which ifpresent is +appended).*/ + + +module NegSem_150605_Referencing_union_alternatives_005 { + + + type union My_Union { + integer u1, + float u2 + } + + type record My_Rec { + My_Union r1 optional + } + + type component GeneralComp { } + + + + testcase TC_NegSem_150605_Referencing_union_alternatives_005() runs on GeneralComp { + + var template integer m_template; + + + + var template My_Rec My_Template; + My_Template.r1 := {u1:=1} ifpresent; + + + m_template := My_Template.r1.u1; //error: ifpresent attribute is attached + + setverdict(pass,m_template); + + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_005()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_006.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_006.ttcn new file mode 100644 index 0000000..5feccfc --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/NegSem_150605_Referencing_union_alternatives_006.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that referencing an alternative of an address type, which actual value is null shall cause + ** @verdict pass reject + *****************************************************************/ + +//Restriction d) +/*Special value null: referencing an alternative of an address type, which actual value is null shall cause +an error.*/ + + +module NegSem_150605_Referencing_union_alternatives_006 { + + type integer address; + + + type union My_Union { + integer u1, + address u2 + } + + + + + type component GeneralComp { } + + + + testcase TC_NegSem_150605_Referencing_union_alternatives_006() runs on GeneralComp { + + var template integer m_template; + + + + var template My_Union My_Template; + My_Template.u1 := 1; + My_Template.u2 := null; + + + + m_template := My_Template.u2; //error: null + + setverdict(pass); + + + } + + control{ + execute(TC_NegSem_150605_Referencing_union_alternatives_006()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_001.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_001.ttcn new file mode 100644 index 0000000..a15a9a1 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_001.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables allow referencing alternatives inside a union template definition + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_150605_Referencing_union_alternatives_001 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b + } + + type port loopbackPort message{inout ExampleType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + + testcase TC_Sem_150605_Referencing_union_alternatives_001() runs on GeneralComp { + + + + + var template ExampleType m_template; + + //assign values to template: + + m_template.a:=10; + m_template.b.u1:=1; + m_template.b.u2:=2.0; + + + messagePort.send(m_template); //send message + + alt { + [] messagePort.receive(m_template) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + + + } + + control{ + execute(TC_Sem_150605_Referencing_union_alternatives_001()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_002.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_002.ttcn new file mode 100644 index 0000000..0f9835c --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_002.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables allow referencing with an Anyvalue union template + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +//Restriction b) +/*when referencing an alternative of a union template or template field to which AnyValue is +assigned, at the right hand side of an assignment, AnyValue shall be returned.*/ + +module Sem_150605_Referencing_union_alternatives_002{ + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + type port loopbackPort message{inout ExampleType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + + testcase TC_Sem_150605_Referencing_union_alternatives_002() runs on GeneralComp { + + + + + + var template ExampleType m_template; + var template integer m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b := ?; + + m_template_2 := m_template.b.u1; //m_template_2 :=? + + if (ispresent(m_template_2)) + { + setverdict(pass,m_template_2); + } else { + setverdict(fail,m_template_2); + } + + } + + control{ + execute(TC_Sem_150605_Referencing_union_alternatives_002()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_003.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_003.ttcn new file mode 100644 index 0000000..445f305 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_003.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables allow referencing with an Anyvalue union template + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +//Restriction b) +/*when referencing an alternative of a union template or template field to which AnyValue is +assigned, at the right hand side of an assignment, AnyValue shall be returned.*/ + +module Sem_150605_Referencing_union_alternatives_003 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b + } + + type port loopbackPort message{inout ExampleType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + + testcase TC_Sem_150605_Referencing_union_alternatives_003() runs on GeneralComp { + + var template ExampleType m_template; + var template ExampleType m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b := ?; + + m_template_2 := m_template; + + m_template_2.b.u1:=1; + + + if (match(valueof(m_template_2),{a := 10,b :={u1 := 1}})) + { + setverdict(pass,m_template_2); + } else { + setverdict(fail,m_template_2); + } + + } + + control{ + execute(TC_Sem_150605_Referencing_union_alternatives_003()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_004.ttcn b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_004.ttcn new file mode 100644 index 0000000..41080d8 --- /dev/null +++ b/core_language/15_templates/1506_referencing_elements_of_templates_or_template_fields/150605_Referencing_union_alternatives/Sem_150605_Referencing_union_alternatives_004.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.6.5, Ensure that template variables allow referencing with an Anyvalue union template + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +//Restriction a) +/*When referencing an alternative of a union template or template field to which AnyValueOrNone or omit is +assigned, at the left hand side of an assignment, the template field is implicitly set to be present and the +referenced alternative becomes the chosen one.*/ + +module Sem_150605_Referencing_union_alternatives_004 { + + type union My_Union { + integer u1, + float u2 + } + + type record ExampleType { // Exampletype record with union + integer a, + My_Union b optional + } + + type port loopbackPort message{inout ExampleType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + + testcase TC_Sem_150605_Referencing_union_alternatives_004() runs on GeneralComp { + + + + + + var template ExampleType m_template; + var template ExampleType m_template_2; + + //assign values to template: + + m_template.a:=10; + m_template.b := omit; + + m_template_2 := m_template; + + m_template_2.b.u1:=1; + + + if (match(valueof(m_template_2),{a := 10,b :={u1 := 1}})) + { + setverdict(pass,m_template_2); + } else { + setverdict(fail,m_template_2); + } + + } + + control{ + execute(TC_Sem_150605_Referencing_union_alternatives_004()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1507_template_matching_mechanisms/README b/core_language/15_templates/1507_template_matching_mechanisms/README new file mode 100644 index 0000000..f165a66 --- /dev/null +++ b/core_language/15_templates/1507_template_matching_mechanisms/README @@ -0,0 +1 @@ +template matching tests can be found in B_matching_incoming_values. \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NOTES b/core_language/15_templates/1508_template_restrictions/NOTES new file mode 100644 index 0000000..f53723b --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NOTES @@ -0,0 +1 @@ +- TODO: grey fields in table 13 could be tested further with negative semantics tests... \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_001.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_001.ttcn new file mode 100644 index 0000000..fa4cce8 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_001.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with anyvalue(?). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_001 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := ?; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_002.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_002.ttcn new file mode 100644 index 0000000..88eb678 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_002.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with setof template. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_002 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := ({1,true},{2,false}); + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_003.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_003.ttcn new file mode 100644 index 0000000..33d94c0 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_003.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with anyvalueornone(*). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_003 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := *; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_004.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_004.ttcn new file mode 100644 index 0000000..a35e5e8 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_004.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with value ranges. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_004 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := {(1..6), true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_005.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_005.ttcn new file mode 100644 index 0000000..5c86f27 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_005.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with supersets. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_005 { + +type record ExampleType { + set of integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := {superset(1,2,3), true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_006.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_006.ttcn new file mode 100644 index 0000000..59f0eaf --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_006.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with subsets. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_006 { + +type record ExampleType { + set of integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmitAny := {subset(1,2,3), true}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_007.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_007.ttcn new file mode 100644 index 0000000..715884d --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_007.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with patterns. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_007 { + +type record ExampleType { + integer a, + charstring b +} + +template(omit) ExampleType exampleOmitAny := {1, pattern "ab*c"}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_008.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_008.ttcn new file mode 100644 index 0000000..3f6d35f --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_008.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with anyelement inside values. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_008 { + +type record ExampleType { + integer a, + charstring b +} + +template(omit) ExampleType exampleOmitAny := {2, ?}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_009.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_009.ttcn new file mode 100644 index 0000000..759b710 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_009.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with anyelemenornone inside values. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_009 { + +type record ExampleType { + integer a, + charstring b +} + +template(omit) ExampleType exampleOmitAny := {2, *}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_010.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_010.ttcn new file mode 100644 index 0000000..0990db7 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_010.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with permutation inside values. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_010 { + +type record ExampleType { + set of integer a, + charstring b +} + +template(omit) ExampleType exampleOmitAny := {permutation(2,4,6),"abcde"}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_011.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_011.ttcn new file mode 100644 index 0000000..73c9b14 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_011.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with length restrictions. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_011 { + +type record ExampleType { + charstring b +} + +template(omit) ExampleType exampleOmitAny := {"abcde" length(1..3)}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_012.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_012.ttcn new file mode 100644 index 0000000..a26abe9 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_012.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with length restrictions. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_012 { + +type record ExampleType { + charstring b +} + +template(omit) ExampleType exampleOmitAny := {"abcde" ifpresent}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_013.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_013.ttcn new file mode 100644 index 0000000..d42fc02 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_013.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is rejected with length restrictions. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_013 { + +type record ExampleType { + integer f1 +} + +template(omit) ExampleType exampleOmitAny := {complement(2,3)}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_014.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_014.ttcn new file mode 100644 index 0000000..6208171 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_014.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with anyvalue(?). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_014 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := ?; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_015.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_015.ttcn new file mode 100644 index 0000000..61a315c --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_015.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with valuelist. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_015 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := ({1,true},{2,false}); + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_016.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_016.ttcn new file mode 100644 index 0000000..9571ac0 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_016.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with anyvalueornone(*). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_016 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := *; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_017.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_017.ttcn new file mode 100644 index 0000000..8eee573 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_017.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with value ranges. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_017 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := {(1..6), true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_018.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_018.ttcn new file mode 100644 index 0000000..8cf84ac --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_018.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with supersets. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_018 { + +type record ExampleType { + set of integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := {superset(1,2,3), true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_019.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_019.ttcn new file mode 100644 index 0000000..bb3f79b --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_019.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with supersets. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_019 { + +type record ExampleType { + set of integer a, + boolean b optional +} + +template(value) ExampleType exampleOmitAny := {superset(1,2,3), true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_020.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_020.ttcn new file mode 100644 index 0000000..b7cc7f7 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_020.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with patterns. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_020 { + +type record ExampleType { + integer a, + charstring b +} + +template(value) ExampleType exampleOmitAny := {1, pattern "ab*c"}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_021.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_021.ttcn new file mode 100644 index 0000000..4c6ec2d --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_021.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with anyelement inside values. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_021 { + +type record ExampleType { + integer a, + charstring b +} + +template(value) ExampleType exampleOmitAny := {2, ?}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_022.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_022.ttcn new file mode 100644 index 0000000..f474cbe --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_022.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with permutation inside values. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_022 { + +type record ExampleType { + set of integer a, + charstring b +} + +template(value) ExampleType exampleOmitAny := {permutation(2,4,6),"abcde"}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_023.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_023.ttcn new file mode 100644 index 0000000..94be4c7 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_023.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with length restrictions. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_023 { + +type record ExampleType { + charstring b +} + +template(value) ExampleType exampleOmitAny := {"abcde" length(1..3)}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_024.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_024.ttcn new file mode 100644 index 0000000..db38b86 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_024.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is rejected with length restrictions. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_024 { + +type record ExampleType { + charstring b +} + +template(value) ExampleType exampleOmitAny := {"abcde" ifpresent}; + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_025.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_025.ttcn new file mode 100644 index 0000000..ac60f93 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_025.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) refuses omitvalue as a whole. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_025 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(present) ExampleType exampleOmit := omit; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_026.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_026.ttcn new file mode 100644 index 0000000..c94592f --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_026.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) refuses omit as a whole. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_026 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmit := omit; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_029.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_029.ttcn new file mode 100644 index 0000000..56c3ea2 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_029.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the template(present) with anyvalue(?) can't be assigned to an omit restricted variable template + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_029 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a, + boolean b + } + + type component GeneralComp { + var template (omit) ExampleType v_omit; //omit restricted template variable + } + + + template (present) ExampleType MyintTemplate :={ //actual template with present restriction contains anytype (?) + a := ?, + b := false + } + + + testcase TC_NegSem_1508_TemplateRestrictions_029() runs on GeneralComp { + + v_omit := MyintTemplate; //error: v_omit is omit restricted, hence can not contain anytype(?) + + if (valueof(v_omit.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_029()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_030.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_030.ttcn new file mode 100644 index 0000000..3a17b70 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_030.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that unrestricted template with anyvalue(?) can't be assigned to an omit restricted variable template + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_030 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a optional, + boolean b + } + + type component GeneralComp { + var template (omit) ExampleType v_omit; //omit restricted template variable + } + + + template ExampleType MyintTemplate :={ //actual template without restriction contains anyvalue (?) + a := ?, + b := false + } + + + testcase TC_NegSem_1508_TemplateRestrictions_030() runs on GeneralComp { + + v_omit := MyintTemplate; //error: v_omit is omit restricted, hence can not contain anyvalue(?) + + if (valueof(v_omit.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_030()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_031.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_031.ttcn new file mode 100644 index 0000000..d2d981c --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_031.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) can't be assigned to a variable template(value) if omit + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_031 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a optional, + boolean b + } + + type component GeneralComp { + var template (value) ExampleType v_value; //value restricted template variable + } + + + template (omit) ExampleType MyintTemplate :=omit; //actual template (with omit restriction) is omit + + + + testcase TC_NegSem_1508_TemplateRestrictions_031() runs on GeneralComp { + + v_value := MyintTemplate; //error: v_value is value restricted, hence can not be omit + + if (valueof(v_value.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_031()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_032.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_032.ttcn new file mode 100644 index 0000000..daa5a0b --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_032.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) can't be assigned to a template(value) variable if contains anyvalueornone(*) + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_032 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a optional, + boolean b + } + + type component GeneralComp { + var template (value) ExampleType v_value; //value restricted template variable + } + + + template (present) ExampleType MyintTemplate :={ //actual template (with present restriction) contains * + a := *, + b:= true + } + + + + + testcase TC_NegSem_1508_TemplateRestrictions_032() runs on GeneralComp { + + v_value := MyintTemplate; //error: v_value is value restricted, hence can not contain * + + if (valueof(v_value.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_032()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_033.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_033.ttcn new file mode 100644 index 0000000..ac99da8 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_033.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that an unrestricted template can't be assigned to a template(value) variable if contains anyvalueornone(*) + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_033 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a optional, + boolean b + } + + type component GeneralComp { + var template (value) ExampleType v_value; //value restricted template variable + } + + + template ExampleType MyintTemplate :={ //actual template (without restriction) contains * + a := *, + b:= true + } + + + + + testcase TC_NegSem_1508_TemplateRestrictions_033() runs on GeneralComp { + + v_value := MyintTemplate; //error: v_value is value restricted, hence can not contain * + + if (valueof(v_value.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_033()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_034.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_034.ttcn new file mode 100644 index 0000000..4d6e404 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_034.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template with omit restriction can't be assigned to a template(present)variable if omit + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_034 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a , + boolean b optional + } + + type component GeneralComp { + var template (present) ExampleType v_present; //value restricted template variable + } + + + template (omit) ExampleType MyintTemplate := omit; //actual template (omit) is omit + + + + + testcase TC_NegSem_1508_TemplateRestrictions_034() runs on GeneralComp { + + v_present := MyintTemplate; //error: v_present is present restricted, hence can not be omit + + if (valueof(v_present.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_034()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_035.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_035.ttcn new file mode 100644 index 0000000..259dde0 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_035.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that an unrestricted template can't be assigned to a template(present)variable if omit + ** @verdict pass reject + *****************************************************************/ + + +module NegSem_1508_TemplateRestrictions_035 { + + type record ExampleType { // Exampletype record contains a charstring and a boolean + charstring a , + boolean b optional + } + + type component GeneralComp { + var template (present) ExampleType v_present; //value restricted template variable + } + + + template ExampleType MyintTemplate := omit; //actual template is omit + + + + + testcase TC_NegSem_1508_TemplateRestrictions_035() runs on GeneralComp { + + v_present := MyintTemplate; //error: v_present is present restricted, hence can not be omit + + if (valueof(v_present.b) == false) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_035()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn new file mode 100644 index 0000000..6dcfe2e --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_036.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) can't be parameter to a template(omit) if contains anyvalueornone(*) + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_036 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (omit) ExampleType m_baseTemplate(template (present) integer MyintTemplate := *) :={ + a := MyintTemplate, // template (present) MyintTemplate contains anyvalueornone(*), which is not allowed in omit restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_036() runs on GeneralComp { + + + if (valueof(m_baseTemplate.b) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_036()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_037.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_037.ttcn new file mode 100644 index 0000000..14206d2 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_037.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) can't be parameter to template(omit) if contains anyvalue(?) + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_037 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (omit) ExampleType m_baseTemplate(template integer MyintTemplate := ?) :={ + a := MyintTemplate, // template MyintTemplate contains anyvalue(?), which is not allowed in omit restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_037() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_037()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_038.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_038.ttcn new file mode 100644 index 0000000..3b73738 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_038.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) can't be parameter to template(value) if it is omit + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_038 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template (omit) integer MyintTemplate := omit) :={ + a := MyintTemplate, // template (omit) MyintTemplate is omit, which is not allowed with value restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_038() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_038()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_039.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_039.ttcn new file mode 100644 index 0000000..8394ffe --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_039.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) can't be parameter to template(value) if it contains anyvalueornone(*) + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_039 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template (present) integer MyintTemplate := *) :={ + a := MyintTemplate, // template (present) MyintTemplate contains anyvalueornone(*), which is not allowed with value restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_039() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_039()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_040.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_040.ttcn new file mode 100644 index 0000000..33add7f --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_040.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that unrestricted template can't be parameter to template(value) if it contains anyvalueornone(*) + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_040 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template integer MyintTemplate := *) :={ + a := MyintTemplate, // template MyintTemplate contains anyvalueornone(*), which is not allowed with value restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_040() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_040()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_041.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_041.ttcn new file mode 100644 index 0000000..c8f0212 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_041.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template (omit) can't be parameter to template(present) if it contains omit + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_041 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (present) ExampleType m_baseTemplate(template (omit) integer MyintTemplate := omit) :={ + a := MyintTemplate, // template (omit) MyintTemplate contains omit, which is not allowed with present restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_041() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_041()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_042.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_042.ttcn new file mode 100644 index 0000000..fc035a9 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_042.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the an unrestriced template can't be parameter to template(present) if it contains omit + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_042 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (present) ExampleType m_baseTemplate(template integer MyintTemplate := omit) :={ + a := MyintTemplate, // template MyintTemplate contains omit, which is not allowed with present restriction + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_042() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_042()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_049.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_049.ttcn new file mode 100644 index 0000000..235e8be --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_049.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that template(present) can't be parameter to a template(omit) + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1508_TemplateRestrictions_049 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (omit) ExampleType m_baseTemplate(template (present) integer MyintTemplate := ?) :={ + a := MyintTemplate, // template (present)is not allowed parameter in omit restriction + // if the content is wrong (see the note in table 13) + b := true + } + + testcase TC_NegSem_1508_TemplateRestrictions_049() runs on GeneralComp { + + + if (valueof(m_baseTemplate.b) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_1508_TemplateRestrictions_049()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_050.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_050.ttcn new file mode 100644 index 0000000..c36e7fc --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_050.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that decoded content match is not allowed for omit template restriction + ** @verdict pass reject, noexecution + ***************************************************/ + +module NegSem_1508_TemplateRestrictions_050 { + + type record MessageType { + hexstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + +testcase TC_NegSem_1508_TemplateRestrictions_050() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template (omit) MessageType mw_matchingTemplate:= { + payload := decmatch Mymessage: {field1:= 10, field2 := omit} //error: omit restriction not allowed + } + + v_testMessage:= { + field1 := 10, + field2 := '1001'B + } + + Message.payload := bit2hex(encvalue(v_testMessage)); //encode message to payload + + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail,mw_matchingTemplate); + } + } + +} + +control{ + execute(TC_NegSem_1508_TemplateRestrictions_050()); +} + +} + \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_051.ttcn b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_051.ttcn new file mode 100644 index 0000000..4c48b91 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/NegSem_1508_TemplateRestrictions_051.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that decoded content match is not allowed for omit template restriction + ** @verdict pass reject, noexecution + ***************************************************/ + +module NegSem_1508_TemplateRestrictions_051 { + + type record MessageType { + hexstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + +testcase TC_NegSem_1508_TemplateRestrictions_051() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template (value) MessageType mw_matchingTemplate:= { + payload := decmatch Mymessage: {field1:= 10, field2 := '1001'B} //error: value restriction not allowed + } + + v_testMessage:= { + field1 := 10, + field2 := '1001'B + } + + Message.payload := bit2hex(encvalue(v_testMessage)); //encode message to payload + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail,mw_matchingTemplate); + } + } + +} + +control{ + execute(TC_NegSem_1508_TemplateRestrictions_051()); +} + +} + \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_001.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_001.ttcn new file mode 100644 index 0000000..824cbab --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a value can be assigned to a template(omit) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_001 { + +type component GeneralComp { } + +testcase TC_Sem_1508_TemplateRestrictions_001() runs on GeneralComp { + var template(omit) integer v_omit; + + v_omit := 20; + + if (valueof(v_omit) == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_001()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_002.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_002.ttcn new file mode 100644 index 0000000..58b4ee7 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(omit) can be assigned to a template(omit) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_002 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmit := omit; + +testcase TC_Sem_1508_TemplateRestrictions_002() runs on GeneralComp { + var template(omit) ExampleType v_omit; + + v_omit := exampleOmit; + + if ( ispresent(v_omit) ) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_002()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_003.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_003.ttcn new file mode 100644 index 0000000..48a0923 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a templat(value) can be assigned to a template(omit) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_003 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleValueOptional := {1, omit}; + +testcase TC_Sem_1508_TemplateRestrictions_003() runs on GeneralComp { + var template(omit) ExampleType v_omit; + + v_omit := exampleValueOptional; + + if (match(valueof(v_omit.a), 1) and + match(ispresent(v_omit.b), false ) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_003()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_004.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_004.ttcn new file mode 100644 index 0000000..c976bbe --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_004.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a value can be assigned to a template(value) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_004 { + +type component GeneralComp { } + +testcase TC_Sem_1508_TemplateRestrictions_004() runs on GeneralComp { + var template(value) integer v_value; + + v_value := 20; + + if (valueof(v_value) == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_004()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_005.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_005.ttcn new file mode 100644 index 0000000..42c0fb3 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_005.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(value) can be assigned to a template(value) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_005 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleValue := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_005() runs on GeneralComp { + var template(value) ExampleType v_value; + + v_value := exampleValue; + + if (match(valueof(v_value.a), 1) and + match(valueof(v_value.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_005()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_006.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_006.ttcn new file mode 100644 index 0000000..5f574d2 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_006.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a value can be assigned to a template(present) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_006 { + +type component GeneralComp { } + +testcase TC_Sem_1508_TemplateRestrictions_006() runs on GeneralComp { + var template(present) integer v_present; + + v_present := 20; + + if (valueof(v_present) == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_006()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_007.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_007.ttcn new file mode 100644 index 0000000..8c21692 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_007.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(omit) can be assigned to a template(present) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_007 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmit := {1, omit}; + +testcase TC_Sem_1508_TemplateRestrictions_007() runs on GeneralComp { + var template(present) ExampleType v_present; + + v_present := exampleOmit; + + if (match(valueof(v_present.a), 1) and + match(ispresent(v_present.b), false) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_007()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_008.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_008.ttcn new file mode 100644 index 0000000..be558f0 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_008.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(value) can be assigned to a template(present) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_008 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleValue := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_008() runs on GeneralComp { + var template(present) ExampleType v_present; + + v_present := exampleValue; + + if (match(valueof(v_present.a), 1) and + match(valueof(v_present.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_008()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_009.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_009.ttcn new file mode 100644 index 0000000..fd0e377 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_009.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(present) can be assigned to a template(present) variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_009 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(present) ExampleType examplePresent := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_009() runs on GeneralComp { + var template(present) ExampleType v_present; + + v_present := examplePresent; + + if (match(valueof(v_present.a), 1) and + match(valueof(v_present.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_009()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_010.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_010.ttcn new file mode 100644 index 0000000..4a47a80 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_010.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a value can be assigned to a template variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_010 { + +type component GeneralComp { } + +testcase TC_Sem_1508_TemplateRestrictions_010() runs on GeneralComp { + var template integer v_template; + + v_template := 20; + + if (valueof(v_template) == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_010()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_011.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_011.ttcn new file mode 100644 index 0000000..f454580 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_011.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(omit) can be assigned to a template variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_011 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmit := {1, omit}; + +testcase TC_Sem_1508_TemplateRestrictions_011() runs on GeneralComp { + var template ExampleType v_template; + + v_template := exampleOmit; + + if (match(valueof(v_template.a), 1) and + match(ispresent(v_template.b), false) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_011()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_012.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_012.ttcn new file mode 100644 index 0000000..6a28ff2 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_012.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(value) can be assigned to a template variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_012 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleValue := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_012() runs on GeneralComp { + var template ExampleType v_template; + + v_template := exampleValue; + + if (match(valueof(v_template.a), 1) and + match(valueof(v_template.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_012()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_013.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_013.ttcn new file mode 100644 index 0000000..38000a3 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_013.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(present) can be assigned to a template variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_013 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template(present) ExampleType examplePresent := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_013() runs on GeneralComp { + var template ExampleType v_template; + + v_template := examplePresent; + + if (match(valueof(v_template.a), 1) and + match(valueof(v_template.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_013()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_014.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_014.ttcn new file mode 100644 index 0000000..cb2421c --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_014.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template can be assigned to a template variable. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_014 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template ExampleType exampleTemplate := {1, true}; + +testcase TC_Sem_1508_TemplateRestrictions_014() runs on GeneralComp { + var template ExampleType v_template; + + v_template := exampleTemplate; + + if (match(valueof(v_template.a), 1) and + match(valueof(v_template.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_014()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_015.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_015.ttcn new file mode 100644 index 0000000..1424765 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_015.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a base template can be modified without restrictions. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_015 { + +type component GeneralComp { } + +type record ExampleType { + integer a, + boolean b optional +} + +template ExampleType m_baseTemplate := { + a := 20, + b := true +} + +template ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 +} + +testcase TC_Sem_1508_TemplateRestrictions_015() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_015()); +} + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_016.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_016.ttcn new file mode 100644 index 0000000..e34574a --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_016.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a base template can be modified with template(present) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_016 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(present) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_016() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_016()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_017.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_017.ttcn new file mode 100644 index 0000000..a5140a8 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_017.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a base template can be modified with template(omit) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_017 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(omit) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_017() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_017()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_018.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_018.ttcn new file mode 100644 index 0000000..543b9aa --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_018.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a base template can be modified with template(value) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_018 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(value) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_018() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_018()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_019.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_019.ttcn new file mode 100644 index 0000000..fa0b4ce --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_019.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(present) base template can be modified with template(present) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_019 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(present) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_019() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_019()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_020.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_020.ttcn new file mode 100644 index 0000000..30fa8f2 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_020.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(present) base template can be modified with template(value) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_020 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(value) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_020() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_020()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_021.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_021.ttcn new file mode 100644 index 0000000..f34cd85 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_021.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(omit) base template can be modified with template(omit) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_021 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(omit) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(omit) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_021() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_021()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_022.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_022.ttcn new file mode 100644 index 0000000..231851e --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_022.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(omit) base template can be modified with template(value) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_022 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(omit) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(value) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_022() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_022()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_023.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_023.ttcn new file mode 100644 index 0000000..a651df4 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_023.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that a template(value) base template can be modified with template(value) restriction. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_023 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(value) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(value) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 22 + } + + testcase TC_Sem_1508_TemplateRestrictions_023() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 22) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_023()); + } + + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_024.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_024.ttcn new file mode 100644 index 0000000..2e48130 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_024.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) base templates are allowed to be modfied to template(omit). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_024 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(omit) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_024() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_024()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_025.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_025.ttcn new file mode 100644 index 0000000..e1e749e --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_025.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) base templates are allowed to be modfied to template(present). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_025 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(omit) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(present) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_025() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_025()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_026.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_026.ttcn new file mode 100644 index 0000000..d3ee1a0 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_026.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) base templates are allowed to be modfied to template(present). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_026 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(value) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template(present) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_026() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_026()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_027.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_027.ttcn new file mode 100644 index 0000000..aff3ea3 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_027.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) base templates are allowed to be modfied to template(omit). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_027 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(value) ExampleType m_baseTemplate := { + a := 20, + b := true + } + +// shall be rejected as template(omit) is not an allowed restriction for template(value) +// templates + template(omit) ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_027() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_027()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_028.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_028.ttcn new file mode 100644 index 0000000..1cf69a8 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_028.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) base templates are allowed to be modfied to template. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_028 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(value) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_028() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_028()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_029.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_029.ttcn new file mode 100644 index 0000000..822c60b --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_029.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) base templates are allowed to be modfied to template. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_029 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(omit) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_029() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_029()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_030.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_030.ttcn new file mode 100644 index 0000000..3c10c7d --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_030.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) base templates are allowed to be modfied to template. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +module Sem_1508_TemplateRestrictions_030 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate := { + a := 20, + b := true + } + + template ExampleType m_modifiedTemplate modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_030() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate.a), 21) and + match(valueof(m_modifiedTemplate.b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_030()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_031.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_031.ttcn new file mode 100644 index 0000000..d11218c --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_031.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(value)->template(present) is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_031 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(value) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template(present) integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_031() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_031()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_032.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_032.ttcn new file mode 100644 index 0000000..f258249 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_032.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(value)->template(omit) is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_032 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(value) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template(omit) integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_032() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_032()); + } + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_033.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_033.ttcn new file mode 100644 index 0000000..25a08e6 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_033.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(value)->template is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_033 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(value) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_033() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_033()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_034.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_034.ttcn new file mode 100644 index 0000000..3c078f5 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_034.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(omit)->template(present) is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_034 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(omit) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template(present) integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_034() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_034()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_035.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_035.ttcn new file mode 100644 index 0000000..a7d7fc6 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_035.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(omit)->template(present) is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_035 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(omit) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_035() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_035()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_036.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_036.ttcn new file mode 100644 index 0000000..9e890a4 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_036.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the restrictiveness of parameters template(omit)->template(present) is handled correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// ATTENTION: valid for TTCN-3:2013 (ETSI ES 201 873-1 V4.5.1) and newer +// Older versions of the core languate standard didn't allow this type of +// modification because of restriction 15.8.c. + +/* +Pro opinion: +Test an intentional change made on the request of the STF160 in TTCN-3:2013. In particular, restriction 15.8.c was taken away from the core language specification (as marked in test case comments). This restriction did indeed mean that the tests would behave as you described, thus producing an error. However, with the restriction missing, the tests are perfectly valid. I also do not understand why you claim that it would not be possible to instantiate super-templates in these cases. Restrictions are always related to actual values and if the values satisfy both restrictions (parent and modified), there's no problem at all. And this is exactly what these test intend to verify. +Besides, the core language specification does not say that the parameters must be the same. There's a rule saying that the parameters shall not be omitted. It is rather unfortunate wording, because it might be interpreted in several ways. There's a CR 6692 regarding this issue. + +Contra opinion +The problem is with the semantics of modified templates. For every actual parameter list, first, the template-to-be-modified is implicitly instantiated and then modified by the given modifications. If the template-to-be-modified is not defined for the actual parameters, then neither is the modified one. Of course, you are right in that this restriction could be applied for actual parameters only and need not be checked at the template-level already. However, it does not make sense to lessen the template restriction of a parameter, as implicitly, it still keeps the stronger restriction (because of the modification-semantics). Therefore, it is misleading to SEEMINGLY allow a template(present) parameter for a template where the super-template has a template(value) parameter. If allowed, the user might use a non-value template as an actual parameter and then get a runtime error, even though the template-restriction matched the one in the formal parameter of the template. Therefore, we interpret the standard in such a way that the inheritance of the parameters includes the inheritance of both the types and the template restrictions of the inherited parameters. Strengthening of template restrictions would indeed not be a problem. Lessening is. + +*/ + +module Sem_1508_TemplateRestrictions_036 { + + type component GeneralComp { } + + type record ExampleType { + integer a, + boolean b optional + } + + template(present) ExampleType m_baseTemplate(template(present) integer p_myInt) := { + a := p_myInt, + b := true + } + + template(present) ExampleType m_modifiedTemplate(template integer p_myInt) modifies m_baseTemplate := { + a := 21 + } + + testcase TC_Sem_1508_TemplateRestrictions_036() runs on GeneralComp { + if (match(valueof(m_modifiedTemplate(1).a), 21) and + match(valueof(m_modifiedTemplate(1).b), true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_036()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_043.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_043.ttcn new file mode 100644 index 0000000..8a5917f --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_043.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that the an unrestriced template can be parameter to template(present) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_043 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (present) ExampleType m_baseTemplate(template integer MyintTemplate := 21) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_043() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_043()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_044.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_044.ttcn new file mode 100644 index 0000000..0e29090 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_044.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template (omit) can be parameter to template(present) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_044 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (present) ExampleType m_baseTemplate(template (omit) integer MyintTemplate := 21) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_044() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_044()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_045.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_045.ttcn new file mode 100644 index 0000000..c03c200 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_045.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that unrestricted template can be parameter to template(value) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_045 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template integer MyintTemplate := 1) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_045() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_045()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_046.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_046.ttcn new file mode 100644 index 0000000..6bd149e --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_046.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that template(present) can be parameter to template(value) + ** @verdict pass reject + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_046 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template (present) integer MyintTemplate := ?) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_046() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_046()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_047.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_047.ttcn new file mode 100644 index 0000000..7ef2cbf --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_047.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that template(omit) can be parameter to template(value) + ** @verdict pass reject + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_047 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (value) ExampleType m_baseTemplate(template (omit) integer MyintTemplate := omit) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_047() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_047()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_048.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_048.ttcn new file mode 100644 index 0000000..45438d7 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_048.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, Ensure that template(present) can be parameter to template(omit) + ** @verdict pass reject + *****************************************************************/ + +module Sem_1508_TemplateRestrictions_048 { + + type record ExampleType { // Exampletype record integer and a boolean + integer a, + boolean b + } + + type component GeneralComp { + } + + + + template (omit) ExampleType m_baseTemplate(template integer MyintTemplate := ?) :={ + a := MyintTemplate, + b := true + } + + testcase TC_Sem_1508_TemplateRestrictions_048() runs on GeneralComp { + + + if (ispresent(m_baseTemplate.a) == true) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_048()); + } +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_049.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_049.ttcn new file mode 100644 index 0000000..501b27d --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_049.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that decoded content match is allowed for present template restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + +module Sem_1508_TemplateRestrictions_049 { + + type record MessageType { + hexstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_Sem_1508_TemplateRestrictions_049() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template (present) MessageType mw_matchingTemplate := { + payload := decmatch Mymessage: {field1:= 10, field2 := '1001'B} + } + + v_testMessage := { + field1 := 10, + field2 := '1001'B + } + + Message.payload := bit2hex(encvalue(v_testMessage)); //encode message to payload + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail,mw_matchingTemplate); + } + } + } + + control{ + execute(TC_Sem_1508_TemplateRestrictions_049()); + } + +} + \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_050.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_050.ttcn new file mode 100644 index 0000000..b8edccc --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_050.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, ensure that symbols created during template expansion are checked against omit template restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing elements of templates or templates fields with the value or omit +// restriction, the rules for referencing elements of values are used. + +// Note: +// Older rules (TTCN-3:2014) didn't contain this restriction. This caused the following test +// to end with a dynamic error + +module Sem_1508_TemplateRestrictions_050 { + +type component GeneralComp { } + +type record R { + integer field1, + integer field2 +} + +testcase TC_Sem_1508_TemplateRestrictions_050() runs on GeneralComp { + var omit R v_test := omit; + v_test.field1 := 0; // As the result of expansion, v_test value is { field1 := -, field2 := - } + // After the field assignment it changes to { field1 := 0, field2 := - } + // In the older versions, the result was { field1 := 0, field2 := ? } + // which violated the omit restriction + if (valueof(v_test.field1) == 0 and not isbound(v_test.field2)) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_050()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_051.ttcn b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_051.ttcn new file mode 100644 index 0000000..0f32f58 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Sem_1508_TemplateRestrictions_051.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.8, ensure that symbols created during template expansion are checked against value template restriction + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// When referencing elements of templates or templates fields with the value or omit +// restriction, the rules for referencing elements of values are used. + +// Note: +// Older rules (TTCN-3:2014) didn't contain this restriction. This caused the following test +// to end with a dynamic error + +module Sem_1508_TemplateRestrictions_051 { + +type component GeneralComp { } + +type record R { + record + { + integer subfield1, + integer subfield2 + } field1 optional, + integer field2 +} + +testcase TC_Sem_1508_TemplateRestrictions_051() runs on GeneralComp { + var template(value) R v_test := { field1 := omit, field2 := 2 }; + v_test.field1.subfield1 := 0; // As the result of expansion, v_test value is { field1 := { -, - }, field2 := 2 } + // After the field assignment it changes to { field1 := { 0, - }, field2 := 2 } + // In the older versions, the result was { field1 := { 0, ? }, field2 := ? } + // which violated the value restriction + + if (valueof(v_test.field1.subfield1) == 0 and not isbound(v_test.field1.subfield2)) { setverdict(pass); } + else { setverdict(fail); } +} + +control{ + execute(TC_Sem_1508_TemplateRestrictions_051()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_001.ttcn b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_001.ttcn new file mode 100644 index 0000000..ff838ae --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_001.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is accepted with value omitvalue. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1508_TemplateRestrictions_001 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmit := omit; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_002.ttcn b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_002.ttcn new file mode 100644 index 0000000..ac3f288 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_002.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(omit) is accepted with a concrete value. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1508_TemplateRestrictions_002 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(omit) ExampleType exampleOmit := {1, true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn new file mode 100644 index 0000000..355de02 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_003.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(value) is accepted with a concrete value. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1508_TemplateRestrictions_003 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(value) ExampleType exampleOmit := {1, true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn new file mode 100644 index 0000000..8b00217 --- /dev/null +++ b/core_language/15_templates/1508_template_restrictions/Syn_1508_TemplateRestrictions_004.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.8, Ensure that template(present) is accepted with a concrete value. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1508_TemplateRestrictions_004 { + +type record ExampleType { + integer a, + boolean b optional +} + +template(present) ExampleType exampleOmit := {1, true}; + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/NOTES b/core_language/15_templates/1509_match_operation/NOTES new file mode 100644 index 0000000..a3c8564 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/NOTES @@ -0,0 +1 @@ +- NOTE: This could be extended to cover any kinds of types and wildcards. We keep this simple. \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn new file mode 100644 index 0000000..2388489 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_001.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation refuses two templates as actual parameters. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1509_MatchOperation_001 { + +type component GeneralComp { } + +template integer m_lessThan10 := (-infinity..9); +template integer m_second := (-20,-40); + +testcase TC_NegSem_1509_MatchOperation_001() runs on GeneralComp { + if (match(m_second, m_lessThan10)) { // shall fail as both actual parameters refer to templates + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_NegSem_1509_MatchOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn new file mode 100644 index 0000000..6a8bcb5 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 521 + ** @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); + } +} + +control{ + execute(TC_NegSem_1509_MatchOperation_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn new file mode 100644 index 0000000..7470762 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/NegSem_1509_MatchOperation_003.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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, G)) { // error: different enum type + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1509_MatchOperation_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn new file mode 100644 index 0000000..b027898 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works as expected on a template with range restriction when the tested value is inside the range. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_001 { + +type component GeneralComp { } + +template integer m_lessThan10 := (-infinity..9); + +testcase TC_Sem_1509_MatchOperation_001() runs on GeneralComp { + var integer v_value := -20; + + if (match(v_value, m_lessThan10)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn new file mode 100644 index 0000000..c83109c --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_002.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works as expected on a template with range restriction when the tested value is outside the range. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_002 { + +type component GeneralComp { } + +template integer m_lessThan10 := (-infinity..9); + +testcase TC_Sem_1509_MatchOperation_002() runs on GeneralComp { + var integer v_value := 20; + + if (match(v_value, m_lessThan10)) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn new file mode 100644 index 0000000..a4f71b0 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_003.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly on records in the positive case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_003 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + boolean field2 +} + +template MyRecord m_receiveTemplate := { + field1 := pattern "ab*de", + field2 := ? +} + +testcase TC_Sem_1509_MatchOperation_003() runs on GeneralComp { + var MyRecord v_value := { + field1 := "abcde", + field2 := true + } + + if (match(v_value, m_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_004.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_004.ttcn new file mode 100644 index 0000000..2c0dced --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_004.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly on records in the negative case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_004 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + boolean field2 +} + +template MyRecord m_receiveTemplate := { + field1 := "ab*de", + field2 := ? +} + +testcase TC_Sem_1509_MatchOperation_004() runs on GeneralComp { + var MyRecord v_value := { + field1 := "abc", + field2 := true + } + + if (match(v_value, m_receiveTemplate)) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_004()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_006.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_006.ttcn new file mode 100644 index 0000000..550220d --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_006.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly on records with optional fields in the positive case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_006 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + boolean field2 optional +} + +template MyRecord mw_receiveTemplate := { + field1 := pattern "ab*de", + field2 := * +} + +testcase TC_Sem_1509_MatchOperation_006() runs on GeneralComp { + var MyRecord v_value := { + field1 := "abcde", + field2 := omit + } + + if (match(v_value, mw_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_006()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_007.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_007.ttcn new file mode 100644 index 0000000..329478c --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_007.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly on sets in the positive case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_007 { + +type component GeneralComp { } + +type set MySet { + charstring field1, + boolean field2 +} + +template MySet mw_receiveTemplate := { + field1 := pattern "ab*de", + field2 := ? +} + +testcase TC_Sem_1509_MatchOperation_007() runs on GeneralComp { + var MySet v_value := { + field1 := "abcde", + field2 := true + } + + if (match(v_value, mw_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_007()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn new file mode 100644 index 0000000..38d87c8 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_008.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:15.9, Ensure that the match operation works correctly on sets in the negative case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_008 { + +type component GeneralComp { } + +type set MySet { + charstring field1, + boolean field2 +} + +template MySet mw_receiveTemplate := { + field1 := "ab*de", + field2 := ? +} + +testcase TC_Sem_1509_MatchOperation_008() runs on GeneralComp { + var MySet v_value := { + field1 := "abc", + field2 := true + } + + if (match(v_value, mw_receiveTemplate)) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_008()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn new file mode 100644 index 0000000..f55a6b9 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_010.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.9, Ensure that the match operation works correctly on sets with optional fields in the positive case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1509_MatchOperation_010 { + +type component GeneralComp { } + +type set MySet { + charstring field1, + boolean field2 optional +} + +template MySet mw_receiveTemplate := { + field1 := pattern "ab*de", + field2 := * +} + +testcase TC_Sem_1509_MatchOperation_010() runs on GeneralComp { + var MySet v_value := { + field1 := "abcde", + field2 := omit + } + + if (match(v_value, mw_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1509_MatchOperation_010()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn new file mode 100644 index 0000000..6abd24f --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_011.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn new file mode 100644 index 0000000..5c7f63e --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_012.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn new file mode 100644 index 0000000..a680265 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_013.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn new file mode 100644 index 0000000..343aebe --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_014.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn new file mode 100644 index 0000000..791dfd9 --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_015.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn new file mode 100644 index 0000000..708191f --- /dev/null +++ b/core_language/15_templates/1509_match_operation/Sem_1509_MatchOperation_016.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NOTES b/core_language/15_templates/1510_valueof_operation/NOTES new file mode 100644 index 0000000..f1ddf69 --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NOTES @@ -0,0 +1 @@ +- NOTE: This could be extended to cover any kinds of types etc. We keep this simple. \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn new file mode 100644 index 0000000..e0aee74 --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_001.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.10, Ensure that the valueof function works correctly on omit. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1510_ValueOfOperation_001 { + +type component GeneralComp { } + +testcase TC_NegSem_1510_ValueOfOperation_001() runs on GeneralComp { + var template integer m_int := omit; + var integer v_int := valueof(m_int); + + // if we get here, something must be wrong as valueof on m_int shall cause an error + // due to the omit. + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn new file mode 100644 index 0000000..bf1d7de --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.10, Ensure that the valueof function works correctly on templates with wildcards. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1510_ValueOfOperation_002 { + +type component GeneralComp { } + +type record ExampleType { + integer field1, + boolean field2 +} + +template ExampleType m_template := { + field1 := *, + field2 := ? +} + +testcase TC_NegSem_1510_ValueOfOperation_002() runs on GeneralComp { + var ExampleType v_int := valueof(m_template); + + // if we get here, something must be wrong as valueof on m_template shall cause an error + // due to the * and ? wildcards. + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn new file mode 100644 index 0000000..a2665b2 --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.10, Ensure that the valueof function works correctly on regular value templates. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1510_ValueOfOperation_003 { + +type component GeneralComp { } + +type record ExampleType { + integer field1, + boolean field2 +} + +testcase TC_NegSem_1510_ValueOfOperation_003() runs on GeneralComp { + var template ExampleType f_first := { + field1 := (1, 2), + field2 := true + }; + + var ExampleType v_second := valueof(f_first); + + // if we get here, something must be wrong as valueof on m_template shall cause an error + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_004.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_004.ttcn new file mode 100644 index 0000000..1699d3b --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_004.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.10, Ensure that the valueof function works correctly on range templates. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1510_ValueOfOperation_004 { + +type component GeneralComp { } + +testcase TC_NegSem_1510_ValueOfOperation_004() runs on GeneralComp { + var template integer v_test := (1..5); + + var integer v_second := valueof(v_test); + + // if we get here, something must be wrong as valueof on v_test shall cause an error + // as it is not a template. + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_004()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_005.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_005.ttcn new file mode 100644 index 0000000..71a1b8a --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_005.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.10, check that runtime error occurs if valueof is applied to uninitialized template + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The template shall be completely initialized and resolve to a specific value. + +module NegSem_1510_ValueOfOperation_005 { + +type component GeneralComp { } + +testcase TC_NegSem_1510_ValueOfOperation_005() runs on GeneralComp { + var template integer v_test; + + var integer v_second := valueof(v_test); + + // if we get here, something must be wrong as valueof on v_test shall cause an error + // as it is not a template. + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_005()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_006.ttcn b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_006.ttcn new file mode 100644 index 0000000..e5d552c --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/NegSem_1510_ValueOfOperation_006.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15.10, check that runtime error occurs if valueof is applied to partially initialized template + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The template shall be completely initialized and resolve to a specific value. + +module NegSem_1510_ValueOfOperation_006 { + +type component GeneralComp { } + +type record R { + integer field1, + integer field2 +} + +testcase TC_NegSem_1510_ValueOfOperation_006() runs on GeneralComp { + var template R v_test; + var R v_result; + v_test.field1 := 1; // field2 is left uninitialized + v_result := valueof(v_test); + + // if we get here, something must be wrong as valueof on v_test shall cause an error + // as it is not a template. + setverdict(fail); +} + +control{ + execute(TC_NegSem_1510_ValueOfOperation_006()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1510_valueof_operation/Sem_1510_ValueOfOperation_001.ttcn b/core_language/15_templates/1510_valueof_operation/Sem_1510_ValueOfOperation_001.ttcn new file mode 100644 index 0000000..7250824 --- /dev/null +++ b/core_language/15_templates/1510_valueof_operation/Sem_1510_ValueOfOperation_001.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15.10, Ensure that the valueof operation works as expected for fully initialized templates. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1510_ValueOfOperation_001 { + +type component GeneralComp { } + +type record ExampleType { + integer field1, + boolean field2 +} + +template ExampleType m_template := { + field1 := 1, + field2 := true +} + +testcase TC_Sem_1510_ValueOfOperation_001() runs on GeneralComp { + var ExampleType v_value := valueof(m_template); + + if (match(v_value.field1, 1) and + match(v_value.field2, true) + ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1510_ValueOfOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn new file mode 100644 index 0000000..067e60f --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types yields an even number of digits. + ** @verdict pass reject + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001 { + +type component GeneralComp { } + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001() runs on GeneralComp { + var template octetstring v_str := 'ABCD'O & '?'O & '?E'O; + + // shall cause an error as it would denote 9 (i.e., uneven) number of digits + setverdict(fail); +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn new file mode 100644 index 0000000..6bb80ea --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of strings types yields an error if specified ranges are not fixed length. + ** @verdict pass reject + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002 { + +type component GeneralComp { } + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002() runs on GeneralComp { + var template octetstring v_str := 'ABCD'O & * length(1..2) & pattern 'EE?FF'; + + // shall cause an error as the length attribute should be of fixed length + setverdict(fail); +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn new file mode 100644 index 0000000..c004463 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that a simple concatenation of non-wildcard octetstring must not yield in a non-even number of hexadecimals. + ** @verdict pass reject + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003 { + +type component GeneralComp { } + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003() runs on GeneralComp { + var template octetstring v_str := 'AB'O & '0F'O & '2A'O & 'F'O; + + // shall cause an error as the length of the concantenated octetstring is is uneven + setverdict(fail); +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn new file mode 100644 index 0000000..7873088 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that the inline template definitions are correctly concatenated. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + charstring field2 +} + +template MyRecord m_receiveTemplate := { + field1 := pattern "AB*DE", + field2 := "ABCC" & * & "EF" //only specific values allowed when there is no pattern keyword +} + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004() runs on GeneralComp { + var MyRecord v_value := { + field1 := "AB*DE", + field2 := "ABCCDE*EF" + } + + if (match(v_value, m_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn new file mode 100644 index 0000000..62cc704 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that the inline template definitions are correctly concatenated. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + charstring field2 +} + +template MyRecord m_receiveTemplate := { + field1 := pattern "AB*DE", + field2 := pattern "ABCC" & * length(2) & "EF" //cannot use length(n) attribute on charstring pattern +} + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005() runs on GeneralComp { + var MyRecord v_value := { + field1 := "AB*DE", + field2 := "ABCCDE*EF" + } + + if (match(v_value, m_receiveTemplate)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn new file mode 100644 index 0000000..2f82523 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types and ? patterns works as expected. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006 { + +type component GeneralComp { } + +testcase TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006() runs on GeneralComp { + var template octetstring v_myString1 := 'ABCD'O & ? length(2) length (6); //missing parenthesis + if (match('ABCD12'O, v_myString1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006()); +} + +} diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn new file mode 100644 index 0000000..d8346e7 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of charstring types works as expected (variant 1). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001() runs on GeneralComp { + var template charstring v_myChar1 := pattern "ABC" & "D" & "*" & "E?F"; + if (match("ABCD2E1F", v_myChar1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn new file mode 100644 index 0000000..74d39f0 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types works as expected (variant 2). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002() runs on GeneralComp { + var template octetstring v_myString1 := 'ABCC'O & * length(1) & 'EF'O; + if (match('ABCC22EF'O,v_myString1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn new file mode 100644 index 0000000..ce97f66 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of bitstring types works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003() runs on GeneralComp { + var template bitstring v_myBitStr := '010'B & '*'B & '1?1'B; + + if (match('010010101101'B, v_myBitStr)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn new file mode 100644 index 0000000..3abf325 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types works as expected (variant 1). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004() runs on GeneralComp { + var template octetstring v_str := 'ABCD'O & 'AB*'O & 'EF'O; + + if (match('ABCDABEF'O, v_str)) { //matching not present values + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn new file mode 100644 index 0000000..17de02d --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types works as expected (variant 2). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005() runs on GeneralComp { + var template octetstring v_template := 'ABCD'O & '??'O & 'EF'O; + + if (match('ABCDAABBEF'O, v_template)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn new file mode 100644 index 0000000..b70c7df --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that a concatenation of charstrings with a fixed length AnyValueOrNone be matched. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006() runs on GeneralComp { + var template charstring m_str := pattern "ABC?#3" & "E?F"; //equivalent to ABC???E?F pattern + + if (match("ABCXYZE2F", m_str)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007.ttcn new file mode 100644 index 0000000..2b921c7 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.2 + ** @purpose 1:15.11, Ensure that concatenations of record of charstrings are accepted. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007 { + +type component GeneralComp { } + +type record of charstring RecOfChar; + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007() runs on GeneralComp { + var template RecOfChar m_concatenation := {"ABC"} & {pattern "D*", pattern "E?" & "F"}; + + var RecOfChar m_reference := {"ABC","D213","E2F"}; // some value that matches + + if (match(m_reference,m_concatenation)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_007()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008.ttcn new file mode 100644 index 0000000..f3427bf --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenations of record of charstrings work when parameterized. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008 { + +type component GeneralComp { } + +type record of charstring RecOfChar; + +template RecOfChar m_concatenation := {"ABC"} & * length(3) & {pattern "E" & "?" & "F"}; + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008() runs on GeneralComp { + var RecOfChar m_reference := {"ABC","A","B","C","E2F"}; // some value that matches + + if (match(m_reference, m_concatenation)) { + setverdict(pass); + } else { + setverdict(fail); + } + +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009.ttcn new file mode 100644 index 0000000..05bdade --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenations of set of integers are accepted. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009 { + +type component GeneralComp { } + +type set of integer SetOfInt; + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009() runs on GeneralComp { + var template SetOfInt m_concatenation := {1, 2} & * length(2) & {3, 4}; + + var SetOfInt m_reference := {1,2, 20, 21, 3, 4}; + if (match(m_reference,m_concatenation)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010.ttcn new file mode 100644 index 0000000..2ad68a0 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that the inline template definitions are correctly concatenated. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010 { + +type component GeneralComp { } + +type record MyRecord { + charstring field1, + charstring field2 +} + +template MyRecord m_receiveTemplate := { + field1 := pattern "ab*de", + field2 := "ABC" & "DE*" & "F?" //concatenation of literal characters +} + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010() runs on GeneralComp { + var MyRecord v_value := { + field1 := "ab*de", + field2 := "ABCDE1F1" + } + + if (match(v_value, m_receiveTemplate)) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011.ttcn new file mode 100644 index 0000000..4e0b0fe --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types works as expected (matching patterns in quotation). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Note: see CR5805 regarding corresponding BNF update + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011() runs on GeneralComp { + var template octetstring v_myString1 := 'ABCC'O & 'DD*'O & 'EE?FF'O; + if (match('ABCCDD22EE11FF'O, v_myString1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011()); +} + +} diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012.ttcn new file mode 100644 index 0000000..34ac0ff --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 451 and 470 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types and ? patterns works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012() runs on GeneralComp { + var template octetstring v_myString1 := 'AB'O & 'CD'O & ? & ? length(1) & 'EF'O; //results in 'ABCD*?EF'O + if (match('ABCD2233EF'O, v_myString1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012()); +} + +} diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013.ttcn new file mode 100644 index 0000000..ddbbbb7 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of octetstring types and ? patterns works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013() runs on GeneralComp { + var template octetstring v_myString1 := ('ABCD'O & ? length(2)) length (1..6); + // results in 'ABCD??'O matching an octet string of length 4 (8 hex digits) + if (match('ABCD1234'O, v_myString1)) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013()); +} + +} diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014.ttcn new file mode 100644 index 0000000..44d8375 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:15.11, Ensure that concatenation of charstring and universal charsting types are concatenated as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +/* When templates of charstring and universal charstring type are both + * present in the concatenation, the charstring values are implicitly converted to universal charstring values*/ + +module Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014 { + +type component GeneralComp { } + +testcase TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014() runs on GeneralComp { + var template universal charstring v_myString1 := (char ( 0, 0, 1, 113) & "AB" & char ( 0, 0, 1, 112)); // "űABŰ" + + if (match("űABŰ", v_myString1)) { + setverdict(pass); + } else { + setverdict(fail,v_myString1); + } +} + +control{ + execute(TC_Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_014()); +} + +} diff --git a/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn new file mode 100644 index 0000000..7428012 --- /dev/null +++ b/core_language/15_templates/1511_concatenating_templates_of_string_and_list_types/Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_015.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @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()); +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_001.ttcn b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_001.ttcn new file mode 100644 index 0000000..f4564f9 --- /dev/null +++ b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_001.ttcn @@ -0,0 +1,23 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15, Ensure that a template formed from a union is rejected when the union somehow contains a default type field. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_15_TopLevel_001 { + +type record MyRecord { + default def +} + +type union MyUnion { + integer choice1, + MyRecord choice2 +} + +template MyUnion m_integerChosen := { + choice1 := 5 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_002.ttcn b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_002.ttcn new file mode 100644 index 0000000..008dc60 --- /dev/null +++ b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_002.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15, Ensure that a template formed from a union is rejected when the union somehow contains a port type field. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_15_TopLevel_002 { + +type port MyPort message {inout integer}; + +type record MyRecord { + MyPort myPort1 +} + +type union MyUnion { + integer choice1, + MyRecord choice2 +} + +template MyUnion m_integerChosen := { + choice1 := 5 +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_003.ttcn b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_003.ttcn new file mode 100644 index 0000000..465e1dc --- /dev/null +++ b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_003.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15, Ensure that a template shall not be of default type. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_15_TopLevel_003 { + +type record MyRecord { + default def +} + +template MyRecord mw_myRecord := { + def := ? +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_004.ttcn b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_004.ttcn new file mode 100644 index 0000000..769baae --- /dev/null +++ b/core_language/15_templates/15_toplevel/NegSem_15_TopLevel_004.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:15, Ensure that a template shall not be of port type. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_15_TopLevel_004 { + +type port MyPort message {inout integer}; + +type record MyRecord { + MyPort myPort1 +} + +template MyRecord mw_myRecord := { + myPort1 := ? +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn b/core_language/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn new file mode 100644 index 0000000..db49fbc --- /dev/null +++ b/core_language/15_templates/15_toplevel/NegSyn_15_TopLevel_001.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 521 + ** @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) +} + +} \ No newline at end of file diff --git a/core_language/15_templates/15_toplevel/Syn_15_TopLevel_001.ttcn b/core_language/15_templates/15_toplevel/Syn_15_TopLevel_001.ttcn new file mode 100644 index 0000000..e56fa15 --- /dev/null +++ b/core_language/15_templates/15_toplevel/Syn_15_TopLevel_001.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:15, Ensure that a simple template with a single charstring field is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_15_TopLevel_001 { + +type record MyRecord { + charstring field1 +} + +template MyRecord m_myTemplate := { + field1 := "Hello World!" +} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160101_invoking_functions/Sem_160101_invoking_functions_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160101_invoking_functions/Sem_160101_invoking_functions_001.ttcn new file mode 100644 index 0000000..543ee08 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160101_invoking_functions/Sem_160101_invoking_functions_001.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.1, Ensure that the IUT correctly handles function invocations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_160101_invoking_functions_001 { + + +type component GeneralComp { + var integer v_gc:=0; +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + v_gc:=v_gc+p_integer; + return v_gc; +} + +testcase TC_Sem_160101_invoking_functions_001 () runs on GeneralComp { + var integer v_result:=0; + + f_test(); + f_test(1); + v_result:=f_test(1); + if( match(v_result, 2) and match(f_test(), 2) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_Sem_160101_invoking_functions_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NOTES b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NOTES new file mode 100644 index 0000000..0bfefe5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NOTES @@ -0,0 +1,3 @@ +- NOTE: The proper functioning of encvalue and decvalue functions cannot be tested. +- TODO: split these tests in one per function (since if one function fails the entire test + fails and we could not say that the other functions work properly) \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_001.ttcn new file mode 100644 index 0000000..2cfb268 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_001.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_001 { + + type component GeneralComp { + } + + testcase TC_NegSem_160102_predefined_functions_001 () runs on GeneralComp { + var charstring v_i; + + v_i:=int2char(128); + } + + control{ + execute(TC_NegSem_160102_predefined_functions_001()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_002.ttcn new file mode 100644 index 0000000..acd54e5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_002.ttcn @@ -0,0 +1,21 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_002 { + + type component GeneralComp { + } + + testcase TC_NegSem_160102_predefined_functions_002 () runs on GeneralComp { + var charstring v_i; + + v_i:=int2char(-1); + } + + control { + execute(TC_NegSem_160102_predefined_functions_002()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_003.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_003.ttcn new file mode 100644 index 0000000..9e95b8e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_003.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_003 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_003 () runs on GeneralComp { + var universal charstring v_i; + + v_i:=int2char(2147483648); + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_003()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_004.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_004.ttcn new file mode 100644 index 0000000..2763b7b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_004.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_004 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_004 () runs on GeneralComp { + var hexstring v_i; + + v_i:=int2hex(256,2); //mismatch of string length + setverdict(pass); +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_004()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_005.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_005.ttcn new file mode 100644 index 0000000..f39fca0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_005.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_005 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_005 () runs on GeneralComp { + var integer v_i; + + v_i:=char2int("blabla"); //mismatch of string length + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_005()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_006.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_006.ttcn new file mode 100644 index 0000000..6475e6a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_006.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_006 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_006 () runs on GeneralComp { + var integer v_i; + + v_i:=lengthof('1*F'H); //undetermined string length + setverdict(pass); +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_006()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_007.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_007.ttcn new file mode 100644 index 0000000..5ec55a9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_007.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_007 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_007 () runs on GeneralComp { + var integer v_i; + + v_i:=lengthof('1'B length(3)); //undetermined string length + setverdict(pass); +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_007()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_008.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_008.ttcn new file mode 100644 index 0000000..fbe14ad --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_008.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_008 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_008 () runs on GeneralComp { + var integer v_i; + + v_i:=lengthof('1*0'B length(3..6)); //undetermined string length + setverdict(pass); +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_008()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_009.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_009.ttcn new file mode 100644 index 0000000..92d293f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_009.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_009 { + type enumerated MyEnumeratedType {e_black, e_white}; + + type record MyRecord { + boolean field1, + record of integer field2, + integer field3, + MyEnumeratedType field4 optional + } + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_009 () runs on GeneralComp { + template MyRecord template1 := { true, { permutation(2, 3) }, * } + var integer v_i; + + v_i:=sizeof(template1); //undetermined record length + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_009()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_010.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_010.ttcn new file mode 100644 index 0000000..9cc0d79 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_010.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_010 { + type record of integer IntegerList; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_010 () runs on GeneralComp { + template IntegerList template1 := { 1, 2, 3, * } length(1..2) ; //incorrect template length + var integer v_i; + + v_i:=lengthof(template1); + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_010()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_017.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_017.ttcn new file mode 100644 index 0000000..021ac57 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_017.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_017 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_017 () runs on GeneralComp { + var charstring v_example:="example text string"; + var charstring v_i; + + v_i:=regexp(v_example,charstring:"?+(text)?+",1); //wrong group index + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_017()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_018.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_018.ttcn new file mode 100644 index 0000000..a3fa743 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_018.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_018 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_018 () runs on GeneralComp { + var charstring v_example:="example text string"; + var charstring v_i; + + v_i:=regexp(v_example,charstring:"?+(text)?+",-1); //wrong group index + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_018()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_019.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_019.ttcn new file mode 100644 index 0000000..b3e118c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_019.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_019 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_019 () runs on GeneralComp { + var charstring v_example:="example text string"; + var charstring v_i; + + v_i:=regexp(v_example,charstring:"?+(text)?+"); //missing group index + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_019()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_021.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_021.ttcn new file mode 100644 index 0000000..6d7dc9a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_021.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_021 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_021 () runs on GeneralComp { + var charstring v_i; + + v_i:=substr('00100110'B,-3,4); //wrong index value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_021()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_022.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_022.ttcn new file mode 100644 index 0000000..2d25f22 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_022.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_022 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_022 () runs on GeneralComp { + var charstring v_i; + + v_i:=substr('00100110'B,3,-4); //wrong length value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_022()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_023.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_023.ttcn new file mode 100644 index 0000000..0466d01 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_023.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_023 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_023 () runs on GeneralComp { + var charstring v_i; + + v_i:=substr('00100110'B,3,14); //too large length value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_023()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_024.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_024.ttcn new file mode 100644 index 0000000..c26f087 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_024.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_024 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_024 () runs on GeneralComp { + var bitstring v_i; + + v_i:=replace('00000110'B,-1,3,'111'B); //wrong index value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_024()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_025.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_025.ttcn new file mode 100644 index 0000000..caa1f36 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_025.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_025 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_025 () runs on GeneralComp { + var bitstring v_i; + + v_i:=replace('00000110'B,1,-3,'111'B); //wrong length value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_025()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_026.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_026.ttcn new file mode 100644 index 0000000..9f2eff0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_026.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_026 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_026 () runs on GeneralComp { + var bitstring v_i; + + v_i:=replace('00000110'B,1,13,'111'B); //too large length value + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_026()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_027.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_027.ttcn new file mode 100644 index 0000000..d9f9a78 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_027.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_027 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_027 () runs on GeneralComp { + var bitstring v_i; + + v_i:=replace('00000110'B,1,4,'8'H); //incompatible replacement type + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_027()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_028.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_028.ttcn new file mode 100644 index 0000000..c525c62 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_028.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_028 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + type enumerated Fruits {e_apple, e_peach, e_cherry}; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_028 () runs on GeneralComp { + + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_black := e_black; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_white; + var EnumeratedTypeWithLabels2 vl_enum2_black := e_black; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_black := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_yellow := e_yellow; + + + if( match(enum2int(e_black), 0) //ambiguous label + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_028()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_029.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_029.ttcn new file mode 100644 index 0000000..859085b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_029.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_029 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + type enumerated Fruits {e_apple, e_peach, e_cherry}; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_029 () runs on GeneralComp { + + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_black := e_black; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_white; + var EnumeratedTypeWithLabels2 vl_enum2_black := e_black; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_black := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_yellow := e_yellow; + + + if( match(enum2int(EnumeratedTypeWithLabels1.e_black), 0) //not allowed selection + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_029()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_030.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_030.ttcn new file mode 100644 index 0000000..29c10a5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_030.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_030 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + type enumerated Fruits {e_apple, e_peach, e_cherry}; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_030 () runs on GeneralComp { + + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_black := e_black; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_white; + var EnumeratedTypeWithLabels2 vl_enum2_black := e_black; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_black := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_yellow := e_yellow; + const EnumeratedTypeWithLabels1 c_enum1_black := e_black; + + + if( match(int2enum(4,vl_enum1_black), c_enum1_black) //not existing label + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_030()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_031.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_031.ttcn new file mode 100644 index 0000000..9e6a2f0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_031.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module NegSem_160102_predefined_functions_031 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_031 () runs on GeneralComp { + var float v_random1; + + v_random1:=rnd(infinity); //cannot have infinity as a seed + if( match(rnd(infinity), v_random1) and not match(rnd(1.0), v_random1) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_031()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_032.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_032.ttcn new file mode 100644 index 0000000..e2c2a35 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_032.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that an error is generated when the parameter of the encvalue function contains a matching symbol + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// (C.5.1) When the actual parameter that is passed to inpar is a template, it shall resolve to +// a specific value (the same restrictions apply as for the argument of the send statement). + +module NegSem_160102_predefined_functions_032 { + +type integer I with { variant "32 bit"}; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_032 () runs on GeneralComp { + template I v_test := ?; + var bitstring v_res := encvalue(v_test); + setverdict(fail, "The previous encvalue call should have caused an error"); +} + +control{ + + execute(TC_NegSem_160102_predefined_functions_032()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_033.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_033.ttcn new file mode 100644 index 0000000..1ecc699 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_033.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that an error is detected when the parameter of the encvalue function contains an unitialized value + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// 16.1.2, restriction a.3: all actual in and inout parameters shall be initialized + +module NegSem_160102_predefined_functions_033 { + +type integer I with { variant "32 bit"}; + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_033 () runs on GeneralComp { + var template I v_test; + var bitstring v_res := encvalue(v_test); + setverdict(fail, "The previous encvalue call should have caused an error"); +} + +control{ + + execute(TC_NegSem_160102_predefined_functions_033()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_034.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_034.ttcn new file mode 100644 index 0000000..af0e2cf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_034.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that an error is detected when the parameter of the encvalue function contains a partially initialized value + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// 16.1.2, restriction a.3: all actual in and inout parameters shall be initialized + +module NegSem_160102_predefined_functions_034 { + +type record R +{ + integer field1, + integer field2 +} + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_034 () runs on GeneralComp { + template R v_test := { field1 := 1, field2 := - } + var bitstring v_res := encvalue(v_test); + setverdict(fail, "The previous encvalue call should have caused an error"); +} + +control{ + + execute(TC_NegSem_160102_predefined_functions_034()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn new file mode 100755 index 0000000..cc6be01 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_036.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @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 requirements are tested: + *In addition to the general error causes in clause 16.1.2, error causes are: + * inpar is a template of a character string type and contains a matching mechanism other than AnyElement or +AnyElementsOrNone; */ + +module NegSem_160102_predefined_functions_036 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_036 () runs on GeneralComp { + + const charstring m_Ref:="abc?def?"; + var template charstring Mytemp := pattern "{m_Ref}\q{0,0,1,113}"; + var charstring v_i; + + v_i:=substr(Mytemp,1,2); //error: non allowed matching mechanism + + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_036()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn new file mode 100755 index 0000000..47c8f27 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_037.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @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 requirements are tested: + *In addition to the general error causes in clause 16.1.2, error causes are: + * inpar is a template of a binary string or sequence type or array and it contains other matching mechanism as + * specific value and AnyElement; + */ + +module NegSem_160102_predefined_functions_037 { + +type component GeneralComp { +} + + +testcase TC_NegSem_160102_predefined_functions_037 () runs on GeneralComp { + + + var template bitstring Mytemp := '00101*'B; + var bitstring v_i; + + v_i:=substr(Mytemp,1,2); //error: contains a matching mechanism other than AnyElement + + + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_037()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn new file mode 100755 index 0000000..002614c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_038.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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 requirements are tested: + *In addition to the general error causes in clause 16.1.2, error causes are: + * inpar is a template of a binary string or sequence type or array and it contains other matching mechanism as + * specific value and AnyElement; + */ + +module NegSem_160102_predefined_functions_038 { + +type component GeneralComp { +} + +type integer MyArrayType1[3]; +type record of integer MyRecof; + +testcase TC_NegSem_160102_predefined_functions_038 () runs on GeneralComp { + + + var template MyArrayType1 MyArray :={ 7, 8, * }; + + var template MyRecof v_i; + + v_i:=substr(MyArray,1,2); //error: contains a matching mechanism * + +} + + +control{ + + execute(TC_NegSem_160102_predefined_functions_038()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn new file mode 100644 index 0000000..b9c5aae --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_039.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn new file mode 100644 index 0000000..f029f74 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/NegSem_160102_predefined_functions_040.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn new file mode 100644 index 0000000..e9a4d61 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_001.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_001 { + type enumerated EnumeratedType {e_black, e_white}; + + type component GeneralComp { + } + + /** + * @desc Equals method for floats + * @return true if abs(f1 - f2) < 1.E-6 + */ + function f_isFloatNear(in float f1, in float f2) return boolean { + var float delta := f1-f2; + if (delta < 0.0) { + delta := 0.0 - delta; + } + return delta < 1E-6; + } + + testcase TC_Sem_160102_predefined_functions_001 () runs on GeneralComp { + const universal charstring c_i:="i"; + var integer v_result:=0; + var EnumeratedType v_enum:=e_white; + + if( match(int2char(105), "i") and + match(int2unichar(105), c_i) and + match(int2bit(5,4), '0101'B) and + match(int2hex(55,4), '0037'H) and + match(int2oct(55,2), '0037'O) and + match(int2str(55), "55") and + (f_isFloatNear(int2float(5),5.0)) and + match(float2int(5.0), 5) and + match(char2int("i"), 105) and + match(char2oct("i"), '69'O) and + match(unichar2int(c_i), 105) and + match(bit2int('101'B), 5) and + match(bit2hex('110111'B), '37'H) and + match(bit2oct('110111'B), '37'O) and + match(bit2str('110111'B), "110111") and + match(hex2int('37'H), 55) and + match(hex2bit('37'H),'00110111'B) and + match(hex2oct('37'H), '37'O) and + match(hex2str('37'H), "37") and + match(oct2int('37'O), 55) and + match(oct2bit('37'O), '00110111'B) and + match(oct2hex('37'O), '37'H) and + match(oct2str('37'O), "37") and + match(oct2char('69'O), "i") and + match(str2int("55"),55) and + match(str2oct("55"), '55'O) and + (f_isFloatNear(str2float("5.5"),5.5)) and + match(enum2int(v_enum), 1) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_001()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn new file mode 100644 index 0000000..99c554d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_002.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ + +module Sem_160102_predefined_functions_002 { + type record of integer IntegerList; + + type record MyRecord { + boolean field1, + record of integer field2, + integer field3 optional + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_002 () runs on GeneralComp { + template MyRecord template1 := { + field1 := true, + field2 := { permutation(2, 3), ? }, + field3 := omit + } + template MyRecord template2 := { + field1 := true, + field2 := {permutation(2, 3)}, + field3 := omit + } + template IntegerList template3 := { 1, 2, 3, * } length(1..3) ; + + if (not (lengthof(charstring:"test") == 4)) { + setverdict(fail); + } + if (not (lengthof(universal charstring:"test") == 4)) { + setverdict(fail); + } + if (not (lengthof(bitstring:'010'B) == 3)) { + setverdict(fail); + } + if (not (lengthof(hexstring:'55'H) == 2)) { + setverdict(fail); + } + if (not (lengthof(octetstring:'55'O) == 1)) { + setverdict(fail); + } + if (not (lengthof(charstring:pattern "t??t") == 4)) { + setverdict(fail); + } + if (not (lengthof(bitstring:'1??1'B) == 4)) { + setverdict(fail); + } + if (not (lengthof(hexstring:'1*1'H length(8)) == 8)) { + setverdict(fail); + } + if (not (lengthof(octetstring:'00?FF'O length(3)) == 3)) { + setverdict(fail); + } + if (not (lengthof(octetstring:'AB?'O) == 2)) { + setverdict(fail); + } + if (not (lengthof(template1.field2) == 3)) { + setverdict(fail); + } + if (not (sizeof(template2) == 2)) { + setverdict(fail); + } + if (not (lengthof(template3) == 3)) { + setverdict(fail); + } + setverdict(pass); + } + + control { + execute(TC_Sem_160102_predefined_functions_002()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn new file mode 100644 index 0000000..002e410 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_003.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ + +module Sem_160102_predefined_functions_003 { + type enumerated MyEnumeratedType {e_black, e_white, e_green}; + + type record MyRecord { + record { + boolean innerField1 optional, + integer innerField2 optional + } field1 optional, + integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type union U { integer f1, octetstring f2 } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_003 () runs on GeneralComp { + var MyRecord v_record1 := { + field1 := {innerField1 := omit, innerField2 := omit}, + field2 := 2, + field3 := 3, + field4 := omit + }; + var U v_U1 := {f1 := 1}; + template MyRecord template1 := { + field1 := {?, *}, + field2 := 2, + field3 := 3, + field4 := (e_black, e_white) ifpresent + } + template U template2 := {f2 := ?} + + if( match(ispresent(v_record1.field1), true) and + match(ispresent(v_record1.field4), false) and + match(ispresent(v_record1.field2), true) and + match(ispresent(template1.field1.innerField1), true) and + match(ischosen(v_U1.f1), true) and + match(ischosen(v_U1.f2), false) and + match(ischosen(template2.f2), true) and + match(ischosen(template2.f1), false) and + match(isvalue(template1.field2), true) and + match(isvalue(template2.f2), false) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_003()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_004.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_004.ttcn new file mode 100644 index 0000000..51105a0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_004.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_004 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_004 () runs on GeneralComp { + var charstring v_example:="example text string"; + + if( match(regexp(v_example,charstring:"?+(text)?+",0), "text") and //inline templates in this function are allowed by BNF 165. + match(regexp(v_example,charstring:"(?+)(text)(?+)",2), " string") and + match(regexp(v_example,charstring:"((?+)(text)(?+))",0), "example text string") and + match(substr('00100110'B,3,4), '0011'B) and + match(substr('ABCDEF'H,2,3), 'CDE'H) and + match(substr('01AB23CD'O,1,2), 'AB23'O) and + match(replace('00000110'B,1,3,'111'B), '01110110'B) and + match(replace('ABCDEF'H,0,2,'123'H), '123CDEF'H) and + match(replace('01AB23CD'O,2,1,'FF96'O), '01ABFF96CD'O) and + match(replace(v_example,0,7,"my"), "my text string") + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_004()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_005.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_005.ttcn new file mode 100644 index 0000000..13b2ceb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_005.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_005 { + type enumerated MyEnumeratedType {e_black, e_white, e_green}; + + type record MyRecord { + record { + boolean innerField1 optional, + integer innerField2 optional + } field1 optional, + integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_005 () runs on GeneralComp { + var MyRecord v_record1 := { + field1 := {}, + field2 := 2, + field3 := 3, + field4 := omit + }; + var bitstring v_encoded; + var MyRecord v_decoded; + + v_encoded:=encvalue(v_record1); + if( match(decvalue(v_encoded,v_decoded), 0) and + match(v_record1,v_decoded) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } with { + optional "implicit omit"; + } + + control{ + execute(TC_Sem_160102_predefined_functions_005()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_006.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_006.ttcn new file mode 100644 index 0000000..20a18d5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_006.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_006 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_006 () runs on GeneralComp { + var float v_random1; + + v_random1:=rnd(0.0); + if( match(rnd(0.0), v_random1) and not match(rnd(1.0), v_random1) ) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_006()); + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_007.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_007.ttcn new file mode 100644 index 0000000..996b51d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_007.ttcn @@ -0,0 +1,82 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ + +module Sem_160102_predefined_functions_007 { + type enumerated MyEnumeratedType {e_black, e_white}; + type record of integer IntegerList; + + type record MyRecord { + boolean field1, + record of integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_007 () runs on GeneralComp { + template MyRecord template1 := { + field1 := true, + field2 := { permutation(2, 3), ? }, + field3 := 5, + field4 := omit + } + template MyRecord template2 := { + field1 := true, + field2 := {permutation(2, 3)}, + field3 := 6, + field4 := omit + } + template IntegerList template3 := { 1, 2, 3, * } length(1..3) ; + + if(lengthof(charstring : "test")!=4) { + setverdict(fail, "lengthof(charstring : ""test"")"); + } + if (lengthof(universal charstring : "test")!=4) { + setverdict(fail, "lengthof(universal charstring : ""test"")"); + } + if (lengthof('010'B)!=3) { // STF409: value definitions are interpreted as templates here + setverdict(fail, "lengthof('010'B)"); + } + if (lengthof('55'H)!=2) { // STF409: value definitions are interpreted as templates here + setverdict(fail, "lengthof('55'H)"); + } + if (lengthof('55'O)!=1) { // STF409: value definitions are interpreted as templates here + setverdict(fail, "lengthof('55'O)"); + } + if (lengthof(charstring : pattern "t??t")!=4) { + setverdict(fail, "lengthof(charstring : pattern ""t??t"")"); + } + if (lengthof(bitstring : '1??1'B)!=4) { + setverdict(fail, "lengthof(bitstring : '1??1'B)"); + } + if (lengthof(hexstring : '1*1'H length(8))!=8) { + setverdict(fail, "lengthof(hexstring : '1*1'H length(8))"); + } + if (lengthof(octetstring : '00?FF'O length(3))!=3) { + setverdict(fail, "lengthof(octetstring : '00?FF'O length(3))"); + } + if (lengthof(octetstring : 'AB?'O)!=2) { + setverdict(fail, "lengthof(octetstring : 'AB?'O)"); + } + if (sizeof(template1.field2)!=3) { + setverdict(fail, "sizeof(", template1.field2, ")"); + } + if (sizeof(template2.field2)!=2) { + setverdict(fail, "sizeof(", template2.field2, ")"); + } + if (lengthof(template3)!=3) { + setverdict(fail, "lengthof(", template3, ")"); + } + setverdict(pass); + } + + control{ + execute(TC_Sem_160102_predefined_functions_007()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_008.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_008.ttcn new file mode 100644 index 0000000..de27e24 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_008.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_008 { + type enumerated MyEnumeratedType {e_black, e_white, e_green}; + + type record MyRecord { + record { + boolean innerField1 optional, + integer innerField2 optional + } field1 optional, + integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_008 () runs on GeneralComp { + template MyRecord template1 := { + field1 := {?, *}, + field2 := 2, + field3 := 3, + field4 := (e_black, e_white) ifpresent + } + + if (ispresent(template1.field1.innerField2)) { // not present + setverdict(fail); + } else { + setverdict(pass); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_008()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_009.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_009.ttcn new file mode 100644 index 0000000..abaaa12 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_009.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 409 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_009 { + type enumerated MyEnumeratedType {e_black, e_white, e_green}; + + type record MyRecord { + record { + boolean innerField1 optional, + integer innerField2 optional + } field1 optional, + integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_009 () runs on GeneralComp { + template MyRecord template1 := { + field1 := {?, *}, + field2 := 2, + field3 := 3, + field4 := (e_black, e_white) ifpresent + } + + if (ispresent(template1.field4)) { // not present + setverdict(fail); + } else { + setverdict(pass); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_009()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_010.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_010.ttcn new file mode 100644 index 0000000..b2e9f7b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_010.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @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 + ***************************************************/ +// test enum2int predefined function with labels + +module Sem_160102_predefined_functions_010 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_010 () runs on GeneralComp { + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_black := e_black; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_white; + + if( match(enum2int(vl_enum_black), 0) and + match(enum2int(vl_enum_white), 1) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 0"); + } + + if( match(enum2int(vl_enum1_black), 1) and + match(enum2int(vl_enum1_white), 0) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 1"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_010()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_011.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_011.ttcn new file mode 100644 index 0000000..48df61b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_011.ttcn @@ -0,0 +1,84 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_011 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_011 () runs on GeneralComp { + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_black := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_black; + var EnumeratedTypeWithLabels2 vl_enum2_black := e_white; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_black := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_white := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_yellow := e_black; + + const EnumeratedType c_enum_black := e_black; + const EnumeratedType c_enum_white := e_white; + const EnumeratedTypeWithLabels1 c_enum1_black := e_black; + const EnumeratedTypeWithLabels1 c_enum1_white := e_white; + const EnumeratedTypeWithLabels2 c_enum2_black := e_black; + const EnumeratedTypeWithLabels2 c_enum2_white := e_white; + const EnumeratedTypeWithLabels3 c_enum3_black := e_black; + const EnumeratedTypeWithLabels3 c_enum3_white := e_white; + + int2enum(0,vl_enum_black); + int2enum(1,vl_enum_white); + if( match(vl_enum_black, c_enum_black) and + match(vl_enum_white, c_enum_white) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 0"); + } + + int2enum(1,vl_enum1_black); + int2enum(0,vl_enum1_white); + if( match(vl_enum1_black, c_enum1_black) and + match(vl_enum1_white, c_enum1_white) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 1"); + } + + int2enum(-1,vl_enum2_black); + int2enum(0,vl_enum2_white); + if( match(vl_enum2_black, c_enum2_black) and + match(vl_enum2_white, c_enum2_white) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 2"); + } + + int2enum(-1,vl_enum3_black); + int2enum(1,vl_enum3_white); + if( match(vl_enum3_black, c_enum3_black) and + match(vl_enum3_white, c_enum3_white) + ) { + setverdict(pass); + } + else { + setverdict(fail, "fail 3"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_011()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_012.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_012.ttcn new file mode 100644 index 0000000..fe19551 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_012.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 433 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_012 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (-1), e_red (1), e_white(0) , e_yellow }; //e_yellow is 2 + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_012 () runs on GeneralComp { + var EnumeratedType vl_enum_black := e_black; + var EnumeratedType vl_enum_white := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_red := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_yellow := e_black; + + const EnumeratedType c_enum_black := e_black; + const EnumeratedType c_enum_white := e_white; + const EnumeratedTypeWithLabels1 c_enum1_red := e_red; + const EnumeratedTypeWithLabels1 c_enum1_yellow := e_yellow; + + int2enum(1,vl_enum1_red); + int2enum(2,vl_enum1_yellow); + + setverdict(pass); + + if (vl_enum1_red != c_enum1_red) { + setverdict(fail, "cannot decode e_red"); + } + + if (vl_enum1_yellow != c_enum1_yellow) { + setverdict(fail, "cannot decode e_yellow"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_012()); + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_013.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_013.ttcn new file mode 100644 index 0000000..e049636 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_013.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 451 + ** @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 + ***************************************************/ +// test enum2int with labels +module Sem_160102_predefined_functions_013 { + + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_013 () runs on GeneralComp { + var EnumeratedTypeWithLabels2 vl_enum2_black := e_black; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_black := e_black; + var EnumeratedTypeWithLabels3 vl_enum3_white := e_white; + var EnumeratedTypeWithLabels3 vl_enum3_yellow := e_yellow; + + if( match(enum2int(vl_enum2_black), -1) and + match(enum2int(vl_enum2_white), 0) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + if( match(enum2int(vl_enum3_black), -1) and + match(enum2int(vl_enum3_white), 1) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_014.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_014.ttcn new file mode 100644 index 0000000..c5fa470 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_014.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 451 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_014 { + + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_014 () runs on GeneralComp { + var EnumeratedTypeWithLabels1 vl_enum1_black := e_white; + var EnumeratedTypeWithLabels1 vl_enum1_white := e_black; + + const EnumeratedTypeWithLabels1 c_enum1_black := e_black; + const EnumeratedTypeWithLabels1 c_enum1_white := e_white; + + int2enum(1,vl_enum1_black); + int2enum(0,vl_enum1_white); + if( match(vl_enum1_black, c_enum1_black) and + match(vl_enum1_white, c_enum1_white) + ) { + setverdict(pass); + } + else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_014()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_015.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_015.ttcn new file mode 100644 index 0000000..c5b0790 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_015.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 451 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_015 { + type enumerated EnumeratedType {e_black, e_white}; + type enumerated EnumeratedTypeWithLabels1 {e_black (1), e_white}; + type enumerated EnumeratedTypeWithLabels2 {e_black (-1), e_white}; + type enumerated EnumeratedTypeWithLabels3 {e_black (-1), e_white , e_yellow (0) }; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_015 () runs on GeneralComp { + var EnumeratedTypeWithLabels2 vl_enum2_black := e_white; + var EnumeratedTypeWithLabels2 vl_enum2_white := e_black; + + const EnumeratedTypeWithLabels2 c_enum2_black := e_black; + const EnumeratedTypeWithLabels2 c_enum2_white := e_white; + + int2enum(-1, vl_enum2_black); + int2enum(0, vl_enum2_white); + + setverdict(pass, "Both enumerated values matched"); + + if (vl_enum2_black != c_enum2_black) { + setverdict(fail, "black enumerated value not matching ", vl_enum2_black, c_enum2_black); + } + if (vl_enum2_white != c_enum2_white) { + setverdict(fail, "black enumerated value not matching ", vl_enum2_white, c_enum2_white); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_015()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_016.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_016.ttcn new file mode 100644 index 0000000..d9cc3b9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_016.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined encvalue function works correctly (as specified in Annex C.5.1) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// (C.5.1) The encvalue function encodes a value or template into a bitstring. When the actual +// parameter that is passed to inpar is a template, it shall resolve to a specific value (the +// same restrictions apply as for the argument of the send statement). The returned bitstring +// represents the encoded value of inpar, however, the TTCN-3 test system need not make any +// check on its correctness. + +module Sem_160102_predefined_functions_016 { + type integer I with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_016 () runs on GeneralComp { + var template I v_test := 0; + var bitstring v_res := encvalue(v_test); + if (lengthof(v_res) == 32) { + setverdict(pass); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_016()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_017.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_017.ttcn new file mode 100644 index 0000000..640a3b6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_017.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue function performs full decoding correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// (C.5.2) +// The decvalue function decodes a bitstring into a value. The test system shall suppose that +// the bitstring encoded_value represents an encoded instance of the actual type of decoded_value. +// If the decoding was successful, then the used bits are removed from the parameter encoded_value, +// the rest is returned (in the parameter encoded_value), and the decoded value is returned +// in the parameter decoded_value. The function shall return an integer value to indicate success +// or failure of the decoding below: +// • The return value 0 indicates that decoding was successful. + +module Sem_160102_predefined_functions_017 { + type integer I with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_017 () runs on GeneralComp { + var bitstring v_test := int2bit(0, 32); + var I v_decoded; + var integer v_res := decvalue(v_test, v_decoded); + // expected result: + // v_res: 0 (success) + // v_decoded: 0 + // v_test: ''B (fully decoded) + if (match(v_res, 0) and match(v_decoded, 0) and match(lengthof(v_test), 0)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_017()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_018.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_018.ttcn new file mode 100644 index 0000000..6ee2851 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_018.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue function performs decoding if there are more bits than needed + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// (C.5.2) +// The decvalue function decodes a bitstring into a value. The test system shall suppose that +// the bitstring encoded_value represents an encoded instance of the actual type of decoded_value. +// If the decoding was successful, then the used bits are removed from the parameter encoded_value, +// the rest is returned (in the parameter encoded_value), and the decoded value is returned +// in the parameter decoded_value. The function shall return an integer value to indicate success +// or failure of the decoding below: +// • The return value 0 indicates that decoding was successful. + +module Sem_160102_predefined_functions_018 { + type integer I with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_018 () runs on GeneralComp { + const bitstring c_suffix := '11111111'B; + var bitstring v_test := int2bit(0, 32) & c_suffix; // 8 excess bits + var I v_decoded; + var integer v_res := decvalue(v_test, v_decoded); + // expected result: + // v_res: 0 (success) + // v_decoded: 0 + // v_test: '11111111'B (8 excess bits shall be returned) + if (match(v_res, 0) and match(v_decoded, 0) and match(v_test, c_suffix)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_018()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_019.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_019.ttcn new file mode 100644 index 0000000..2707fec --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_019.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue function works properly in case of decoding failure + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// (C.5.2) +// The decvalue function decodes a bitstring into a value. The test system shall suppose that +// the bitstring encoded_value represents an encoded instance of the actual type of decoded_value. +// If the decoding was unsuccessful, the actual parameters for encoded_value and decoded_value are +// not changed. The function shall return an integer value to indicate success or failure of the +// decoding below: +// • The return value 1 indicates an unspecified cause of decoding failure. + +module Sem_160102_predefined_functions_019 { + type enumerated E { one(1), two(2), three(3) } with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_019 () runs on GeneralComp { + var bitstring v_test := int2bit(0, 32); + var E v_decoded; + var integer v_res := decvalue(v_test, v_decoded); + // expected result: + // v_res: 1 (failure, unspecified) -> no named value corresponding to ordinal number 0 + // v_decoded: uninitialized + // v_test: original 32-bit value + if (match(v_res, 1) and not isbound(v_decoded) and match(lengthof(v_test), 32)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_019()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_020.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_020.ttcn new file mode 100644 index 0000000..ee5c86e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_020.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue function works properly in case of not enough bits + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// (C.5.2) +// The decvalue function decodes a bitstring into a value. The test system shall suppose that +// the bitstring encoded_value represents an encoded instance of the actual type of decoded_value. +// If the decoding was unsuccessful, the actual parameters for encoded_value and decoded_value are +// not changed. The function shall return an integer value to indicate success or failure of the +// decoding below: +// The return value 2 indicates that decoding could not be completed as encoded_value did not +// contain enough bits. + +module Sem_160102_predefined_functions_020 { + type integer I with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_020 () runs on GeneralComp { + var bitstring v_test := int2bit(0, 16); + var I v_decoded; + var integer v_res := decvalue(v_test, v_decoded); + // expected result: + // v_res: 2 (failed, not enough bits) -> there are only 16 bits available, while 32 is needed + // v_decoded: uninitialized + // v_test: original 16-bit value + if (match(v_res, 2) and not isbound(v_decoded) and match(lengthof(v_test), 16)) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_020()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_021.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_021.ttcn new file mode 100644 index 0000000..78d7ecb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_021.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_021 { + type enumerated MyEnumeratedType {e_black, e_white, e_green}; + + type record MyRecord { + record { + boolean innerField1 optional, + integer innerField2 optional + } field1 optional, + integer field2, + integer field3, + MyEnumeratedType field4 optional + } + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_021 () runs on GeneralComp { + var MyRecord v_record1 := { field1 := omit, field2 := 2, field3 := 3, field4 := omit } ; + var boolean v_i; + + v_i:=ispresent(v_record1.field1.innerField1); //function returns false value + if(v_i==false) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + + control{ + + execute(TC_Sem_160102_predefined_functions_021()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_022.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_022.ttcn new file mode 100644 index 0000000..891568e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_022.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_022 { + type union U { integer f1, octetstring f2 } + +type component GeneralComp { +} + + +testcase TC_Sem_160102_predefined_functions_022 () runs on GeneralComp { + template U template1 := ?; + var boolean v_i; + + v_i:=ischosen(template1.f1); //function returns false value + if(v_i==false) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } +} + + +control{ + + execute(TC_Sem_160102_predefined_functions_022()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_023.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_023.ttcn new file mode 100644 index 0000000..3db6460 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_023.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_023 { + type union U { integer f1, octetstring f2 } + +type component GeneralComp { +} + + +testcase TC_Sem_160102_predefined_functions_023 () runs on GeneralComp { + template U template1 := ({ f1 := 2 }, {f2 := 'AB'O }); + var boolean v_i; + + v_i:=ischosen(template1.f1); //function returns false value + if(v_i==false) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } +} + + +control{ + + execute(TC_Sem_160102_predefined_functions_023()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_024.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_024.ttcn new file mode 100644 index 0000000..f1341f5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_024.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @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 + ***************************************************/ +module Sem_160102_predefined_functions_024 { + type union U { + integer f1, + octetstring f2 + } + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_024() runs on GeneralComp { + template U template1 := {f2 := ?} + var boolean v_i; + + v_i := isvalue(template1.f1); //function returns false value + if(v_i==false) { + setverdict(pass); + } else { + setverdict(fail, "Unexpected decoding result"); + } + } + + control { + execute(TC_Sem_160102_predefined_functions_024()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_025.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_025.ttcn new file mode 100644 index 0000000..0d62927 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_025.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @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.33) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_160102_predefined_functions_025 { + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_025 () runs on GeneralComp { + var charstring v_example:="example text string"; + var charstring v_i; + + v_i:=regexp(v_example,universal charstring: "?+(text)?+",0); //works according to resolution of CR 6424 + if(v_i=="text") { + setverdict(pass); + } else { + setverdict(fail, "Unexpected matching result"); + } + } + + + control{ + + execute(TC_Sem_160102_predefined_functions_025()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_026.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_026.ttcn new file mode 100755 index 0000000..b4a4644 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_026.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts a universal charstring value to an octetstring.*/ + + +module Sem_160102_predefined_functions_026 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_026 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC123abc"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0); //string_encoding parameter is omitted, the default value "UTF-8", expected value: '414243313233616263'O + var octetstring v_1 := '414243313233616263'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_026()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_027.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_027.ttcn new file mode 100755 index 0000000..a26d52c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_027.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an UTF-8 universal charstring value to an octetstring.*/ + + +module Sem_160102_predefined_functions_027 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_027 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC123abc"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0,"UTF-8"); //"UTF-8", expected value: '414243313233616263'O + var octetstring v_1 := '414243313233616263'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_027()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_028.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_028.ttcn new file mode 100755 index 0000000..ef8581d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_028.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an UTF-16 universal charstring value to an octetstring.*/ + +module Sem_160102_predefined_functions_028 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_028 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC123abc"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0,"UTF-16"); //"UTF-16", expected value: '0041 0042 0043 0031 0032 0033 0061 0062 0063'O + var octetstring v_1 := '004100420043003100320033006100620063'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_028()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_029.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_029.ttcn new file mode 100755 index 0000000..aed7ec2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_029.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an UTF-32 universal charstring value to an octetstring.*/ + +module Sem_160102_predefined_functions_029 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_029 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC123abc"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0,"UTF-32"); //"UTF-32", expected value: '0000 0041 0000 0042 0000 0043 0000 0031 0000 0032 0000 0033 0000 0061 0000 0062 0000 0063'O + var octetstring v_1 := '000000410000004200000043000000310000003200000033000000610000006200000063'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_029()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_030.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_030.ttcn new file mode 100644 index 0000000..7af9832 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_030.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an UTF-16 universal charstring value to a Little endian octetstring.*/ + +module Sem_160102_predefined_functions_030 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_030 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0, "UTF-16LE"); //"UTF-16" little endian, expected value:'4100 4200 4300'O; + var octetstring v_1 := '410042004300'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_030()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_031.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_031.ttcn new file mode 100644 index 0000000..5d12cd9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_031.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an UTF-32 universal charstring value to a Little endian octetstring.*/ + +module Sem_160102_predefined_functions_031 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_031 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "ABC"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0, "UTF-32LE"); //"UTF-32" little endian, expected value:'4100 0000 4200 0000 4300 0000'O + var octetstring v_1 := '410000004200000043000000'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_031()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_032.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_032.ttcn new file mode 100644 index 0000000..6fb95e9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_032.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an UTF-16 universal charstring value to a Big endian octetstring.*/ + +module Sem_160102_predefined_functions_032 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_032 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "AB"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0, "UTF-16BE"); //"UTF-16" Big endian, expected value:'00410042'O; + var octetstring v_1 := '00410042'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_032()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_033.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_033.ttcn new file mode 100644 index 0000000..ad4d34c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_033.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an UTF-32 universal charstring value to a Big endian octetstring.*/ + +module Sem_160102_predefined_functions_033 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_033 () runs on GeneralComp { + + // universal charstring: + var universal charstring v_0 := "AB"; + + // predefined function for universal charstring to octetstring conversion: + var octetstring v_encoded := unichar2oct(v_0, "UTF-32BE"); //"UTF-32" Big endian, expected value:'00 00 00 41 00 00 00 42'O + var octetstring v_1 := '0000004100000042'O; + + + if( match(v_encoded,v_1) + ) { + setverdict(pass,"Encoded value for: ",v_0, " is ", v_encoded); + } + else { + setverdict(fail,"encoded value is: ", v_encoded, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_033()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn new file mode 100755 index 0000000..ddc881f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an octetstring to universal charstring.*/ + + +module Sem_160102_predefined_functions_034 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_034 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '414243313233616263'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0); //expected value: ABC123abc + var universal charstring v_1 := "ABC123abc"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ",v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_034()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_035.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_035.ttcn new file mode 100755 index 0000000..f7a08d5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_035.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an octetstring to an UTF-8 encoded universal charstring.*/ + + +module Sem_160102_predefined_functions_035 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_035 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '414243'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0,"UTF-8"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ",v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_035()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_036.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_036.ttcn new file mode 100755 index 0000000..3ec5d57 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_036.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an octetstring to an UTF-16 encoded universal charstring.*/ + + +module Sem_160102_predefined_functions_036 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_036 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '004100420043'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0,"UTF-16"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ",v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_036()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_037.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_037.ttcn new file mode 100755 index 0000000..3f673ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_037.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * This function converts an octetstring to an UTF-32 encoded universal charstring.*/ + + +module Sem_160102_predefined_functions_037 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_037 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '000000410000004200000043'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0,"UTF-32"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ",v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_037()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_038.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_038.ttcn new file mode 100644 index 0000000..c91525a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_038.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an octetstring to an UTF-16 Little Endian byte order universal charstring.*/ + + +module Sem_160102_predefined_functions_038 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_038 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '410042004300'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0, "UTF-16LE"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ", v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_038()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_039.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_039.ttcn new file mode 100644 index 0000000..412fb88 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_039.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an octetstring to an UTF-32 Little Endian byte order universal charstring.*/ + + +module Sem_160102_predefined_functions_039 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_039 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '410000004200000043000000'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0, "UTF-32LE"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ", v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_039()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_040.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_040.ttcn new file mode 100644 index 0000000..2a830dd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_040.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an octetstring to an UTF-16 Big Endian byte order universal charstring.*/ + + +module Sem_160102_predefined_functions_040 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_040 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '004100420043'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0, "UTF-16BE"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ", v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_040()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_041.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_041.ttcn new file mode 100644 index 0000000..035894b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_041.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * This function converts an octetstring to an UTF-32 Big Endian byte order universal charstring.*/ + + +module Sem_160102_predefined_functions_041 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_041 () runs on GeneralComp { + + //octetstring: + var octetstring v_0 := '000000410000004200000043'O; + + // predefined function for universal charstring to octetstring conversion: + var universal charstring v_decode := oct2unichar(v_0, "UTF-32BE"); //expected value: ABC + var universal charstring v_1 := "ABC"; + + if( match(v_decode,v_1) + ) { + setverdict(pass,"Decoded value for: ", v_0, " is ", v_decode); + } + else { + setverdict(fail,"encoded value is: ", v_decode, " expected ", v_1); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_041()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_042.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_042.ttcn new file mode 100755 index 0000000..aa1b325 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_042.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * this test investigates that IUT correctly evaluates predefined function any2unistr, + * the invalue parameter of the any2unistr function may be uninitialized or partially initialized; +*/ + +module Sem_160102_predefined_functions_042 { + + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_042 () runs on GeneralComp { + + + var integer v_0 := 100; //integer with value + + + //integer with value + if( match(any2unistr(v_0),"100")) { setverdict(pass,"Result: ",any2unistr(v_0));} + else{setverdict(fail,"Result is: ",any2unistr(v_0), " Expected: 100");} + + } + + control{ + execute(TC_Sem_160102_predefined_functions_042()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_043.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_043.ttcn new file mode 100755 index 0000000..d4d3c70 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_043.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * this test investigates that IUT correctly evaluates predefined function any2unistr, + * the invalue parameter of the any2unistr function may be uninitialized or partially initialized; +*/ + +module Sem_160102_predefined_functions_043 { + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_043 () runs on GeneralComp { + + var integer v_1; //uninitialized value + + //uninitialized value + if( match(any2unistr(v_1),"UNINITIALIZED")) { setverdict(pass,"Result: ",any2unistr(v_1));} + else{setverdict(fail,"Result is: ",any2unistr(v_1), " Expected: UNINITIALIZED");} + + } + + control{ + execute(TC_Sem_160102_predefined_functions_043()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_044.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_044.ttcn new file mode 100755 index 0000000..cd63c01 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_044.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * this test investigates that IUT correctly evaluates predefined function any2unistr, + * the invalue parameter of the any2unistr function may be uninitialized or partially initialized; +*/ + +module Sem_160102_predefined_functions_044 { + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_044 () runs on GeneralComp { + + var bitstring v_2 := '11101'B; //bitstring + + //bitstring + if(match(any2unistr(v_2),"'11101'B")) { setverdict(pass,"Result: ",any2unistr(v_2));} + else{setverdict(fail,"Result is: ",any2unistr(v_2), " Expected:'11101'B");} + + } + + control{ + execute(TC_Sem_160102_predefined_functions_044()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_045.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_045.ttcn new file mode 100755 index 0000000..e362f67 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_045.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * this test investigates that IUT correctly evaluates predefined function any2unistr, + * the invalue parameter of the any2unistr function may be uninitialized or partially initialized; +*/ + +module Sem_160102_predefined_functions_045 { + + type record of integer MyRoI; + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_045 () runs on GeneralComp { + + template MyRoI v_3 := *; //template record of integer anyvalue + + //template record of integer anyvalue (*) + if(match(any2unistr(v_3),"*")) { setverdict(pass,"Result: ",any2unistr(v_3));} + else{setverdict(fail,"Result is: ",any2unistr(v_3), " Expected:*");} + + } + + control{ + execute(TC_Sem_160102_predefined_functions_045()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_046.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_046.ttcn new file mode 100755 index 0000000..f6380b0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_046.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: + * this test investigates that IUT correctly evaluates predefined function any2unistr, + * the invalue parameter of the any2unistr function may be uninitialized or partially initialized; +*/ + +module Sem_160102_predefined_functions_046 { + + type record MyRec { + integer field1, + boolean field2, + integer field3 optional + }; + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_046 () runs on GeneralComp { + template MyRec v_4 := {1,false,-}; // record containing integer, boolean and optional elements + // record containing integer, boolean and optional elements + // NOTE: different tools might use different whitespace formats + if(match(any2unistr(v_4), pattern "\s#(){\s#()field1\s#():=\s#()1\s#(),\s#()field2\s#():=\s#()false\s#(),\s#()field3\s#():=\s#()((UNINITIALIZED)|\-)\s#()}\s#()" )) { + setverdict(pass,"Result: ",any2unistr(v_4)); + } else { + setverdict(fail,"Result is: ",any2unistr(v_4), " Expected:{ field1 := 1, field2 := false, field3 := UNINITIALIZED }"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_046()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_047.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_047.ttcn new file mode 100755 index 0000000..c3a2a8f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_047.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_047 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_047 () runs on GeneralComp { + + var template MyRecofInt v_0 := {1,2,3} ifpresent; // ifpresent + + + + if ( match(istemplatekind(v_0, "ifpresent"), true)) {setverdict(pass," ifpresent: ", istemplatekind(v_0, "ifpresent"));} + else{setverdict(fail," ifpresent:",istemplatekind(v_0, "ifpresent"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_047()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_048.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_048.ttcn new file mode 100755 index 0000000..e1ab06f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_048.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_048 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_048 () runs on GeneralComp { + + var template MyRecofInt v_1 := {1,2,3,4,5}; // specific value of integer type + + if ( match(istemplatekind(v_1, "value"), true)) {setverdict(pass," value: ", istemplatekind(v_1, "value"));} + else{setverdict(fail," value:",istemplatekind(v_1, "value"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_048()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_049.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_049.ttcn new file mode 100755 index 0000000..76a9717 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_049.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_049 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_049 () runs on GeneralComp { + + var template MyRecofInt v_1 := {1,2,3,4,5}; // specific value of integer type + var template integer v_2 := (all from v_1, 10); //Template list + + if ( match(istemplatekind(v_2, "list"), true)) {setverdict(pass," list: ", istemplatekind(v_2, "list"));} + else{setverdict(fail," value:",istemplatekind(v_2, "list"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_049()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_050.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_050.ttcn new file mode 100755 index 0000000..2c5f422 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_050.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_050 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_050 () runs on GeneralComp { + var template MyRecofInt v_1 := {1,2,3,4,5}; // specific value of integer type + var template integer v_3 := complement(all from v_1, 10); //component + + if ( match(istemplatekind(v_3, "complement"), true)) {setverdict(pass," component: ", istemplatekind(v_3, "complement"));} + else{setverdict(fail," componenet:",istemplatekind(v_3, "complement"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_050()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_051.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_051.ttcn new file mode 100755 index 0000000..fd9b7ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_051.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_051 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_051 () runs on GeneralComp { + + var template MyRecofInt v_4 :=?; //anytype (?) + + if ( match(istemplatekind(v_4, "AnyValue"), true)) {setverdict(pass," AnyValue: ", istemplatekind(v_4, "AnyValue"));} + else{setverdict(fail," AnyValue:",istemplatekind(v_4, "AnyValue"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_051()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_052.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_052.ttcn new file mode 100755 index 0000000..df25cc9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_052.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_052 { + + + type component GeneralComp { + } + + /*Type definition:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_052 () runs on GeneralComp { + + var template MyRecofInt v_5 := *; //anyvalue (*) + + if ( match(istemplatekind(v_5, "AnyValueOrNone"), true)) {setverdict(pass," AnyValueOrNone: ", istemplatekind(v_5, "AnyValueOrNone"));} + else{setverdict(fail," AnyValueOrNone:",istemplatekind(v_5, "AnyValueOrNone"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_052()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_053.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_053.ttcn new file mode 100755 index 0000000..c4b343d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_053.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_053 { + + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_053 () runs on GeneralComp { + + var template integer v_6 := (-100 .. -1); // tamplate with ranged values + + if ( match(istemplatekind(v_6, "range"), true)) {setverdict(pass," range: ", istemplatekind(v_6, "range"));} + else{setverdict(fail," range:",istemplatekind(v_6, "range"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_053()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_054.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_054.ttcn new file mode 100755 index 0000000..4d1d7a7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_054.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_054 { + + + type component GeneralComp { + } + type set of integer MySet(0 .. 10); + + testcase TC_Sem_160102_predefined_functions_054 () runs on GeneralComp { + + var template MySet v_7 := superset (1, 2, 3); //superset + + if ( match(istemplatekind(v_7, "superset"), true)) {setverdict(pass," superset: ", istemplatekind(v_7, "superset"));} + else{setverdict(fail," superset:",istemplatekind(v_7, "superset"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_054()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_055.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_055.ttcn new file mode 100755 index 0000000..128dcb6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_055.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_055 { + + + type component GeneralComp { + } + type set of integer MySet(0 .. 10); + + testcase TC_Sem_160102_predefined_functions_055 () runs on GeneralComp { + + var template MySet v_8 := subset (1, 2, 3); //subset + + if ( match(istemplatekind(v_8, "subset"), true)) {setverdict(pass," superset: ", istemplatekind(v_8, "subset"));} + else{setverdict(fail," subset:",istemplatekind(v_8, "subset"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_055()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_056.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_056.ttcn new file mode 100755 index 0000000..4409149 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_056.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_056 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_056 () runs on GeneralComp { + + var template MyRecofInt v_9 := omit length (1 .. 6); // omit and length restriction + + if ( match(istemplatekind(v_9, "omit"), true)) {setverdict(pass," omit: ", istemplatekind(v_9, "omit"));} + else{setverdict(fail," omit:",istemplatekind(v_9, "omit"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_056()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_057.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_057.ttcn new file mode 100755 index 0000000..5399fee --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_057.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_057 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_057 () runs on GeneralComp { + + var template MyRecofInt v_9 := * length (1 .. 6); // omit and length restriction + + + if ( match(istemplatekind(v_9, "length"), true)) {setverdict(pass," length: ", istemplatekind(v_9, "length"));} + else{setverdict(fail," length:",istemplatekind(v_9, "length"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_057()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_058.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_058.ttcn new file mode 100755 index 0000000..cd3d3ac --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_058.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_058 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_058 () runs on GeneralComp { + + var template MyRecofInt v_10 := {permutation(1, 2, 3),?,*} ; // permutation, Any element(?) and AnyElementsOrNone(*) + + + if ( match(istemplatekind(v_10, "AnyElement"), true)) {setverdict(pass," AnyElement: ", istemplatekind(v_10, "AnyElement"));} + else{setverdict(fail," AnyElement:",istemplatekind(v_10, "AnyElement"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_058()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn new file mode 100755 index 0000000..3b9009e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_059.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_059 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_059() runs on GeneralComp { + + var template MyRecofInt v_10 := {permutation(1, 2, 3),?,*} ; // permutation, Any element(?) and AnyElementsOrNone(*) + + + if ( match(istemplatekind(v_10, "AnyElementsOrNone"), true)) {setverdict(pass," AnyElementsOrNone: ", istemplatekind(v_10, "AnyElementsOrNone"));} + else{setverdict(fail," AnyElementsOrNone:",istemplatekind(v_10, "AnyElementsOrNone"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_059()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn new file mode 100755 index 0000000..1459458 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_060.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_060 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_060() runs on GeneralComp { + + var template MyRecofInt v_10 := {permutation(1, 2, 3),?,*} ; // permutation, Any element(?) and AnyElementsOrNone(*) + + + if ( match(istemplatekind(v_10, "permutation"), true)) {setverdict(pass," permutation: ", istemplatekind(v_10, "permutation"));} + else{setverdict(fail," permutation:",istemplatekind(v_10, "permutation"), " expected result: true");} + } + control{ + + execute(TC_Sem_160102_predefined_functions_060()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn new file mode 100755 index 0000000..0dc1c39 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_061.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @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 + ***************************************************/ + +/* The following requirements are tested: + * this test investigates that IUT correctly evaluates predefined function istemplateking().*/ + +module Sem_160102_predefined_functions_061 { + + + type component GeneralComp { + } + /*Type definitions:*/ + type record of integer MyRecofInt; + + testcase TC_Sem_160102_predefined_functions_061() runs on GeneralComp { + + var template charstring v_11 := pattern "abc"; //pattern template + + if ( match(istemplatekind(v_11, "pattern"), true)) {setverdict(pass," pattern: ", istemplatekind(v_11, "pattern"));} + else{setverdict(fail," pattern:",istemplatekind(v_11, "pattern"), " expected result: true");} + + } + control{ + + execute(TC_Sem_160102_predefined_functions_061()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn new file mode 100644 index 0000000..5756eff --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_062.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn new file mode 100755 index 0000000..a55bbdf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_063.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf8)*/ + + + +module Sem_160102_predefined_functions_063 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_063 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_8 := encvalue_unichar(v_test,"UTF-8"); //encode to universal charstring UTF-8 + setverdict(pass,"Encoded value: ", v_test_enc_8); + + } + + + + control{ + + execute(TC_Sem_160102_predefined_functions_063()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn new file mode 100755 index 0000000..a1a7a8f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_064.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf-16)*/ + + + +module Sem_160102_predefined_functions_064 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_064 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_16 := encvalue_unichar(v_test,"UTF-16"); //encode to universal charstring UTF-16 + setverdict(pass,"Encoded value: ", v_test_enc_16); + + } + + + + control{ + + execute(TC_Sem_160102_predefined_functions_064()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn new file mode 100755 index 0000000..7bed507 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_065.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue function works properly in case of encoding universal charstring + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions encvalue_unichar (utf-16) */ + + + +module Sem_160102_predefined_functions_065 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_065 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_32 := encvalue_unichar(v_test,"UTF-32"); //encode to universal charstring UTF-32 + setverdict(pass,"Encoded value: ", v_test_enc_32); + + } + + + + control{ + + execute(TC_Sem_160102_predefined_functions_065()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_066.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_066.ttcn new file mode 100755 index 0000000..c9ef5b1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_066.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf-16 little endian)*/ + + + +module Sem_160102_predefined_functions_066 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_066 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_16LE := encvalue_unichar(v_test,"UTF-16LE"); //encode to universal charstring UTF-16 little endian + setverdict(pass,"Encoded value: ", v_test_enc_16LE); + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_066()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_067.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_067.ttcn new file mode 100755 index 0000000..f1a3d76 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_067.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf-16 big endian)*/ + + + +module Sem_160102_predefined_functions_067 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_067 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_16BE := encvalue_unichar(v_test,"UTF-16BE"); //encode to universal charstring UTF-16 big endian + setverdict(pass,"Encoded value: ", v_test_enc_16BE); + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_067()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_068.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_068.ttcn new file mode 100755 index 0000000..e3871fc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_068.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf-32 little endian)*/ + + + +module Sem_160102_predefined_functions_068 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_068 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_32LE := encvalue_unichar(v_test,"UTF-32LE"); //encode to universal charstring UTF-32 little endian + setverdict(pass,"Encoded value: ", v_test_enc_32LE); + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_068()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_069.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_069.ttcn new file mode 100755 index 0000000..8297ce2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_069.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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: + + * this test focuses on the predefined functions encvalue_unichar (utf-32 big endian)*/ + + + +module Sem_160102_predefined_functions_069 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_069 () runs on GeneralComp { + + var charstring v_test := "abc"; + + //Encoding: + + var universal charstring v_test_enc_32BE := encvalue_unichar(v_test,"UTF-32BE"); //encode to universal charstring UTF-32 big endian + setverdict(pass,"Encoded value: ", v_test_enc_32BE); + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_069()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_070.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_070.ttcn new file mode 100755 index 0000000..71ea1cd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_070.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-8)*/ + + + +module Sem_160102_predefined_functions_070 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_070 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar(123,"UTF-8"); + + + //decode: + var integer v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-8"); //decode (UTF-8) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_070()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_071.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_071.ttcn new file mode 100755 index 0000000..ec3b0be --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_071.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ +//NOT working with TestCast 6.8.2.5 -test fails + + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-8) with charstring input*/ + + + +module Sem_160102_predefined_functions_071 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_071 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar("aBcDeF","UTF-8"); + + + //decode: + var charstring v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-8"); //decode (UTF-8) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_071()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_072.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_072.ttcn new file mode 100755 index 0000000..34ad6ef --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_072.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-16)*/ + + + +module Sem_160102_predefined_functions_072 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_072 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar(123,"UTF-16"); + + + //decode: + var integer v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-16"); //decode (UTF-16) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_072()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_073.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_073.ttcn new file mode 100755 index 0000000..15ac065 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_073.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-16) with charstring input*/ + + + +module Sem_160102_predefined_functions_073 { + + type component GeneralComp { + + } + + type universal charstring UStr with { variant "UTF-16LE" } + testcase TC_Sem_160102_predefined_functions_073 () runs on GeneralComp { + + + //encoded text: + var UStr v_test := "aBcDe"; + var universal charstring v_enc := encvalue_unichar(v_test,"UTF-16LE"); + + //decode: + var UStr v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-16LE"); //decode (UTF-16LE) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_test_dec , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_test_dec, " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_073()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_074.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_074.ttcn new file mode 100755 index 0000000..1954428 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_074.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 (updated by STF 512) + ** @version 0.0.2 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-32)*/ + + + +module Sem_160102_predefined_functions_074 { + + type component GeneralComp { + + } + + type integer Int with { variant "32 bit" }; // produces value that can be transformed to UTF-32 + testcase TC_Sem_160102_predefined_functions_074 () runs on GeneralComp { + var Int v_src := 123; + + //encoded text: + var universal charstring v_enc := encvalue_unichar(v_src, "UTF-32"); //encode UTF-32 + + //decode: + var Int v_test_dec; + var integer v_res:= decvalue_unichar(v_enc, v_test_dec, "UTF-32"); //decode (UTF-32) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + } + + control { + execute(TC_Sem_160102_predefined_functions_074()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_075.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_075.ttcn new file mode 100755 index 0000000..ddb6669 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_075.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ +//NOT working with TestCast 6.8.2.5 -test fails + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-32) with charstring input*/ + + + +module Sem_160102_predefined_functions_075 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_075 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar("aBc","UTF-32"); //encode UTF-32 + + + //decode: + var charstring v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-32"); //decode (UTF-32) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_075()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_076.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_076.ttcn new file mode 100755 index 0000000..ace56ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_076.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-16 little endian)*/ + + + +module Sem_160102_predefined_functions_076 { + + type component GeneralComp { + + } + + type integer Int with { variant "16 bit" } // standardized variant, 2 octets should be acceptable for UTF-16 + testcase TC_Sem_160102_predefined_functions_076 () runs on GeneralComp { + var Int v_test := 100; + + //encoded text: + var universal charstring v_enc := encvalue_unichar(v_test, "UTF-16LE"); + + //decode: + var Int v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-16LE"); //decode (UTF-16 little endian) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + } + + control { + execute(TC_Sem_160102_predefined_functions_076()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_077.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_077.ttcn new file mode 100755 index 0000000..e41280b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_077.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-16 big endian)*/ + + + +module Sem_160102_predefined_functions_077 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_077 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar(123,"UTF-16BE"); + + + //decode: + var integer v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-16BE"); //decode (UTF-16 big endian) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_077()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_078.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_078.ttcn new file mode 100755 index 0000000..cb9c64e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_078.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-16 big endian)*/ + + + +module Sem_160102_predefined_functions_078 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_078 () runs on GeneralComp { + + + //encoded text: + var universal charstring v_enc := encvalue_unichar(123,"UTF-16BE"); + + + //decode: + var integer v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec,"UTF-16BE"); //decode (UTF-16 big endian) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_078()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_079.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_079.ttcn new file mode 100755 index 0000000..69e0554 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_079.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:16.1.2, Ensure that predefined decvalue_unichar function works properly + ** @verdict pass accept, ttcn3verdict:pass + + ***************************************************/ + +/* The following requirements are tested: + + * this test focuses on the predefined functions decvalue_unichar (utf-32 big endian)*/ + + + +module Sem_160102_predefined_functions_079 { + + type component GeneralComp { + + } + + type integer Int with { variant "32 bit" }; // standardized variant encodes into 4 octets + testcase TC_Sem_160102_predefined_functions_079 () runs on GeneralComp { + var Int v_test := 123; + + //encoded text: + var universal charstring v_enc := encvalue_unichar(v_test, "UTF-32BE"); + + //decode: + var Int v_test_dec; + var integer v_res:= decvalue_unichar(v_enc,v_test_dec, "UTF-32BE"); //decode (UTF-32 big endian) + + if (v_res == 0) { + setverdict(pass, "Decoded ", v_enc , " with result ", v_res); + } else { + setverdict(fail, "Unexpected decoding result: Decoded ", v_enc , " with result ", v_res); + } + + } + + control{ + + execute(TC_Sem_160102_predefined_functions_079()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_080.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_080.ttcn new file mode 100755 index 0000000..d05e1d6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_080.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined decvalue and decvalue_unichar function works properly in case of uninitialized encode value is given + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * all actual in and inout parameters shall be initialized with the following exceptions: + * 16.1.2. Restriction a.3 : the encoded_value parameter of the decvalue and decvalue_unichar function may be uninitialized.*/ + +module Sem_160102_predefined_functions_080 { + type enumerated E { one(1), two(2), three(3) } with { variant "32 bit"}; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_080 () runs on GeneralComp { + + var bitstring v_test; // uninitialized value for encoded_value parameter decvalue() input + var universal charstring v_test_enc_8; // uninitialized value encoded_value parameter for decvalue_unichar() input + var E v_decoded; + var E v_decoded_8; + + var integer v_res := decvalue(v_test, v_decoded); + var integer v_res_8 := decvalue_unichar(v_test_enc_8, v_decoded_8, "UTF-8"); + + if(match(v_res,1)){ + setverdict(pass,"Decoded ", v_decoded , " with result ", v_res); + }else{ + setverdict(fail,"Decode failed ", v_decoded , " with result ", v_res); + } + + if(match(v_res_8,1)){ + setverdict(pass,"Decoded ", v_decoded_8 , " with result ", v_res_8); + }else{ + setverdict(fail,"Decode failed ", v_decoded_8 , " with result ", v_res_8); + } + } + control{ + execute(TC_Sem_160102_predefined_functions_080()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_081.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_081.ttcn new file mode 100755 index 0000000..1055366 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_081.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function get_stringencoding works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * The get_stringencoding function analyses the encoded_value and returns the UCS encoding scheme.*/ + + +module Sem_160102_predefined_functions_081 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_081 () runs on GeneralComp { + + + var octetstring v_test := '414243C3A9C3BC'O; //UTF-8 encoded octetstring. The decoded value is: ABCéü + + var charstring v_get := get_stringencoding(v_test); // expected result: "UTF8" + + if (match(v_get , ("UTF-8",""))) { + setverdict(pass,"Decoded: ",v_get); + } else { + setverdict(fail, "Unexpected result: ", v_get); + } + } + + + + control{ + execute(TC_Sem_160102_predefined_functions_081()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_082.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_082.ttcn new file mode 100755 index 0000000..67c33c7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_082.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function for removing Byte order mark works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that reomve_bom() function successfully removes the byte order mark present at the beginning of a stream of serialized (encoded) universal character strings + UCS encoding scheme + */ + + +module Sem_160102_predefined_functions_082 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_082 () runs on GeneralComp { + + + var octetstring v_test_1 :='FEFF0AC2'O ; + var octetstring v_test_2 :='C0'O ; + + var octetstring v_remove := remove_bom(v_test_1); // expected result: v_remove := '0AC2'O + var octetstring v_remove_2 := remove_bom(v_test_2); // expected result: v_remove := 'C0'O + + if (match(v_remove,'0AC2'O) and match(v_remove_2, 'C0'O)) { + setverdict(pass,"Results are: ",v_remove, " and ",v_remove_2 ); + } else { + setverdict(fail,"Failed,the results are: ",v_remove, " and ",v_remove_2, "Expected: '0AC2'O and 'C0'O"); + } + } + + + + control{ + execute(TC_Sem_160102_predefined_functions_082()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_083.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_083.ttcn new file mode 100755 index 0000000..d60a1b7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_083.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_083 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_083 () runs on GeneralComp { + + var boolean v_res; + + template charstring Mytemaplate:= "1234ABCD"; + + + + v_res := isvalue(Mytemaplate); //template, expected result: true + + + + if ( match(v_res, true)) {setverdict(pass," isvalue(Mytemaplate): ", v_res);} + else{setverdict(fail," isvalue(Mytemaplate):", v_res, " expected result: true");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_083()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_084.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_084.ttcn new file mode 100755 index 0000000..c13fbf0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_084.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_084 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_084 () runs on GeneralComp { + + var boolean v_res; + + var GeneralComp MyComp; + + + + v_res := isvalue(MyComp); //component ,expected result: false + + + + if ( match(v_res, false)) {setverdict(pass," isvalue(MyComp): ", v_res);} + else{setverdict(fail," isvalue(MyComp):", v_res, " expected result: false");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_084()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_085.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_085.ttcn new file mode 100755 index 0000000..5258a7d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_085.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_085 { + + type integer address; + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_085 () runs on GeneralComp { + + var boolean v_res; + + var address MyAddr := null; + + + + v_res := isvalue(MyAddr); //address, expected result: true + + + + if ( match(v_res, true)) {setverdict(pass," isvalue(MyAddr): ", v_res);} + else{setverdict(fail," isvalue(MyAddr):", v_res, " expected result: true");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_085()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_086.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_086.ttcn new file mode 100755 index 0000000..e9cbc8b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_086.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_086 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_086 () runs on GeneralComp { + + var boolean v_res; + + var default MyDef := null; + + + + v_res := isvalue(MyDef); //dafult, expected result: true + + + if ( match(v_res, true)) {setverdict(pass," isvalue(MyDef): ", v_res);} + else{setverdict(fail," isvalue(MyDef)):", v_res, " expected result: true");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_086()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_087.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_087.ttcn new file mode 100755 index 0000000..2e2d62c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_087.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_087 { + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_087 () runs on GeneralComp { + + var boolean v_res; + + template charstring Mytemaplate2 := pattern "A*Z"; + + + + v_res := isvalue(Mytemaplate2); //pattern, expected result: false + + + if ( match(v_res, false)) {setverdict(pass," isvalue(Mytemaplate2: ", v_res);} + else{setverdict(fail," isvalue(Mytemaplate2): ", v_res, " expected result: false");} + + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_087()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_088.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_088.ttcn new file mode 100755 index 0000000..4b4522d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_088.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_088 { + + type record MyRec{ + integer field1, + integer field2 optional} + + type record MyRec2 { + MyRec field1, + integer field2 + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_088() runs on GeneralComp { + + var boolean v_res; + + var MyRec2 MyRecValue := {{1,-},1}; + + + + v_res := isvalue(MyRecValue.field1.field1); //nested, expected result: true + + + if ( match(v_res, true)) {setverdict(pass," isvalue(MyRecValue.field1.field1): ", v_res);} + else{setverdict(fail," isvalue(MyRecValue.field1.field1):", v_res, " expected result: true");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_088()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_089.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_089.ttcn new file mode 100755 index 0000000..08836e2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_089.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Ensure that predefined function isvalue() works properly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that isvalue() predefined function works properly + */ + + +module Sem_160102_predefined_functions_089 { + + type record MyRec{ + integer field1, + integer field2 optional} + + type record MyRec2 { + MyRec field1, + integer field2 + } + + type component GeneralComp { + } + + testcase TC_Sem_160102_predefined_functions_089() runs on GeneralComp { + + var boolean v_res; + + var MyRec2 MyRecValue := {{1,-},1}; + + + + v_res := isvalue(MyRecValue.field1.field2); //nested omit, expected result: false + + + if ( match(v_res, false)) {setverdict(pass," isvalue(MyRecValue.field1.field2): ", v_res);} + else{setverdict(fail," isvalue(MyRecValue.field1.field2):", v_res, " expected result: true");} + + } + + + control{ + execute(TC_Sem_160102_predefined_functions_089()); + } +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn new file mode 100755 index 0000000..31830cf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_090.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @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.4.1) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * Check that regexp predefined function with @nocase modfier evaluates the charstrings case insensitive way + * + * */ + +module Sem_160102_predefined_functions_090 { + + type component GeneralComp { + } + + + testcase TC_Sem_160102_predefined_functions_090 () runs on GeneralComp { + var charstring v_example_1:="example text string"; + var charstring v_example_2:="ExAmPlE TeXt StRinG"; + + var charstring v_i,v_j; + + v_i := regexp @nocase(v_example_1,charstring:"?+(TeXt)?+",0); //capital letters in expression + v_j := regexp @nocase(v_example_2,charstring:"?+(text)?+",0); //captial letters in inpar + + if(match(v_i,"text") and match(v_j,"TeXt")) { + setverdict(pass,"Results are: ",v_i, " and ", v_j); + } else { + setverdict(fail,"Results are: ",v_i, " and ", v_j); + } + } + + + control{ + + execute(TC_Sem_160102_predefined_functions_090()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn new file mode 100755 index 0000000..85639f4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_091.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @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: + * check that rnd() uses seeds per component + * + */ + + +module Sem_160102_predefined_functions_091 { + + type component GeneralComp {} + + + //function to generate random number with seed given as input + function frnd(float seed) runs on GeneralComp { + var float v_random1 := rnd(seed); + var float v_random2 := rnd(); + + setverdict(pass); + if (not match(rnd(seed), v_random1)) { + setverdict(fail, "rnd from same seed has to be identical to ", v_random1); + } + if (match(rnd(seed+1.0), v_random1)) { + setverdict(fail, "rnd from different seed should not be identical with ", v_random1); + } + } + + testcase TC_Sem_160102_predefined_functions_091 (float General_Comp_seed) runs on GeneralComp system GeneralComp { + + var float v_random1,v_random2; + + //Generate components with different seeds + var GeneralComp v_ptc1,v_ptc2; + + v_ptc1:= GeneralComp.create alive; + v_ptc2:= GeneralComp.create alive; + + //different seeds given to components: + v_ptc1.start(frnd(General_Comp_seed)); + v_ptc2.start(frnd(General_Comp_seed+0.5)); + all component.done; + } + + control{ + const float General_Comp_seed := 0.0; + execute(TC_Sem_160102_predefined_functions_091(General_Comp_seed)); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn new file mode 100755 index 0000000..43e4dda --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_092.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @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: + *16.1.2 Restriction a.3: + * any_string or sequence_type parameters of the functions substr may be partially initialized; */ + + +module Sem_160102_predefined_functions_092 { + + type component GeneralComp {} + + type record of integer RoI; + + + testcase TC_Sem_160102_predefined_functions_092 () runs on GeneralComp { + + var RoI v_Rec1; + var RoI v_res; + + v_Rec1 :={-,0,-,2}; //partially initialized record of integers + v_res := substr(v_Rec1,1,1); //expected result: {0} + + if( match(v_res,{0}) ) { + setverdict(pass,v_res); + } else { + setverdict(fail,"The value of v_res:",v_res); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_092()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn new file mode 100644 index 0000000..537c122 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_093.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn new file mode 100644 index 0000000..6da5084 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_094.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn new file mode 100644 index 0000000..52f2ff4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_095.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 521 + ** @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()); + +} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn new file mode 100644 index 0000000..3012bc7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_096.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 521 + ** @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 { + + template anytype mw_anytype := { U.f1:=1}; + 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()); + +} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn new file mode 100644 index 0000000..16d5f66 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_097.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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 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_097 { + +type component GeneralComp { +} + + type integer I with { variant "32 bit"}; + + + testcase TC_Sem_160102_predefined_functions_097 () runs on GeneralComp { + var template I v_test := 0; + var bitstring v_res := encvalue(v_test, "encoding_info_text"); + if (lengthof(v_res) == 32) { + setverdict(pass,v_res); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_097()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn new file mode 100644 index 0000000..2cf06d2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_098.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 521 + ** @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_098 { + +type component GeneralComp { +} + + type integer I with { variant "32 bit"}; + + + testcase TC_Sem_160102_predefined_functions_098 () runs on GeneralComp { + var template I v_test := 0; + var bitstring v_enc := encvalue(v_test, "encoding_info_text"); + + if (match(decvalue(v_enc,v_test,"decoding_info_text"), 0)){ + setverdict(pass,v_enc); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_098()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn new file mode 100644 index 0000000..95440a2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_099.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 521 + ** @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_099 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_099 () runs on GeneralComp { + + var charstring 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_099()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_100.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_100.ttcn new file mode 100644 index 0000000..8fea3c0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_100.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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_100 { + + type component GeneralComp { + + } + + testcase TC_Sem_160102_predefined_functions_100 () runs on GeneralComp { + + var charstring 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 integer 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_100()); + + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_101.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_101.ttcn new file mode 100644 index 0000000..cfedb69 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_101.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the encvalue function supports the dynamic_encoding parameter + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the inpar value for this single encvalue call. The rules for dynamic +// selection of the encode attribute are described in clause 27.9. + +// NOTE: the test is not executed as it would require dedicated codec support + +module Sem_160102_predefined_functions_101 { + + type component GeneralComp { + } + + type integer I with { + encode "Codec 1"; + encode "Codec 2" + }; + + testcase TC_Sem_160102_predefined_functions_101 () runs on GeneralComp { + var template I v_test := 0; + var bitstring v_res := encvalue(v_test, -, "Codec 1"); + setverdict(pass); + } + + //control{ + // execute(TC_Sem_160102_predefined_functions_101()); + //} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_102.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_102.ttcn new file mode 100644 index 0000000..2877b29 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_102.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the dynamic_encoding parameter of the encvalue function can be explicitly skipped + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the inpar value for this single encvalue call. The rules for dynamic +// selection of the encode attribute are described in clause 27.9. + +module Sem_160102_predefined_functions_102 { + + type component GeneralComp { + } + + type integer I with { variant "32 bit"}; + + testcase TC_Sem_160102_predefined_functions_102 () runs on GeneralComp { + var template I v_test := 0; + var bitstring v_res := encvalue(v_test, "encoding_info_text", -); + if (lengthof(v_res) == 32) { + setverdict(pass,v_res); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_102()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_103.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_103.ttcn new file mode 100644 index 0000000..6d13d50 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_103.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the decvalue function supports the dynamic_encoding parameter + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the decoded_value parameter for this single decvalue call. The rules +// for dynamic selection of the encode attribute are described in clause 27.9. + +// NOTE: the test is not executed as it would require dedicated codec support + +module Sem_160102_predefined_functions_103 { + + type component GeneralComp { + } + + type integer I with { + encode "Codec 1"; + encode "Codec 2" + }; + + testcase TC_Sem_160102_predefined_functions_103 () runs on GeneralComp { + var template I v_target := 0; + var bitstring v_src := oct2bit('00000000'O); + decvalue(v_src, v_target, -, "Codec 1"); + setverdict(pass); + } + + //control{ + // execute(TC_Sem_160102_predefined_functions_103()); + //} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_104.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_104.ttcn new file mode 100644 index 0000000..cb5c3a7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_104.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the dynamic_encoding parameter of the decvalue function can be explicitly skipped + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the decoded_value parameter for this single decvalue call. The rules +// for dynamic selection of the encode attribute are described in clause 27.9. + +module Sem_160102_predefined_functions_104 { + + type component GeneralComp { + } + + type integer I with { variant "32 bit"}; + + testcase TC_Sem_160102_predefined_functions_104 () runs on GeneralComp { + var template I v_target := 0; + var bitstring v_src := oct2bit('00000000'O); + var integer v_res := decvalue(v_src, v_target, "encoding_info_text", -); + if (v_res == 0) { + setverdict(pass, "Decoded value is: ", v_target); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_104()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_105.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_105.ttcn new file mode 100644 index 0000000..f72be60 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_105.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the encvalue_unichar function supports the dynamic_encoding parameter + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the inpar value for this single encvalue_unichar call. The rules for +// dynamic selection of the encode attribute are described in clause 27.9. + +// NOTE: the test is not executed as it would require dedicated codec support + +module Sem_160102_predefined_functions_105 { + + type component GeneralComp { + } + + type integer I with { + encode "Codec 1"; + encode "Codec 2" + }; + + testcase TC_Sem_160102_predefined_functions_105 () runs on GeneralComp { + var template I v_test := 0; + var universal charstring v_res := encvalue_unichar(v_test, -, "Codec 1"); + setverdict(pass); + } + + //control{ + // execute(TC_Sem_160102_predefined_functions_105()); + //} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_106.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_106.ttcn new file mode 100644 index 0000000..c20d41a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_106.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the dynamic_encoding parameter of the encvalue_unichar function can be explicitly skipped + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the inpar value for this single encvalue_unichar call. The rules for +// dynamic selection of the encode attribute are described in clause 27.9. + +module Sem_160102_predefined_functions_106 { + + type component GeneralComp { + } + + type integer I with { variant "32 bit"}; + + testcase TC_Sem_160102_predefined_functions_106 () runs on GeneralComp { + var template I v_test := 100; + var universal charstring v_res := encvalue_unichar(v_test, "UTF-32LE", "encoding_info_text", -); + if (v_res == "d") { + setverdict(pass); + } else { + setverdict(fail, "Invalid encoding result"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_106()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_107.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_107.ttcn new file mode 100644 index 0000000..1cc78eb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_107.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the decvalue_unichar function supports the dynamic_encoding parameter + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the decoded_value parameter for this single decvalue_unichar call. +// The rules for dynamic selection of the encode attribute are described in clause 27.9. + +// NOTE: the test is not executed as it would require dedicated codec support + +module Sem_160102_predefined_functions_107 { + + type component GeneralComp { + } + + type integer I with { + encode "Codec 1"; + encode "Codec 2" + }; + + testcase TC_Sem_160102_predefined_functions_107 () runs on GeneralComp { + var template I v_target := 0; + var universal charstring v_src := "d"; + decvalue_unichar(v_src, v_target, "UTF-32LE", -, "Codec 1"); + setverdict(pass); + } + + //control{ + // execute(TC_Sem_160102_predefined_functions_107()); + //} + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_108.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_108.ttcn new file mode 100644 index 0000000..a4c0d03 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_108.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.2, Verify that the dynamic_encoding parameter of the decvalue_unichar function can be explicitly skipped + ** @verdict pass accept, noexecution + ***************************************************/ +// The following requirements are tested: +// The optional dynamic_encoding parameter is used for dynamic selection of encode +// attribute of the decoded_value parameter for this single decvalue_unichar call. +// The rules for dynamic selection of the encode attribute are described in clause 27.9. + +module Sem_160102_predefined_functions_108 { + + type component GeneralComp { + } + + type integer I with { variant "32 bit"}; + + testcase TC_Sem_160102_predefined_functions_108 () runs on GeneralComp { + var template I v_target := 0; + var universal charstring v_src := "d"; + var integer v_res := decvalue_unichar(v_src, v_target, "UTF-32LE", "encoding_info_text", -); + if (v_res == 0) { + setverdict(pass, "Decoded value is: ", v_target); + } else { + setverdict(fail, "Invalid encoding length"); + } + } + + control{ + execute(TC_Sem_160102_predefined_functions_108()); + } + +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn new file mode 100644 index 0000000..28aa166 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/NegSem_160103_external_functions_001.ttcn @@ -0,0 +1,23 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.3, Ensure that the IUT recognizes external functions + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ +module NegSem_160103_external_functions_001 { + + type component GeneralComp { + } + + external function xf_NegSem_160103_external_functions_001() return template octetstring; //external functions cannot return template + + testcase TC_NegSem_160103_external_functions_001 () runs on GeneralComp { + setverdict(pass); + } + + control{ + execute(TC_NegSem_160103_external_functions_001()); + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn new file mode 100644 index 0000000..88213cb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.3, Ensure that the IUT recognizes external functions + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration external_functions + ***************************************************/ +module Sem_160103_external_functions_001 { + + type component GeneralComp { + } + + /** + * @return always 1 + */ + external function xf_Sem_160103_external_functions_001() return integer; + + testcase TC_Sem_160103_external_functions_001 () runs on GeneralComp { + var integer v_i; + + v_i := xf_Sem_160103_external_functions_001(); + + if (v_i == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + + execute(TC_Sem_160103_external_functions_001()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_002.ttcn new file mode 100644 index 0000000..0dcbb7b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160103_external_functions/Sem_160103_external_functions_002.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.3, Ensure that the IUT recognizes external functions + ** @verdict pass accept, ttcn3verdict:pass + ** @configuration external_functions + ***************************************************/ +module Sem_160103_external_functions_002 { + + type record MyRecord { + integer field1, + integer field2, + integer field3 + } + + type port TestPort message { + inout MyRecord + } + + type component GeneralComp { + } + /** + * @return p_in + 1 + */ + external function xf_Sem_160103_external_functions_002(inout integer p_in) return integer; + + testcase TC_Sem_160103_external_functions_002 () runs on GeneralComp { + var integer v_input := 5; + var integer v_result; + + v_result := xf_Sem_160103_external_functions_002(v_input); + if(v_result==6) { setverdict(pass) } + else { setverdict(fail) } + } + + control{ + + execute(TC_Sem_160103_external_functions_002()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_001.ttcn new file mode 100644 index 0000000..5001b3c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_001.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.4, Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ +module NegSem_160104_invoking_functions_from_specific_places_001 { + + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_001 () runs on GeneralComp { + var integer v_i; + + messagePort.send(1); + alt { + //calling an external function in boolean guard + [xf_NegSem_160104_invoking_functions_from_specific_places_001()] messagePort.receive { + v_i:=0; + setverdict(fail); + } + [] messagePort.receive { v_i:=1; } + } + + } + + control{ + + execute(TC_NegSem_160104_invoking_functions_from_specific_places_001()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn new file mode 100644 index 0000000..fe1c7e8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_002.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.4, Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions + ** @verdict pass reject + ***************************************************/ +module NegSem_160104_invoking_functions_from_specific_places_002 { + + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test() return boolean { + if (rnd() > 0.5) { //calling rnd within a function inside a boolean guard + return true; + } else { + return false; + } + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_002 () runs on GeneralComp { + var integer v_i; + + messagePort.send(1); + alt { + [f_test()] messagePort.receive { v_i:=0; } + [] messagePort.receive { v_i:=1; } + } + + } + + control{ + + execute(TC_NegSem_160104_invoking_functions_from_specific_places_002()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn new file mode 100644 index 0000000..536cf5d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.4, Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions + ** @verdict pass reject + ***************************************************/ +module NegSem_160104_invoking_functions_from_specific_places_003 { + + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test() return boolean { + setverdict(inconc); //setting verdict within a function inside a boolean guard + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_003 () runs on GeneralComp { + var integer v_i; + + messagePort.send(1); + alt { + [f_test()] messagePort.receive { v_i:=0; } + [] messagePort.receive { v_i:=1; } + } + } + + control{ + + execute(TC_NegSem_160104_invoking_functions_from_specific_places_003()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn new file mode 100644 index 0000000..60acb7b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_004.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1.4, Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions + ** @verdict pass reject + ***************************************************/ +module NegSem_160104_invoking_functions_from_specific_places_004 { + + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test(inout integer p_int) return boolean { //issue of inout parameter + p_int:=1; + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_004 () runs on GeneralComp { + var integer v_i:=0; + + messagePort.send(1); + alt { + [f_test(v_i)] messagePort.receive { + v_i:=0; + setverdict(fail, "function call not allowed in guard"); + } + [] messagePort.receive { + v_i:=1; + setverdict(pass); + } + } + } + + control{ + + execute(TC_NegSem_160104_invoking_functions_from_specific_places_004()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn b/core_language/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 0000000..fd4e613 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_005.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn b/core_language/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 0000000..59b3b34 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_006.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn b/core_language/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 0000000..5fcdebd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_007.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn b/core_language/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 0000000..20ffd33 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_008.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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_008()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn b/core_language/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 0000000..f12bc9f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_009.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn b/core_language/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 0000000..18e1db6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_010.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn b/core_language/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 0000000..75ef07a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_011.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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); + 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_011()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn b/core_language/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 0000000..d730e36 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_012.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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_012()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn b/core_language/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 0000000..e9babec --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_013.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn b/core_language/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 0000000..dccaed7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_014.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type port P message { + inout integer; + } + + 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_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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn b/core_language/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 0000000..21803c7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_015.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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.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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn b/core_language/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 0000000..3912aa9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_016.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn b/core_language/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 0000000..25f7bdf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_017.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn b/core_language/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 0000000..c4f5772 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_018.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + 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_018()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn b/core_language/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 0000000..dcda398 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_019.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn b/core_language/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 0000000..324e348 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_020.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + connect(mtc:p, mtc:p); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn b/core_language/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 0000000..e20c5d1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_021.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_021()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn b/core_language/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 0000000..8166783 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_022.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + 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); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_022()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn b/core_language/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 0000000..2a16840 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_023.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + 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:?); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_023()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn b/core_language/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 0000000..74323b9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_024.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + 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); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_024()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn b/core_language/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 0000000..dd336a8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_025.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + 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:?); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_025()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn b/core_language/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 0000000..508bf10 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_026.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy integer mw_test := f_test(); + 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); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_026()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn b/core_language/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 0000000..a41f236 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_027.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn b/core_language/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 0000000..88d0695 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_028.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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(); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_028()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn b/core_language/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 0000000..6c9966a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_029.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn b/core_language/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 0000000..99e6cde --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_030.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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(); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn b/core_language/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 0000000..a76e96b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_031.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn b/core_language/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 0000000..1e1505f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_032.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn b/core_language/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 0000000..d247d9e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_033.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn b/core_language/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 0000000..9be5394 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_034.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn b/core_language/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 0000000..03a6319 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_035.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn b/core_language/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 0000000..d41a6c4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_036.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn b/core_language/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 0000000..79a71db --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_037.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_037() 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_037()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn b/core_language/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 0000000..90e68b6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_038.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn b/core_language/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 0000000..2b615ec --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_039.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn b/core_language/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 0000000..2385103 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_040.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn b/core_language/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 0000000..c9a7c59 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_041.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn b/core_language/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 0000000..845dba5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_042.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn b/core_language/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 0000000..967f516 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_043.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn b/core_language/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 0000000..a0fd2ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_044.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn b/core_language/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 0000000..7125acf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_045.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn b/core_language/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 0000000..3ba9cae --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_046.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn b/core_language/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 0000000..5445fe2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_047.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn b/core_language/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 0000000..f97d3ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_048.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn b/core_language/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 0000000..d265da6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_049.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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_049()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn b/core_language/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 0000000..fac6f53 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_050.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn b/core_language/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 0000000..f6abe61 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_051.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn b/core_language/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 0000000..118df83 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_052.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn b/core_language/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 0000000..cf9f403 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_053.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn b/core_language/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 0000000..88fcf55 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_054.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn b/core_language/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 0000000..6a3df03 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_055.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn b/core_language/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 0000000..e4cffa5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_056.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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; + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn b/core_language/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 0000000..62282ae --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_057.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn b/core_language/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 0000000..543eb22 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_058.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn b/core_language/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 0000000..dee4e61 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_059.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + 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_059()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn b/core_language/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 0000000..14c3f34 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_060.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn b/core_language/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 0000000..c78102e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_061.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + connect(mtc:p, mtc:p); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn b/core_language/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 0000000..e50421d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_062.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + var GeneralComp v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + connect(mtc:psig, v_ptc:psig); + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn b/core_language/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 0000000..b688472 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_063.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + 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(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_063()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn b/core_language/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 0000000..9b45b57 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_064.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + 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(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_064()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn b/core_language/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 0000000..d34bd87 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_065.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + 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(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_065()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn b/core_language/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 0000000..edc23be --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_066.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + 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(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_066()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn b/core_language/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 0000000..8c91e0a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_067.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 { + template @fuzzy R mw_test := { field1 := f_test() }; + 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(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_067()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn b/core_language/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 0000000..a791c18 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_068.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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 { + 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_068()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn b/core_language/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 0000000..7c0ff2b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_069.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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() }; + 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_069()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn b/core_language/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 0000000..d3f4671 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_070.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn b/core_language/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 0000000..b5cab38 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_071.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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() }; + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn b/core_language/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 0000000..fcb4f86 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_072.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn b/core_language/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 0000000..5a90e9b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_073.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn b/core_language/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 0000000..1ed9514 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_074.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn b/core_language/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 0000000..c5722ee --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_075.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn b/core_language/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 0000000..fbcdd6b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_076.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn b/core_language/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 0000000..ee31938 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_077.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn b/core_language/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 0000000..98eb112 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_078.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_078() 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_078()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn b/core_language/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 0000000..7ac0f55 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_079.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn b/core_language/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 0000000..7f53e93 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_080.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn b/core_language/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 0000000..13c9bef --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_081.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn b/core_language/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 0000000..f12c72d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_082.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn b/core_language/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 0000000..571fc82 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_083.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn b/core_language/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 0000000..4700b4c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_084.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn b/core_language/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 0000000..1230362 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_085.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn b/core_language/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 0000000..1808843 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_086.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn b/core_language/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 0000000..b517d1d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_087.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn b/core_language/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 0000000..2107d9b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_088.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn b/core_language/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 0000000..0e35aa8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_089.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn b/core_language/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 0000000..df36ad6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_090.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn b/core_language/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 0000000..e341c5d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_091.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn b/core_language/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 0000000..b8d11cc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_092.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn b/core_language/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 0000000..bfd8e94 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_093.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn b/core_language/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 0000000..849e833 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_094.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn b/core_language/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 0000000..302ae90 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_095.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn b/core_language/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 0000000..663fc62 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_096.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn b/core_language/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 0000000..93ebabe --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_097.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn b/core_language/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 0000000..e658f71 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_098.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn b/core_language/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 0000000..f92a488 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_099.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn b/core_language/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 0000000..7458674 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_100.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn b/core_language/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 0000000..eeebc92 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_101.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn b/core_language/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 0000000..8ab5b68 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_102.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn b/core_language/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 0000000..27ee7e5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_103.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn b/core_language/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 0000000..2bcc8cf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_104.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn b/core_language/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 0000000..7f0209d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_105.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn b/core_language/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 0000000..04b5c67 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_106.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn b/core_language/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 0000000..70ecd19 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_107.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn b/core_language/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 0000000..4606e53 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_108.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn b/core_language/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 0000000..9ec5c4d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_109.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn b/core_language/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 0000000..3344d1a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_110.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn b/core_language/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 0000000..fa7fa96 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_111.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn b/core_language/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 0000000..87108fa --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_112.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn b/core_language/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 0000000..eaf88a1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_113.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn b/core_language/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 0000000..e23519e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_114.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn b/core_language/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 0000000..1660018 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_115.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn b/core_language/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 0000000..7d72abc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_116.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn b/core_language/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 0000000..e4479f5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_117.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn b/core_language/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 0000000..0f545b1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_118.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn b/core_language/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 0000000..2c57a0c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_119.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn b/core_language/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 0000000..287a9e4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_120.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn b/core_language/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 0000000..a8c2b5a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_121.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn b/core_language/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 0000000..77fdb8a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_122.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn b/core_language/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 0000000..0fa3263 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_123.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn b/core_language/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 0000000..762375a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_124.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn b/core_language/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 0000000..74d0e23 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_125.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn b/core_language/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 0000000..7a92306 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_126.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn b/core_language/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 0000000..d320056 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_127.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn b/core_language/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 0000000..e8db772 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_128.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn b/core_language/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 0000000..b366f52 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_129.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn b/core_language/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 0000000..b787692 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_130.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn b/core_language/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 0000000..eca8b89 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_131.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn b/core_language/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 0000000..0535857 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_132.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn b/core_language/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 0000000..64f2232 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_133.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn b/core_language/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 0000000..aa9a59a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_134.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn b/core_language/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 0000000..ac2392f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_135.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn b/core_language/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 0000000..1c3cbf3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_136.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn b/core_language/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 0000000..57f508b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_137.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn b/core_language/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 0000000..39db2c0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_138.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn b/core_language/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 0000000..72e5e5b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_139.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn b/core_language/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 0000000..713af49 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_140.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn b/core_language/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 0000000..d4bd82a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_141.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn b/core_language/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 0000000..f26fd28 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_142.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn b/core_language/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 0000000..f43f830 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_143.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn b/core_language/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 0000000..ccbb71e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_144.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn b/core_language/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 0000000..63ae9a6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_145.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn b/core_language/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 0000000..dcee357 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_146.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn b/core_language/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 0000000..af75b6e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_147.ttcn @@ -0,0 +1,64 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn b/core_language/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 0000000..3c7924b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_148.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn b/core_language/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 0000000..d266b40 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_149.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn b/core_language/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 0000000..a1e0276 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_150.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn b/core_language/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 0000000..70d50e6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_151.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn b/core_language/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 0000000..523d0b9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_152.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn b/core_language/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 0000000..c27d7a8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_153.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn b/core_language/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 0000000..84fe87c --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_154.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn b/core_language/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 0000000..7ed08db --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_155.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn b/core_language/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 0000000..4ee8785 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_156.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn b/core_language/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 0000000..3ddce8a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_157.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn b/core_language/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 0000000..6c35857 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_158.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn b/core_language/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 0000000..1851cfa --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_159.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn b/core_language/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 0000000..84ac6d2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_160.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn b/core_language/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 0000000..3c99b20 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_161.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn b/core_language/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 0000000..fa39b44 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_162.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn b/core_language/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 0000000..e01e12a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_163.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return template integer { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn b/core_language/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 0000000..9ba2826 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_164.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn b/core_language/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 0000000..d43f264 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_165.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn b/core_language/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 0000000..3f221b1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_166.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn b/core_language/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 0000000..0ff11df --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_167.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn b/core_language/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 0000000..27f6416 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_168.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn b/core_language/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 0000000..af97bb7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_169.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn b/core_language/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 0000000..1d9007a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_170.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn b/core_language/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 0000000..cf8f0d0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_171.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn b/core_language/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 0000000..c301c02 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_172.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn b/core_language/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 0000000..f5f8fb4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_173.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn b/core_language/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 0000000..a4172af --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_174.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn b/core_language/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 0000000..3f6aa0a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_175.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn b/core_language/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 0000000..5827ebe --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_176.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn b/core_language/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 0000000..c04eed1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_177.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn b/core_language/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 0000000..9caf562 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_178.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn b/core_language/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 0000000..eb9f706 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_179.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn b/core_language/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 0000000..11eab87 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_180.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn b/core_language/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 0000000..c394464 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_181.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn b/core_language/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 0000000..46f6ee7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_182.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type port P message { + inout integer; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn b/core_language/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 0000000..c2e3da3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_183.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn b/core_language/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 0000000..4b0687d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_184.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn b/core_language/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 0000000..1e41a43 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_185.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn b/core_language/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 0000000..b15afa1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_186.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn b/core_language/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 0000000..ae939e2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_187.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn b/core_language/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 0000000..bec4a46 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_188.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn b/core_language/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 0000000..73040b5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_189.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn b/core_language/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 0000000..53fd5a5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_190.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn b/core_language/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 0000000..e07ce98 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_191.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn b/core_language/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 0000000..c223b15 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_192.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn b/core_language/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 0000000..e3a647a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_193.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn b/core_language/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 0000000..ed1ba45 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_194.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn b/core_language/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 0000000..680489b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_195.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn b/core_language/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 0000000..b3de769 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_196.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn b/core_language/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 0000000..4a76e39 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_197.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn b/core_language/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 0000000..458d2ee --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_198.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn b/core_language/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 0000000..3382e31 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_199.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn b/core_language/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 0000000..5f9273a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_200.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn b/core_language/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 0000000..6f11672 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_201.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn b/core_language/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 0000000..51be133 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_202.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn b/core_language/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 0000000..aa8a647 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_203.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn b/core_language/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 0000000..30c7837 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_204.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn b/core_language/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 0000000..a02ecf9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_205.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn b/core_language/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 0000000..41ab07d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_206.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn b/core_language/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 0000000..bf2127e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_207.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn b/core_language/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 0000000..bcc43ec --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_208.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn b/core_language/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 0000000..b03fbe8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_209.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn b/core_language/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 0000000..c504822 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_210.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn b/core_language/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 0000000..b95e9ea --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_211.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn b/core_language/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 0000000..c70f1b2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_212.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn b/core_language/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 0000000..993684a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_213.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn b/core_language/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 0000000..a7b2c23 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_214.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn b/core_language/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 0000000..9d55b75 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_215.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn b/core_language/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 0000000..e317100 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_216.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn b/core_language/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 0000000..aa9461a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_217.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn b/core_language/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 0000000..2eaf125 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_218.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn b/core_language/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 0000000..99699a4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_219.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn b/core_language/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 0000000..0c10bc3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_220.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn b/core_language/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 0000000..acd2554 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_221.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type port P message { + inout integer; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn b/core_language/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 0000000..8f262cc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_222.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn b/core_language/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 0000000..30ffdca --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_223.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn b/core_language/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 0000000..1dd9a3e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_224.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn b/core_language/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 0000000..f5c18b5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_225.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn b/core_language/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 0000000..2fabf53 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_226.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn b/core_language/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 0000000..38cb5f3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_227.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn b/core_language/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 0000000..6ffdd87 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_228.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn b/core_language/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 0000000..046c03b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_229.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn b/core_language/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 0000000..2485aec --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_230.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn b/core_language/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 0000000..5479de4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_231.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn b/core_language/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 0000000..113e3d3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_232.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn b/core_language/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 0000000..cb341c5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_233.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn b/core_language/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 0000000..a722a19 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_234.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn b/core_language/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 0000000..1cab0fd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_235.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn b/core_language/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 0000000..4259852 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_236.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn b/core_language/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 0000000..9c11e75 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_237.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn b/core_language/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 0000000..2fd9698 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_238.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn b/core_language/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 0000000..712bc7f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_239.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn b/core_language/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 0000000..48dbdc3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_240.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn b/core_language/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 0000000..523a629 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_241.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn b/core_language/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 0000000..0d68f6e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_242.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn b/core_language/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 0000000..1d04626 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_243.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn b/core_language/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 0000000..9469060 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_244.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn b/core_language/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 0000000..8f3083e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_245.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn b/core_language/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 0000000..bd8df2f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_246.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn b/core_language/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 0000000..c84fc34 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_247.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn b/core_language/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 0000000..5f7abe2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_248.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn b/core_language/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 0000000..9c6c436 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_249.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn b/core_language/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 0000000..e15850e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_250.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn b/core_language/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 0000000..7fec573 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_251.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn b/core_language/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 0000000..ae6ec30 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_252.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn b/core_language/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 0000000..799005d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_253.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn b/core_language/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 0000000..2081829 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_254.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn b/core_language/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 0000000..3a948ce --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_255.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn b/core_language/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 0000000..c3e3cdb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_256.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn b/core_language/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 0000000..d7fad12 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_257.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn b/core_language/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 0000000..51db1f5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_258.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn b/core_language/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 0000000..b068c4b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_259.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn b/core_language/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 0000000..bac0875 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_260.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn b/core_language/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 0000000..7008f4e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_261.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn b/core_language/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 0000000..7aae715 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_262.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn b/core_language/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 0000000..bad5588 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_263.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn b/core_language/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 0000000..defec19 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_264.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type port P message { + inout integer; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn b/core_language/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 0000000..aafb8d9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_265.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn b/core_language/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 0000000..905db8d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_266.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn b/core_language/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 0000000..d3502d8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_267.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn b/core_language/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 0000000..f3104c8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_268.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn b/core_language/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 0000000..17d13cb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_269.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn b/core_language/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 0000000..b511085 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_270.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn b/core_language/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 0000000..ee008c6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_271.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn b/core_language/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 0000000..1391e2f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_272.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn b/core_language/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 0000000..02e30e1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_273.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn b/core_language/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 0000000..e9e38a6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_274.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn b/core_language/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 0000000..f441249 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_275.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn b/core_language/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 0000000..51eb4d6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_276.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn b/core_language/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 0000000..0eae0df --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_277.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn b/core_language/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 0000000..a8d5ac0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_278.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn b/core_language/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 0000000..2f862a9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_279.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn b/core_language/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 0000000..9a5a028 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_280.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn b/core_language/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 0000000..4318f46 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_281.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn b/core_language/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 0000000..563669f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_282.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn b/core_language/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 0000000..b1d548e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_283.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn b/core_language/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 0000000..6d750a0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_284.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn b/core_language/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 0000000..f3236c9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_285.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn b/core_language/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 0000000..fbd8a3b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_286.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn b/core_language/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 0000000..1ae13d1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_287.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn b/core_language/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 0000000..3394756 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_288.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_160104_invoking_functions_from_specific_places_001() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_160104_invoking_functions_from_specific_places_001()) { 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn b/core_language/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 0000000..f0b099a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_289.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn b/core_language/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 0000000..d04784f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_290.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn b/core_language/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 0000000..8a92cde --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_291.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn b/core_language/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 0000000..573791d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_292.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn b/core_language/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 0000000..02a109b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_293.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn b/core_language/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 0000000..fe90359 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_294.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn b/core_language/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 0000000..d874f2b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_295.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn b/core_language/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 0000000..767b9b3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_296.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in 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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn b/core_language/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 0000000..ff476c2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_297.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in 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; + } + + 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/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_298.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_298.ttcn new file mode 100644 index 0000000..ab4aaa0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_298.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_298 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test(@fuzzy integer p_par) return template integer { + return (0..p_par); + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_298() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + template @fuzzy integer mw_test := f_test(v_int); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_298()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_299.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_299.ttcn new file mode 100644 index 0000000..63e1cf2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_299.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_299 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + external function @deterministic f_test(@fuzzy integer p_par) return template integer; + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_299() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + template @fuzzy integer mw_test := f_test(v_int); + connect(mtc:p, mtc:p); + p.send(1); + p.receive(mw_test); + setverdict(pass); + } + + control { + execute(TC_NegSem_160104_invoking_functions_from_specific_places_299()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_300.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_300.ttcn new file mode 100644 index 0000000..d38fe8a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_300.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy variables (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_300 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var @fuzzy integer v_int := f_eval(); + return (0..v_int); + } + + function f_eval() return integer { + return 100; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_300() 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_300()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_301.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_301.ttcn new file mode 100644 index 0000000..5ca2c47 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_301.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain the setencode 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: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_301 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.setencode(integer, "Binary"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_301() 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_301()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_302.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_302.ttcn new file mode 100644 index 0000000..978b358 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_302.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_302 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test(@fuzzy integer p_par) return template integer { + return (0..p_par); + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_302() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + template @fuzzy R mw_test := { field1 := f_test(v_int) }; + 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_302()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_303.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_303.ttcn new file mode 100644 index 0000000..de37655 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_303.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_303 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + external function @deterministic f_test(@fuzzy integer p_par) return template integer; + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_303() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + template @fuzzy R mw_test := { field1 := f_test(v_int) }; + 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_303()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_304.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_304.ttcn new file mode 100644 index 0000000..3196d13 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_304.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy variables (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_304 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var @fuzzy integer v_int := f_eval(); + return (0..v_int); + } + + function f_eval() return integer { + return 100; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_304() 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_304()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_305.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_305.ttcn new file mode 100644 index 0000000..a37e0bd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_305.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain the setencode 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: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_305 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.setencode(R, "Binary"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_305() 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_305()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_306.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_306.ttcn new file mode 100644 index 0000000..2a61d38 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_306.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_306 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test(@fuzzy integer p_par) return template integer { + return (0..p_par); + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_306() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_306()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_307.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_307.ttcn new file mode 100644 index 0000000..49cff54 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_307.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_307 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + external function @deterministic f_test(@fuzzy integer p_par) return template integer; + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_307() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_307()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_308.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_308.ttcn new file mode 100644 index 0000000..215eb27 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_308.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy variables (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_308 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var @fuzzy integer v_int := f_eval(); + return (0..v_int); + } + + function f_eval() return integer { + return 100; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_308() 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_308()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_309.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_309.ttcn new file mode 100644 index 0000000..c56e4e9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_309.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain the setencode 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: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_309 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.setencode(R, "Binary"); + return ?; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_309() 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_309()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_310.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_310.ttcn new file mode 100644 index 0000000..92651e3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_310.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_310 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test(@fuzzy integer p_par) return template integer { + return (0..p_par); + } + + function f_eval() return integer { + return 10; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_310() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_310()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_311.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_311.ttcn new file mode 100644 index 0000000..0592a2a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_311.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called during receiving operation cannot contain fuzzy parameters (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_311 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + external function @deterministic f_test(@fuzzy integer p_par) return template integer; + + function f_eval() return integer { + return 10; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_311() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_311()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_312.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_312.ttcn new file mode 100644 index 0000000..2b8b141 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_312.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain fuzzy variables (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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_312 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() return template integer { + var @fuzzy integer v_int := f_eval(); + return (0..v_int); + } + + function f_eval() return integer { + return 100; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_312() 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_312()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_313.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_313.ttcn new file mode 100644 index 0000000..a4ae42b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_313.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called during receiving operation cannot contain the setencode 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: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_313 { + type record R { + integer field1 + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return template integer { + p.setencode(R, "Binary"); + return ?; + } + + template R m_msg (template integer p_par) := { + field1 := p_par + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_313() 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_313()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_314.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_314.ttcn new file mode 100644 index 0000000..d61ddda --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_314.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of alt statements cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_314 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test(@fuzzy integer p_par) return boolean { + if (p_par > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_314() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_314()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_315.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_315.ttcn new file mode 100644 index 0000000..1441b87 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_315.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called in guards of alt statements cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_314 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + external function @deterministic f_test(@fuzzy integer p_par) return boolean; + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_314() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_314()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_316.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_316.ttcn new file mode 100644 index 0000000..995ec26 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_316.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of alt statements cannot contain fuzzy variables + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_316 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var @fuzzy integer v_int := f_eval(); + if (v_int > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 100; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_316() 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_316()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_317.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_317.ttcn new file mode 100644 index 0000000..17cead7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_317.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of alt statements cannot contain the setencode operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_317 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.setencode(integer, "Binary"); + return true; + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_317() 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_317()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_318.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_318.ttcn new file mode 100644 index 0000000..8d90481 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_318.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of altsteps cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_318 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + function f_test(@fuzzy integer p_par) return boolean { + if (p_par > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 10; + } + + altstep a_rcv() runs on GeneralComp { + [f_test(v_int)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_318() 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_318()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_319.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_319.ttcn new file mode 100644 index 0000000..93a9d26 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_319.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called in guards of altsteps cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_319 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + external function @deterministic f_test(@fuzzy integer p_par) return boolean; + + function f_eval() return integer { + return 10; + } + + altstep a_rcv() runs on GeneralComp { + [f_test(v_int)] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_319() 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_319()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_320.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_320.ttcn new file mode 100644 index 0000000..8bc7432 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_320.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of altsteps cannot contain fuzzy variables + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_320 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var @fuzzy integer v_int := f_eval(); + if (v_int > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 100; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_320() 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_320()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_321.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_321.ttcn new file mode 100644 index 0000000..ccf405d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_321.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in guards of altsteps cannot contain the setencode operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_321 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.setencode(integer, "Binary"); + return true; + } + + altstep a_rcv() runs on GeneralComp { + [f_test()] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_321() 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_321()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_322.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_322.ttcn new file mode 100644 index 0000000..9a7f5bb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_322.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in local definitions of altsteps cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_322 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + function f_test(@fuzzy integer p_par) return boolean { + if (p_par > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 10; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(v_int); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_322() 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_322()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_323.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_323.ttcn new file mode 100644 index 0000000..920ba77 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_323.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that an external function called in local definitions of altsteps cannot contain fuzzy 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: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_323 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + external function @deterministic f_test(@fuzzy integer p_par) return boolean; + + function f_eval() return integer { + return 10; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_guard := f_test(v_int); + [v_guard] p.receive(integer:?) {} + } + + testcase TC_NegSem_160104_invoking_functions_from_specific_places_323() 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_323()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_324.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_324.ttcn new file mode 100644 index 0000000..d5959d6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_324.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in local definitions of altsteps cannot contain fuzzy variables + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// k) Calling functions and external functions with @fuzzy formal parameters and variables (see notes 4 and 9). + +module NegSem_160104_invoking_functions_from_specific_places_324 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return boolean { + var @fuzzy integer v_int := f_eval(); + if (v_int > 0) { + return true; + } else { + return false; + } + } + + function f_eval() return integer { + return 100; + } + + 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_324() 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_324()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_325.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_325.ttcn new file mode 100644 index 0000000..c9a4e29 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/160104_invoking_functions_from_specific_places/NegSem_160104_invoking_functions_from_specific_places_325.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.1.4, verify that a function called in local definitions of altsteps cannot contain the setencode operation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// If value returning functions are called in receiving communication operations (in templates, template fields, +// in-line templates, or as actual parameters), in guards or events of alt statements or altsteps (see clause 20.2), +// or in initializations of altstep local definitions (see clause 16.2), the following operations shall not be +// used in functions called in the cases specified above, in order to avoid side effects that cause changing the +// state of the component or the actual snapshot and to prevent different results of subsequent evaluations +// on an unchanged snapshot: +// l) The setencode operation (see note 8 and clause 27.9). + +module NegSem_160104_invoking_functions_from_specific_places_325 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.setencode(integer, "Binary"); + 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_325() 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_325()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn new file mode 100644 index 0000000..cc15c45 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_001 { + + +type component GeneralComp { +} + +function f_test ( integer p_integer := 0 ) return float { + + return p_integer+1; // mismatch between return type and argument type + return p_integer+2; +} + +testcase TC_NegSem_1601_toplevel_001 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_NegSem_1601_toplevel_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn new file mode 100644 index 0000000..c0f92da --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_002 { + +type component GeneralComp { +} + +function f_test ( template octetstring p_ostring ) return octetstring { + return p_ostring; // mismatch between return type and template argument +} + +testcase TC_NegSem_1601_toplevel_002 () runs on GeneralComp { + if( match('FFFFFF'O, f_test('FF??'O)) ) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control{ + execute(TC_NegSem_1601_toplevel_002()); +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn new file mode 100644 index 0000000..4e5535e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_003.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_003 { + + +type component GeneralComp { + var integer v_comp:=1; +} + +function f_test ( integer p_integer := 0 ) return integer { + + return f_two(p_integer); //against restriction 16.1 / a) +} + +function f_two ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return p_integer+v_comp; +} + + +testcase TC_NegSem_1601_toplevel_003 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_NegSem_1601_toplevel_003()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_004.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_004.ttcn new file mode 100644 index 0000000..01778ba --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_004 { + + +type component GeneralComp { +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return p_integer+1; +} + +testcase TC_NegSem_1601_toplevel_004 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + f_test(1); //attempt to invoke a function with runs on clause + execute(TC_NegSem_1601_toplevel_004()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_005.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_005.ttcn new file mode 100644 index 0000000..da0438e --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_005.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_005 { + + +type component GeneralComp { +} + +function f_test (inout integer p_integer := 10 ) return integer { + if (p_integer > 5) { + p_integer := 5; + return p_integer; + } + // there is no return value if comparison is false + +} + +testcase TC_NegSem_1601_toplevel_005 () runs on GeneralComp { + + if(f_test(2)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_NegSem_1601_toplevel_005()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_006.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_006.ttcn new file mode 100644 index 0000000..f35e5dc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/NegSem_1601_toplevel_006.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_1601_toplevel_006 { + + +type component GeneralComp { + var integer v_comp:=1; +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return f_two(p_integer); +} + +function f_two ( integer p_integer := 0 ) return integer { + + return p_integer+v_comp; //use of variable from a component but missing 'runs on' clause +} + + +testcase TC_NegSem_1601_toplevel_006 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_NegSem_1601_toplevel_006()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_001.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_001.ttcn new file mode 100644 index 0000000..305a424 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1601_toplevel_001 { + + +type component GeneralComp { +} + +function f_test ( integer p_integer := 0 ) return integer { + + return p_integer+1; + return p_integer+2; +} + +testcase TC_Sem_1601_toplevel_001 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_Sem_1601_toplevel_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_002.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_002.ttcn new file mode 100644 index 0000000..4839f09 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_002.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1601_toplevel_002 { + + type component GeneralComp { + } + + function f_test ( template octetstring p_ostring ) return template octetstring { + + return p_ostring & p_ostring; + } + + testcase TC_Sem_1601_toplevel_002 () runs on GeneralComp { + + if( match('FFFFFFFF'O, f_test('FF?'O)) ) { + setverdict(pass); + } + else { + setverdict(fail); + } + + } + + + control{ + + execute(TC_Sem_1601_toplevel_002()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_003.ttcn b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_003.ttcn new file mode 100644 index 0000000..05192ad --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1601_functions/1601_toplevel/Sem_1601_toplevel_003.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.1, Ensure that the IUT correctly handles function definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1601_toplevel_003 { + + +type component GeneralComp { + var integer v_comp:=1; +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return f_two(p_integer); +} + +function f_two ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return p_integer+v_comp; +} + + +testcase TC_Sem_1601_toplevel_003 () runs on GeneralComp { + + if(f_test(1)==2) { + setverdict(pass); + } + else { + setverdict(fail); + } + +} + + +control{ + + execute(TC_Sem_1601_toplevel_003()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/NegSem_160201_invoking_altsteps_001.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/NegSem_160201_invoking_altsteps_001.ttcn new file mode 100644 index 0000000..4051204 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/NegSem_160201_invoking_altsteps_001.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2.1, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_160201_invoking_altsteps_001 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type port simplePort message { + inout integer + } + + type component GeneralComp { + port loopbackPort messagePort + } + + type component AltComp { + port simplePort messagePort + } + + + +altstep AltSet1() runs on AltComp { //incompatible component with GeneralComp + + [] messagePort.receive { + setverdict(pass); + } + +} + +testcase TC_NegSem_160201_invoking_altsteps_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + + alt { + [] AltSet1(); + [] t_timer.timeout { + setverdict(pass); + } + } + +} + +control{ + + execute(TC_NegSem_160201_invoking_altsteps_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_001.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_001.ttcn new file mode 100644 index 0000000..0e2eaff --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_001.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2.1, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_160201_invoking_altsteps_001 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + + +altstep AltSet1() runs on GeneralComp { + + [] messagePort.receive { + setverdict(pass); + } + +} + +testcase TC_Sem_160201_invoking_altsteps_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + + alt { + [] AltSet1(); + [] t_timer.timeout { + setverdict(pass); + } + } + +} + +control{ + + execute(TC_Sem_160201_invoking_altsteps_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_002.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_002.ttcn new file mode 100644 index 0000000..6809fa4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_002.ttcn @@ -0,0 +1,67 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2.1, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_160201_invoking_altsteps_002 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + +altstep AltSet1() runs on GeneralComp { + + [] messagePort.check { + setverdict(inconc); + } + +} + +altstep AltSet2() runs on GeneralComp { + + [] messagePort.receive { + setverdict(pass); + } + +} + +testcase TC_Sem_160201_invoking_altsteps_002 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + + alt { + [] AltSet2(); + [] AltSet1(); //evaluation of sequential altstep activations + [] t_timer.timeout { + setverdict(fail); + } + } + +} + +control{ + + execute(TC_Sem_160201_invoking_altsteps_002()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_003.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_003.ttcn new file mode 100644 index 0000000..6d3de96 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_003.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:16.2.1, Ensure that altsteps are correctly handled for dynamically mapped ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Mycompport A is dynamically mapped +module Sem_160201_invoking_altsteps_003{ + + type port loopbackPort message { + inout integer + } + + type port IntegerOutputPortType message { + inout integer + } + +type component GeneralComp + { + + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } + +altstep AltStep1() runs on GeneralComp { + + [] MycomportA.receive { + } +} + + +// MyTestSystemInterface is the test system interface +testcase TC_Sem_160201_invoking_altsteps_003() runs on GeneralComp system MyTestSystemInterface { + timer tc_timer := 1.0; + map(mtc:MycomportA, system:messagePort); + + + MycomportA.send(2); + tc_timer.start; + unmap(mtc:MycomportA); + setverdict(pass); + + alt { + [] AltStep1(); + [] tc_timer.timeout { + setverdict(pass); + } + } +} +control{ + execute(TC_Sem_160201_invoking_altsteps_003()); +} +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_004.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_004.ttcn new file mode 100644 index 0000000..0038afd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/160201_invoking_altsteps/Sem_160201_invoking_altsteps_004.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:16.2.1, Ensure that altsteps are correctly handled for dynamically mapped ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Mycompport A is dynamically mapped +module Sem_160201_invoking_altsteps_004{ + + type port loopbackPort message { + inout integer + } + + type port IntegerOutputPortType message { + inout integer + } + +type component GeneralComp + { + timer tc_timer := 0.1; + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } + +altstep AltStep1() runs on GeneralComp { + + [] tc_timer.timeout { + MycomportA.clear; + setverdict(pass); + } +} + + +// MyTestSystemInterface is the test system interface +testcase TC_Sem_160201_invoking_altsteps_004() runs on GeneralComp system MyTestSystemInterface { + map(mtc:MycomportA, system:messagePort); + + + MycomportA.send(2); + tc_timer.start; + unmap(mtc:MycomportA); + + alt { + [] AltStep1(); + } +} +control{ + execute(TC_Sem_160201_invoking_altsteps_004()); +} +} \ No newline at end of file diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_001.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_001.ttcn new file mode 100644 index 0000000..e9be28d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_001.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ +module NegSem_1602_toplevel_001 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + /** + * @desc function returns always 1 + * @return always 1 + */ + external function xf_NegSem_1602_toplevel_001() return integer; + + + altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := xf_NegSem_1602_toplevel_001(); //attempt to use external function for variable initialization + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_001 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_001()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_002.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_002.ttcn new file mode 100644 index 0000000..ad164d4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_002.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_1602_toplevel_002 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + + altstep AltSet1() runs on GeneralComp { + var float v_LocalVar := rnd(); //calling rnd for local variable initialization + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_002 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_002()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_003.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_003.ttcn new file mode 100644 index 0000000..148d405 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_003.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_1602_toplevel_003 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test() return boolean { + setverdict(inconc); //setting verdict within a function for altstep variable initialization + return true; + } + + + altstep AltSet1() runs on GeneralComp { + var boolean v_LocalVar := f_test(); + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_003 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_003()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn new file mode 100644 index 0000000..83745a7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_004.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_1602_toplevel_004 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test(inout integer p_int) return integer { + //use of inout parameter within a function called at altstep variable initialization + return p_int+1; + } + + + altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar1 := 1; + var integer v_LocalVar2 := f_test(v_LocalVar1); // call of functions with inout params forbidden by 16.1.4 j) + 16.2.b) + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_004 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_004()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn new file mode 100644 index 0000000..8a0a275 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_005.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_1602_toplevel_005 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + + altstep AltSet1() { //altstep port operations without corresponding component reference + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_005 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_005()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn new file mode 100644 index 0000000..dfe169d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_006.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSem_1602_toplevel_006 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test(integer p_int) runs on GeneralComp return boolean { //use of a function with runs on clause from an altstep without a runs on clause + if (p_int==1) { return true; } + } + + + altstep AltSet1() { + var integer v_LocalVar1 := 1; + + [] f_test(v_LocalVar1) { + setverdict(pass); + } + + } + + testcase TC_NegSem_1602_toplevel_006 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSem_1602_toplevel_006()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn new file mode 100644 index 0000000..1235ed8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_007.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_008.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_008.ttcn new file mode 100644 index 0000000..89269e1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_008.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the create operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_008 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_008() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_008()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_009.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_009.ttcn new file mode 100644 index 0000000..875f2d1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_009.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the component.start operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_009 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_009() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_009()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_010.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_010.ttcn new file mode 100644 index 0000000..3ab4f7a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_010.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the component.stop operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_010 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_010() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_010()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_011.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_011.ttcn new file mode 100644 index 0000000..8ff5269 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_011.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the kill operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_011 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_011() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_011()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_012.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_012.ttcn new file mode 100644 index 0000000..db0432f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_012.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.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: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_012 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_012() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_012()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_013.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_013.ttcn new file mode 100644 index 0000000..798fe60 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_013.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the alive operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_013 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_013() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_014.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_014.ttcn new file mode 100644 index 0000000..d00658f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_014.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the done operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_014 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_014() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_014()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_015.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_015.ttcn new file mode 100644 index 0000000..fe76468 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_015.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the killed operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_015 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var GeneralComp v_ptc; + } + + 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 := f_test(v_ptc)) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_015() runs on GeneralComp system GeneralComp { + v_ptc := GeneralComp.create; + v_ptc.start(f_ptcBehaviour()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_015()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_016.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_016.ttcn new file mode 100644 index 0000000..08143ce --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_016.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the port.start operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_016 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.start; + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_016() 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_1602_toplevel_016()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_017.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_017.ttcn new file mode 100644 index 0000000..d9fef1f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_017.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the port.stop operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_013 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.stop; + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_013() 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_1602_toplevel_013()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_018.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_018.ttcn new file mode 100644 index 0000000..55b25f5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_018.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the halt operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_018 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.halt; + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_018() 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_1602_toplevel_018()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_019.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_019.ttcn new file mode 100644 index 0000000..6cbc74f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_019.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the clear operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_019 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.clear; + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_019() 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_1602_toplevel_019()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_020.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_020.ttcn new file mode 100644 index 0000000..2b55d05 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_020.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the checkstate operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_020 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_020() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_020()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_021.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_021.ttcn new file mode 100644 index 0000000..009f60f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_021.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the send operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_021 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_021() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_021()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_022.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_022.ttcn new file mode 100644 index 0000000..d8907fe --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_022.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the receive operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_022 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_022() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_022()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_023.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_023.ttcn new file mode 100644 index 0000000..e48f0a7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_023.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the trigger operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_023 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_023() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_023()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_024.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_024.ttcn new file mode 100644 index 0000000..e34a95b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_024.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the call operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_024 { + type port P message { + inout integer; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_024() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_024()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_025.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_025.ttcn new file mode 100644 index 0000000..4958be3 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_025.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the getcall operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_025 { + type port P message { + inout integer; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_025() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_025()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_026.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_026.ttcn new file mode 100644 index 0000000..d60f7e7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_026.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the reply operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_026 { + type port P message { + inout integer; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_026() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_026()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_027.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_027.ttcn new file mode 100644 index 0000000..2f9e351 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_027.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the getreply operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_027 { + type port P message { + inout integer; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_027() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_027()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_028.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_028.ttcn new file mode 100644 index 0000000..9b5fea7 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_028.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the raise operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_028 { + type port P message { + inout integer; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_028() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_028()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_029.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_029.ttcn new file mode 100644 index 0000000..c8984fd --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_029.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the catch operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_029 { + type port P message { + inout integer; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_029() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_029()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_030.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_030.ttcn new file mode 100644 index 0000000..0bae0f2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_030.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the check operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_030 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + p.check; + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_030() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_030()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_031.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_031.ttcn new file mode 100644 index 0000000..bf31083 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_031.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the connect operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_031 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_031() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_031()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_032.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_032.ttcn new file mode 100644 index 0000000..cb73792 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_032.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the disconnect operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_032 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_032() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_032()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_033.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_033.ttcn new file mode 100644 index 0000000..1725a53 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_033.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the map operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_033 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp system GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_033() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + disconnect(mtc:p, mtc:p); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_033()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_034.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_034.ttcn new file mode 100644 index 0000000..4322f47 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_034.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the unmap operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_034 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp system GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_034() 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(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_034()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_035.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_035.ttcn new file mode 100644 index 0000000..d8ecfeb --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_035.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the action operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_035 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_035() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_035()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_036.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_036.ttcn new file mode 100644 index 0000000..62bc7b1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_036.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the timer.start operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_036 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_036() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_036()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_037.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_037.ttcn new file mode 100644 index 0000000..242dfd0 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_037.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the timer.stop operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_037 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_037() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_037()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_038.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_038.ttcn new file mode 100644 index 0000000..08dece8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_038.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the timer.running operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_038 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_038() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_038()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_039.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_039.ttcn new file mode 100644 index 0000000..290f7c9 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_039.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the read operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_039 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_039() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_039()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_040.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_040.ttcn new file mode 100644 index 0000000..2d854f8 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_040.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the timeout operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_040 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_040() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + tc_tmr.start; + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_040()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_041.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_041.ttcn new file mode 100644 index 0000000..0a60714 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_041.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that a non-deterministic external function call cannot be used in default parameters of altsteps + ** @verdict pass reject + ** @configuration external_functions + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_041 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_1602_toplevel_001() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_1602_toplevel_001()) { return true; } + else { return true; } + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_041() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_041()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_042.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_042.ttcn new file mode 100644 index 0000000..4c4f8fc --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_042.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the predefined rnd function cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_042 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_042() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_042()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_043.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_043.ttcn new file mode 100644 index 0000000..90e81b5 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_043.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify a function called in a default parameter of an altstep cannot contain an assignment of a component variable + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_043 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_043() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_043()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_044.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_044.ttcn new file mode 100644 index 0000000..2f0865d --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_044.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify a function called in a default parameter of an altstep cannot contain a component variable used as an actual out parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_044 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_044() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_044()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_045.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_045.ttcn new file mode 100644 index 0000000..cee0a54 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_045.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify a function called in a default parameter of an altstep cannot contain a component variable used as an actual inout parameter + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_045 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_045() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_045()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_046.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_046.ttcn new file mode 100644 index 0000000..ebd9427 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_046.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the setverdict operation cannot be used in default parameter of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_046 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return boolean { + setverdict(pass); + return true; + } + + altstep a_rcv(boolean p_par := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_046() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_046()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_047.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_047.ttcn new file mode 100644 index 0000000..d5e3bd2 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_047.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the activate operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_047 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_047() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_047()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_048.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_048.ttcn new file mode 100644 index 0000000..49a1ab4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_048.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that the deactivate operation cannot be used in default parameters of altsteps + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_048 { + type port P message { + inout integer; + } + + 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 := f_test()) runs on GeneralComp { + [] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_048() runs on GeneralComp system GeneralComp { + activate(a_anyTimer()); + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_048()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_049.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_049.ttcn new file mode 100644 index 0000000..82cfef1 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_049.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that a function used in a default parameter of an altstep cannot contain fuzzy parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_049 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + function f_eval() return integer { + return 10; + } + + function f_test(@fuzzy integer p_par) return boolean { + if (p_par > 0) { + return true; + } else { + return false; + } + } + + altstep a_rcv(boolean p_par := f_test(v_int)) runs on GeneralComp { + [p_par] p.receive(integer:?) {} + } + + testcase TC_NegSem_1602_toplevel_049() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv() {} + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_049()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_050.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_050.ttcn new file mode 100644 index 0000000..f5073c4 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_050.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that a external function used in a default parameter of an altstep cannot contain fuzzy parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_050 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + var @fuzzy integer v_int := f_eval(); + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + external function @deterministic f_test(@fuzzy integer p_par) return boolean; + + altstep a_rcv(@fuzzy boolean p_par := f_test(v_int)) runs on GeneralComp { + [p_par] p.receive(integer:?) {} + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_1602_toplevel_050() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_050()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_051.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_051.ttcn new file mode 100644 index 0000000..debe7cf --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_051.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that a function used in a default parameter of an altstep cannot contain fuzzy variables + ** @verdict pass reject +***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_051 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return integer { + var @fuzzy integer v_int := f_eval(); + return v_int; + } + + + altstep a_rcv(integer p_par := f_test()) runs on GeneralComp { + [] p.receive(p_par) {} + } + + function f_eval() return integer { + return 1; + } + + testcase TC_NegSem_1602_toplevel_051() runs on GeneralComp system GeneralComp { + connect(mtc:p, mtc:p); + p.send(1); + alt { + [] a_rcv(); + [] any timer.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_1602_toplevel_051()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_052.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_052.ttcn new file mode 100644 index 0000000..4f98f7a --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSem_1602_toplevel_052.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:16.2, verify that a function used in a parameter of an altstep invoked from an alt branch cannot contain the setencode operation + ** @verdict pass reject +***************************************************/ + +// The following requirement is tested: +// Restriction b) +// The evaluation of formal parameters' default values and initialization of local definitions by calling value returning +// functions may have side effects. To avoid side effects that cause an inconsistency between the actual snapshot and the +// state of the component, and to prevent different results of subsequent evaluations on an unchanged snapshot, +// restrictions given in clause 16.1.4 shall apply to the formal parameters' default values and the initialization of local +// definitions. + +module NegSem_1602_toplevel_052 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return integer { + p.setencode(integer, "Binary"); + return 1; + } + + altstep a_rcv(integer p_par) runs on GeneralComp { + [] p.receive(p_par) {} + } + + testcase TC_NegSem_1602_toplevel_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_1602_toplevel_052()); + } +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn new file mode 100644 index 0000000..61ca58b --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/NegSyn_1602_toplevel_001.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass reject + ***************************************************/ +module NegSyn_1602_toplevel_001 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return p_integer+1; + } + + + altstep AltSet1() runs on GeneralComp { + + [] messagePort.receive { + setverdict(pass); + } + + var integer v_LocalVar := f_test(); //late definition of a local variable + + } + + testcase TC_NegSyn_1602_toplevel_001 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_NegSyn_1602_toplevel_001()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn new file mode 100644 index 0000000..bde96d6 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_001.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.2, Ensure that the IUT recognizes altstep definitions and correctly evaluates them + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1602_toplevel_001 { + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + type component GeneralComp { + port loopbackPort messagePort + } + + function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + + return p_integer+1; + } + + + altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + [] messagePort.receive { + setverdict(pass); + } + + } + + testcase TC_Sem_1602_toplevel_001 () runs on GeneralComp { + var MessageType v_testMessage; + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + + AltSet1(); + + } + + control{ + + execute(TC_Sem_1602_toplevel_001()); + + } + +} diff --git a/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn new file mode 100644 index 0000000..bd7013f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_002.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn new file mode 100644 index 0000000..de33159 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1602_altsteps/1602_toplevel/Sem_1602_toplevel_003.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn b/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn new file mode 100644 index 0000000..8099451 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.3, Ensure that the IUT properly evaluates invocation of testcases + ** @verdict pass reject + ***************************************************/ +module NegSem_1603_testcases_001 { + +type component GeneralComp { +} + + +testcase TC_NegSem_1603_testcases_001 () runs on GeneralComp { + execute(TC_fail()); //testcases can only be invoked from the control part + setverdict(pass); +} + +testcase TC_fail () runs on GeneralComp { + setverdict(fail); +} + + +control{ + + execute(TC_NegSem_1603_testcases_001()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn b/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn new file mode 100644 index 0000000..b5bf128 --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1603_testcases/NegSem_1603_testcases_002.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.3, Ensure that the IUT properly evaluates invocation of testcases + ** @verdict pass reject + ***************************************************/ +module NegSem_1603_testcases_002 { + +type component GeneralComp { +} + + +testcase TC_NegSem_1603_testcases_002 () runs on GeneralComp { + TC_fail(); //testcases can only be invoked from the control part + setverdict(pass); +} + +testcase TC_fail () runs on GeneralComp { + setverdict(fail); +} + + +control{ + + execute(TC_NegSem_1603_testcases_002()); + +} + +} diff --git a/core_language/16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn b/core_language/16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn new file mode 100644 index 0000000..22d7e3f --- /dev/null +++ b/core_language/16_functions_altsteps_testcases/1603_testcases/Syn_1603_testcases_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:16.3, Ensure that the IUT properly evaluates invocation of testcases with system clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Syn_1603_testcases_001 { + +type component GeneralComp { +} + +testcase TC_Syn_1603_testcases_001 () runs on GeneralComp system GeneralComp { + + setverdict(pass); +} + + +control{ + + execute(TC_Syn_1603_testcases_001()); + +} + +} diff --git a/core_language/18_overview_program_statements_and_operations/NOTES b/core_language/18_overview_program_statements_and_operations/NOTES new file mode 100644 index 0000000..738791c --- /dev/null +++ b/core_language/18_overview_program_statements_and_operations/NOTES @@ -0,0 +1 @@ +- NOTE: this chapter contains only one table describing where statements are allowed to be used. All these elements were already tested by the other chapters \ No newline at end of file diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_001.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_001.ttcn new file mode 100644 index 0000000..166bae5 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_001.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the IUT properly evaluates assignment statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1901_assignments_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_1901_assignments_001 () runs on GeneralComp system GeneralComp { + var integer v_i; + var integer v_j; + + v_j:=v_i; //assignment of unbounded expression + +} + +control{ + + execute(TC_NegSem_1901_assignments_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_002.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_002.ttcn new file mode 100644 index 0000000..ced750a --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the IUT properly evaluates assignment statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1901_assignments_002 { + +type component GeneralComp { +} + +testcase TC_NegSem_1901_assignments_002 () runs on GeneralComp system GeneralComp { + var integer v_i; + + v_i:=1.5; //assignment of incompatible expression + +} + +control{ + + execute(TC_NegSem_1901_assignments_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_003.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_003.ttcn new file mode 100644 index 0000000..b3aac01 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the IUT properly evaluates assignment statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1901_assignments_003 { + +type component GeneralComp { +} + +testcase TC_NegSem_1901_assignments_003 () runs on GeneralComp system GeneralComp { + var charstring v_i; + + v_i:=pattern "a??b"; //assignment of incompatible expression + +} + +control{ + + execute(TC_NegSem_1901_assignments_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_004.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_004.ttcn new file mode 100644 index 0000000..ff4e610 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that omit assignment to a record non-optional value is not allowed + ** @verdict pass reject + ***************************************************/ + +//Restriction c) +/*If the left-hand side of the assignment is a reference to a non-optional value object (i.e. a value definition, a mandatory field, a record/set of/array element, a union alternative, a value parameter), + * the right-hand side shall not be a reference to an omitted field or the omit symbol.*/ + +module NegSem_1901_assignments_004{ + +type component GeneralComp { +} + + type record Myrec{ + integer field1, + float field2 + }; + +testcase TC_NegSem_1901_assignments_004 () runs on GeneralComp system GeneralComp { + + var Myrec v_i; + + v_i:={11,omit}; //assignment not allowed + + setverdict(pass,v_i); + +} + + +control{ + + execute(TC_NegSem_1901_assignments_004()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_005.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_005.ttcn new file mode 100644 index 0000000..ee06bda --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_005.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that omit assignment to set of non-optional value is not allowed + ** @verdict pass reject + ***************************************************/ + + //Restriction c) +/*If the left-hand side of the assignment is a reference to a non-optional value object (i.e. a value definition, a mandatory field, a record/set of/array element, a union alternative, a value parameter), +the right-hand side shall not be a reference to an omitted field or the omit symbol.*/ + +module NegSem_1901_assignments_005{ + +type component GeneralComp { +} + + type set of integer Myset; + +testcase TC_NegSem_1901_assignments_005 () runs on GeneralComp system GeneralComp { + + var Myset v_i; + + v_i:={11,omit}; //assignment not allowed + + setverdict(pass,v_i); + +} + + +control{ + + execute(TC_NegSem_1901_assignments_005()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_006.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_006.ttcn new file mode 100644 index 0000000..f1d7a43 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSem_1901_assignments_006.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that omit assignment to an array is not allowed + ** @verdict pass reject + ***************************************************/ + +//Restriction c) +/*If the left-hand side of the assignment is a reference to a non-optional value object (i.e. a value definition, a mandatory field, a record/set of/array element, a union alternative, a value parameter), +the right-hand side shall not be a reference to an omitted field or the omit symbol.*/ + +module NegSem_1901_assignments_006{ + +type component GeneralComp { +} + + + +testcase TC_NegSem_1901_assignments_006 () runs on GeneralComp system GeneralComp { + + var integer v_i[2]; + + v_i:={11,omit}; //assignment not allowed + + setverdict(pass,v_i); + +} + + +control{ + + execute(TC_NegSem_1901_assignments_006()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/NegSyn_1901_assignments_001.ttcn b/core_language/19_basic_program_statements/1901_assignments/NegSyn_1901_assignments_001.ttcn new file mode 100644 index 0000000..f091c49 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/NegSyn_1901_assignments_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the IUT properly evaluates assignment statements + ** @verdict pass reject + ***************************************************/ +module NegSyn_1901_assignments_001 { + +type component GeneralComp { +} + +testcase TC_NegSyn_1901_assignments_001 () runs on GeneralComp system GeneralComp { + var integer v_i; + var integer v_j; + var integer v_k; + v_i:=1; + v_k:=(v_j:=v_i); //such sequential assignments are not allowed by the syntax + +} + + +control{ + + execute(TC_NegSyn_1901_assignments_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_001.ttcn b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_001.ttcn new file mode 100644 index 0000000..16a5d02 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the IUT properly evaluates assignment statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1901_assignments_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1901_assignments_001 () runs on GeneralComp system GeneralComp { + var integer v_i; + v_i:=3*(2+3*3); //validation of the order of evaluating assignment expressions + + if ( v_i==33 ) { + setverdict(pass); + } + else { + setverdict(fail); + } +} + + +control{ + + execute(TC_Sem_1901_assignments_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_002.ttcn b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_002.ttcn new file mode 100644 index 0000000..8775d18 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that uninitialized at the right-hand side of the assignment shall also become uninitialized at the left-hand side + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_1901_assignments_002{ + +type component GeneralComp { +} + + type record Myrec{ + integer field1, + float field2 + }; + +testcase TC_Sem_1901_assignments_002 () runs on GeneralComp system GeneralComp { + var Myrec v_i :={11,1.1}; //fully initialized variable + var Myrec v_j :={12}; //partly initialized variable + + v_i:=v_j; //assignment, v_i is now partly initialized variable + + if (isvalue(v_i)) { + setverdict(fail,v_i); + } + else { + setverdict(pass,v_i); + } +} + + +control{ + + execute(TC_Sem_1901_assignments_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_003.ttcn b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_003.ttcn new file mode 100644 index 0000000..0f87809 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that the right-hand side of the assignment of a structured value is evaulted correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_1901_assignments_003{ + +type component GeneralComp { +} + + type record Myrec{ + integer field1, + float field2 + }; + +testcase TC_Sem_1901_assignments_003 () runs on GeneralComp system GeneralComp { + var Myrec v_j :={11,1.1}; //fully initialized variable + var Myrec v_i; + + v_i:=v_j; //assignment + + if (match(v_i,v_j)) { + setverdict(pass,v_i); + } + else { + setverdict(fail,v_i); + } +} + + +control{ + + execute(TC_Sem_1901_assignments_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_004.ttcn b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_004.ttcn new file mode 100644 index 0000000..359e112 --- /dev/null +++ b/core_language/19_basic_program_statements/1901_assignments/Sem_1901_assignments_004.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.1, Ensure that Ensure that the right-hand side of the assignment of a structured value is evaulted correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction d) Using a reference to an omitted field in the right-hand side of the assignment has the same effect as using the omit keyword. + +module Sem_1901_assignments_004{ + +type component GeneralComp { +} + + type record Myrec{ + integer field1, + float field2 optional + }; + +type record Myrec_2{ + float field optional + }; + +testcase TC_Sem_1901_assignments_004 () runs on GeneralComp system GeneralComp { + var Myrec v_j :={11,omit}; + var Myrec_2 v_i; + + v_i.field:=v_j.field2; //assignment + + if (match(v_i.field,omit)) { + setverdict(pass,v_i); + } + else { + setverdict(fail,v_i); + } +} + + +control{ + + execute(TC_Sem_1901_assignments_004()); + +} + +} diff --git a/core_language/19_basic_program_statements/1902_if_else_statement/NegSyn_1902_if_else_statement_001.ttcn b/core_language/19_basic_program_statements/1902_if_else_statement/NegSyn_1902_if_else_statement_001.ttcn new file mode 100644 index 0000000..d4b369d --- /dev/null +++ b/core_language/19_basic_program_statements/1902_if_else_statement/NegSyn_1902_if_else_statement_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.2, If statement requires curly brackets for the body + ** @verdict pass reject + ***************************************************/ +module NegSyn_1902_if_else_statement_001 { + +type component GeneralComp { +} + +testcase TC_NegSyn_1902_if_else_statement_001 () runs on GeneralComp{ + + for(var integer v_i:=1; v_i<10; v_i:= j+1) { + } + + if(v_i==10) + setverdict(pass); // missing { } as defined by grammar rule 175 StatementBlock + +} + + +control{ + + execute(TC_NegSyn_1902_if_else_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_001.ttcn b/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_001.ttcn new file mode 100644 index 0000000..c674e99 --- /dev/null +++ b/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.2, Ensure that the IUT properly evaluates if-else statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1902_if_else_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1902_if_else_statement_001 () runs on GeneralComp{ + var integer v_i:=1; + var integer v_j:=2; + + if ( v_i==1 ) { //testing of nested if-else statement + if( v_j==1) { + setverdict(fail); + } + else { + setverdict(pass); + } + } + else { + setverdict(fail); + } +} + + +control{ + + execute(TC_Sem_1902_if_else_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_002.ttcn b/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_002.ttcn new file mode 100644 index 0000000..6b3e9af --- /dev/null +++ b/core_language/19_basic_program_statements/1902_if_else_statement/Sem_1902_if_else_statement_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.2, Ensure that the IUT properly evaluates if-else statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1902_if_else_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1902_if_else_statement_002 () runs on GeneralComp{ + var integer v_i:=1; + + if ( match(v_i, 2) ) { + setverdict(fail); + } + else if(match(v_i, 1)) { setverdict(pass) }; //else if shorthand notation +} + + +control{ + + execute(TC_Sem_1902_if_else_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_001.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_001.ttcn new file mode 100644 index 0000000..09d4653 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_001.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:19.3, Verify that two branches of the select-case statement cannot match the same value (simple case) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b: +// When all templateInstances of all branches can be statically evaluated in compile time to specific values or +// value ranges no two branches shall match the same value + +module NegSem_190301_select_case_statement_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_190301_select_case_statement_001 () runs on GeneralComp{ + var integer v_i := 2; + + select (v_i) { + case(1) { + setverdict(fail); + } + case(2) { + setverdict(pass); + } + case(2) { + setverdict(fail); + } + case else { + setverdict(fail); + } + } +} + + +control{ + + execute(TC_NegSem_190301_select_case_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_002.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_002.ttcn new file mode 100644 index 0000000..8deec51 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/NegSem_190301_select_case_statement_002.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:19.3, Verify that two branches of the select-case statement cannot match the same value (list case) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Restriction b: +// When all templateInstances of all branches can be statically evaluated in compile time to specific values or +// value ranges no two branches shall match the same value + +module NegSem_190301_select_case_statement_002 { + +type component GeneralComp { +} + +testcase TC_NegSem_190301_select_case_statement_002 () runs on GeneralComp{ + var integer v_i := 2; + + select (v_i) { + case(1) { + setverdict(fail); + } + case(0, 2) { + setverdict(pass); + } + case(4, 5, 2) { + setverdict(fail); + } + case else { + setverdict(fail); + } + } +} + + +control{ + + execute(TC_NegSem_190301_select_case_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_001.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_001.ttcn new file mode 100644 index 0000000..1e79b7c --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 409 + ** @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_001 { + +type component GeneralComp { +} + +testcase TC_Sem_190301_select_case_statement_001 () runs on GeneralComp{ + var integer v_i:=2; + + select (v_i) { + case(1) { + setverdict(fail); + } + case(2) { + setverdict(pass); + } + case(3) { + setverdict(fail); + } + case else { + setverdict(fail); + } + } +} + + +control{ + + execute(TC_Sem_190301_select_case_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn new file mode 100644 index 0000000..652b1aa --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 409 + ** @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_002 { + +type component GeneralComp { +} + +testcase TC_Sem_190301_select_case_statement_002 () runs on GeneralComp{ + var integer v_i:=5; + + select (v_i) { + case(1) { + setverdict(fail); + } + case(2) { + setverdict(fail); + } + case(3) { + setverdict(fail); + } + case else { + setverdict(pass); + } + } +} + + +control{ + + execute(TC_Sem_190301_select_case_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn new file mode 100644 index 0000000..ff252de --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @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_003 { + +type component GeneralComp { +} + +testcase TC_Sem_190301_select_case_statement_003 () runs on GeneralComp{ + var integer v_i:=5; + + setverdict(pass); + select (v_i) { + case(1) { + setverdict(fail); + } + case(2) { + setverdict(fail); + } + case(3) { + setverdict(fail); + } + } +} + + +control{ + + execute(TC_Sem_190301_select_case_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn new file mode 100644 index 0000000..23d00a3 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 409 + ** @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_004 { + +type component GeneralComp { +} + +testcase TC_Sem_190301_select_case_statement_004 () runs on GeneralComp{ + var integer v_i:=2; + + select (v_i) { + case(1) { + setverdict(fail); + } + case(2) { + setverdict(pass); + } + case(3) { + setverdict(fail); + } + case else { + setverdict(fail); + } + } +} + + +control{ + + execute(TC_Sem_190301_select_case_statement_004()); + +} + +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn new file mode 100644 index 0000000..4169141 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_005.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn new file mode 100644 index 0000000..83f0e11 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 521 + ** @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/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn new file mode 100644 index 0000000..955349d --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that header part of select-union statements cannot contain anything else than union instances + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// In the header part of the select union statement a template instance of union +// type shall be given. + +module NegSem_190302_select_union_statement_001 { + + type component GeneralComp { + } + + type record R { + integer intOption optional, + charstring strOption optional, + boolean boolOption optional + } + + testcase TC_NegSem_190302_select_union_statement_001() runs on GeneralComp { + var R v_rec := { intOption := omit, strOption := "abc", boolOption := omit } + select union (v_rec) { + case (intOption) { + setverdict(pass); + } case (strOption) { + setverdict(pass); + } case (boolOption) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_001()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn new file mode 100644 index 0000000..b595933 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that uninitialized value cannot be used in select union header + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// [The TemplateInstance in the header of the select union statement] shall be +// at least partially initialized. + +module NegSem_190302_select_union_statement_002 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + record { + integer field1, + integer field2 + } recOption + } + + type record R { + U field1, + integer field2 + } + + testcase TC_NegSem_190302_select_union_statement_002() runs on GeneralComp { + var R v_rec; + v_rec.field2 := 3; + select union (v_rec.field1) { + case (intOption) { + setverdict(fail); + } case (strOption) { + setverdict(fail); + } case (recOption) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_002()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn new file mode 100644 index 0000000..06cdbd5 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that unknown alternatives cannot be use in case statements + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Every Identifier in a case of the select union statement shall be an identifier +// of an alternative of the union type of the template instance given to the +// statement's header. + +module NegSem_190302_select_union_statement_003 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + record { + integer field1, + integer field2 + } recOption + } + + testcase TC_NegSem_190302_select_union_statement_003() runs on GeneralComp { + var U v_un := { intOption := 5 } + select union (v_un) { + case (intOption) { + setverdict(pass); + } case (strOption) { + setverdict(fail); + } case (recOption) { + setverdict(fail); + } case (boolOption) { + setverdict(fail); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_003()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn new file mode 100644 index 0000000..6a7163b --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that the same alternative cannot be used in two case statements (simple case) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// No two cases in a select union statement shall have the same case Identifier. + +module NegSem_190302_select_union_statement_004 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + record { + integer field1, + integer field2 + } recOption + } + + testcase TC_NegSem_190302_select_union_statement_004() runs on GeneralComp { + var U v_un := { recOption := { field1 := 1, field2 := 2 } } + select union (v_un) { + case (intOption) { + setverdict(pass); + } case (strOption) { + setverdict(fail); + } case (recOption) { + setverdict(fail); + } case (intOption) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_004()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn new file mode 100644 index 0000000..b3b5911 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that the same alternative cannot be used in two case statements (list item) + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// No two cases in a select union statement shall have the same case Identifier. + +module NegSem_190302_select_union_statement_005 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + record { + integer field1, + integer field2 + } recOption + } + + testcase TC_NegSem_190302_select_union_statement_005() runs on GeneralComp { + var U v_un := { intOption := 10 } + select union (v_un) { + case (intOption, strOption) { + setverdict(pass); + } case (recOption, intOption) { + setverdict(fail); + } + } + } + + control { + execute(TC_NegSem_190302_select_union_statement_005()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn new file mode 100644 index 0000000..b4270b1 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_006.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 521 + ** @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 reject + ***************************************************/ + +// 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()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn new file mode 100644 index 0000000..c080598 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @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: +// The statement contains a header part and zero or more branches. + +module Sem_190302_select_union_statement_001 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + boolean boolOption + } + + testcase TC_Sem_190302_select_union_statement_001() runs on GeneralComp { + var U v_un := { strOption := "abc" } + select union (v_un) { + case (intOption) { + setverdict(fail); + } case (strOption) { + setverdict(pass); + } case (boolOption) { + setverdict(fail); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_001()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn new file mode 100644 index 0000000..21e380d --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that it is possible to use comma separated list of alternatives in case branches + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Each branch shall start with the case keyword followed by one or more identifiers +// of the alternatives (fields) of the union type (a list branch) or the else keyword +// (an else branch) and a statement block. + +module Sem_190302_select_union_statement_002 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + boolean boolOption, + bitstring bitOption + } + + testcase TC_Sem_190302_select_union_statement_002() runs on GeneralComp { + var U v_un := { strOption := "abc" } + select union (v_un) { + case (intOption, boolOption, strOption) { + setverdict(pass); + } case (bitOption) { + setverdict(fail); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_002()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn new file mode 100644 index 0000000..85a23d5 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that it is possible to use an else branches + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Each branch shall start with the case keyword followed by one or more identifiers +// of the alternatives (fields) of the union type (a list branch) or the else keyword +// (an else branch) and a statement block. + +module Sem_190302_select_union_statement_003 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + boolean boolOption, + bitstring bitOption + } + + testcase TC_Sem_190302_select_union_statement_003() runs on GeneralComp { + var U v_un := { strOption := "abc" } + select union (v_un) { + case (strOption) { + setverdict(pass); + } case (bitOption) { + setverdict(fail); + } case else { + setverdict(fail); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_003()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn new file mode 100644 index 0000000..319599f --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that else branch is executed if no case is defined for the selected alternative + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If no case exists for the chosen alternative, the StatementBlock of the else +// branch, if it is present, is executed. + +module Sem_190302_select_union_statement_004 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + boolean boolOption, + bitstring bitOption + } + + testcase TC_Sem_190302_select_union_statement_004() runs on GeneralComp { + var U v_un := { strOption := "abc" } + select union (v_un) { + case (intOption) { + setverdict(fail); + } case (bitOption) { + setverdict(fail); + } case else { + setverdict(pass); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_004()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn new file mode 100644 index 0000000..921e945 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that no branch is executed if the's no suitable case branch + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Otherwise [if no case exists for the chosen alternative and the else branch +// is not present], the select union statement has no effect. + +module Sem_190302_select_union_statement_005 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + boolean boolOption, + bitstring bitOption + } + + testcase TC_Sem_190302_select_union_statement_005() runs on GeneralComp { + var U v_un := { strOption := "abc" } + select union (v_un) { + case (intOption) { + setverdict(pass); + } case (bitOption) { + setverdict(fail); + } + } + setverdict(pass); + } + + control { + execute(TC_Sem_190302_select_union_statement_005()); + } +} diff --git a/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn new file mode 100644 index 0000000..f50c711 --- /dev/null +++ b/core_language/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.3.2, verify that partially initialized value can be used in select union header + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// [The TemplateInstance in the header of the select union statement] shall be +// at least partially initialized. + +module Sem_190302_select_union_statement_006 { + + type component GeneralComp { + } + + type union U { + integer intOption, + charstring strOption, + record { + integer field1, + integer field2 + } recOption + } + + testcase TC_Sem_190302_select_union_statement_006() runs on GeneralComp { + var U v_un := { recOption := { field1 := 1, field2 := - } } + select union (v_un) { + case (intOption) { + setverdict(fail); + } case (strOption) { + setverdict(fail); + } case (recOption) { + setverdict(pass); + } + } + } + + control { + execute(TC_Sem_190302_select_union_statement_006()); + } +} diff --git a/core_language/19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn b/core_language/19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn new file mode 100644 index 0000000..3a592b0 --- /dev/null +++ b/core_language/19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.4, Ensure that the IUT properly evaluates for statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1904_for_statement_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_1904_for_statement_001 () runs on GeneralComp{ + + for(var integer v_i:=1; v_i<10; v_i:= j+1) { + } + + if(v_i==10) { setverdict(pass); } //v_i is not accessible from outside the loop + +} + + +control{ + + execute(TC_NegSem_1904_for_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn new file mode 100644 index 0000000..6bc58df --- /dev/null +++ b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.4, Ensure that the IUT properly evaluates for statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1904_for_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1904_for_statement_001 () runs on GeneralComp{ + var integer v_i; + var integer v_j:=1; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + v_j:=v_j+1; + } + + if( match(v_i, 10) and match(v_j, 10) ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1904_for_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn new file mode 100644 index 0000000..03079e4 --- /dev/null +++ b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.4, Ensure that the IUT properly evaluates for statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1904_for_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1904_for_statement_002 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + if(v_i==5) { break; } + } + + if(v_i==5) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1904_for_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_003.ttcn b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_003.ttcn new file mode 100644 index 0000000..e59947e --- /dev/null +++ b/core_language/19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_003.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.4, Ensure that the IUT properly evaluates for statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1904_for_statement_003 { + +type component GeneralComp { +} + +testcase TC_Sem_1904_for_statement_003 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + for(var integer v_j:=1; v_j<10; v_j:= v_j+1) { + if(v_i==5) { break; } //the break statement must only exit the inner loop + } + } + + if(v_i==10) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1904_for_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1905_while_statement/NegSem_1905_while_statement_001.ttcn b/core_language/19_basic_program_statements/1905_while_statement/NegSem_1905_while_statement_001.ttcn new file mode 100644 index 0000000..41681fe --- /dev/null +++ b/core_language/19_basic_program_statements/1905_while_statement/NegSem_1905_while_statement_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.5, Ensure that the IUT properly evaluates while statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1905_while_statement_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_1905_while_statement_001 () runs on GeneralComp{ + var integer v_i:=1; + + while(v_i<10) { + var integer v_j:=1; + v_i:=v_i+1; + } + + if(v_j==1) { setverdict(pass); } //v_j is not accessible from outside the loop + +} + + +control{ + + execute(TC_NegSem_1905_while_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_001.ttcn b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_001.ttcn new file mode 100644 index 0000000..6dafd9b --- /dev/null +++ b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.5, Ensure that the IUT properly evaluates while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1905_while_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1905_while_statement_001 () runs on GeneralComp{ + var integer v_j:=1; + + while(v_j<10) { + v_j:=v_j+1; + } + + if( v_j==10 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1905_while_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_002.ttcn b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_002.ttcn new file mode 100644 index 0000000..e4babef --- /dev/null +++ b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.5, Ensure that the IUT properly evaluates while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1905_while_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1905_while_statement_002 () runs on GeneralComp{ + var integer v_i:=1; + + while(v_i<10) { + if(v_i==5) { break; } + v_i:=v_i+1; + } + + if(v_i==5) { setverdict(pass); } + else { setverdict(fail); } + +} + + +control{ + + execute(TC_Sem_1905_while_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_003.ttcn b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_003.ttcn new file mode 100644 index 0000000..64cd864 --- /dev/null +++ b/core_language/19_basic_program_statements/1905_while_statement/Sem_1905_while_statement_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.5, Ensure that the IUT properly evaluates while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1905_while_statement_003 { + +type component GeneralComp { +} + +testcase TC_Sem_1905_while_statement_003 () runs on GeneralComp{ + var integer v_i:=1; + var integer v_j:=1; + + while(v_i<10) { + while(v_j<10) { + if(v_i==5) { break; } + v_j:=v_j+1; + } + v_i:=v_i+1; + } + + if(v_i==10) { setverdict(pass); } + else { setverdict(fail); } + +} + + +control{ + + execute(TC_Sem_1905_while_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1906_do_while_statement/NegSem_1906_do_while_statement_001.ttcn b/core_language/19_basic_program_statements/1906_do_while_statement/NegSem_1906_do_while_statement_001.ttcn new file mode 100644 index 0000000..108db69 --- /dev/null +++ b/core_language/19_basic_program_statements/1906_do_while_statement/NegSem_1906_do_while_statement_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.6, Ensure that the IUT properly evaluates do-while statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1906_do_while_statement_001 { + +type component GeneralComp { +} + +testcase TC_NegSem_1906_do_while_statement_001 () runs on GeneralComp{ + var integer v_i:=1; + + do { + var integer v_j:=1; + v_i:=v_i+1; + } while(v_i<10); + + if(v_j==1) { setverdict(pass); } //v_j is not accessible from outside the loop + +} + + +control{ + + execute(TC_NegSem_1906_do_while_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_001.ttcn b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_001.ttcn new file mode 100644 index 0000000..a09612f --- /dev/null +++ b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.6, Ensure that the IUT properly evaluates do-while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1906_do_while_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1906_do_while_statement_001 () runs on GeneralComp{ + var integer v_j:=1; + + do { + v_j:=v_j+1; + } while(v_j<10); + + if( v_j==10 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1906_do_while_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_002.ttcn b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_002.ttcn new file mode 100644 index 0000000..b8c7250 --- /dev/null +++ b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_002.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.6, Ensure that the IUT properly evaluates do-while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1906_do_while_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1906_do_while_statement_002 () runs on GeneralComp{ + var integer v_i:=1; + + do { + if(v_i==5) { break; } + v_i:=v_i+1; + } while(v_i<10); + + if(v_i==5) { setverdict(pass); } + else { setverdict(fail); } + +} + + +control{ + + execute(TC_Sem_1906_do_while_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_003.ttcn b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_003.ttcn new file mode 100644 index 0000000..00b50a2 --- /dev/null +++ b/core_language/19_basic_program_statements/1906_do_while_statement/Sem_1906_do_while_statement_003.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.6, Ensure that the IUT properly evaluates do-while statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1906_do_while_statement_003 { + +type component GeneralComp { +} + +testcase TC_Sem_1906_do_while_statement_003 () runs on GeneralComp{ + var integer v_i:=1; + var integer v_j:=1; + + do { + do { + if(v_i==5) { break; } + v_j:=v_j+1; + } while(v_j<10); + v_i:=v_i+1; + } while(v_i<10); + + if(v_i==10) { setverdict(pass); } + else { setverdict(fail); } + +} + + +control{ + + execute(TC_Sem_1906_do_while_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1907_label_statement/NegSem_1907_label_statement_001.ttcn b/core_language/19_basic_program_statements/1907_label_statement/NegSem_1907_label_statement_001.ttcn new file mode 100644 index 0000000..9e2e2ca --- /dev/null +++ b/core_language/19_basic_program_statements/1907_label_statement/NegSem_1907_label_statement_001.ttcn @@ -0,0 +1,71 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.7, Ensure that the IUT correctly handles label naming uniqueness. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1907_label_statement_001 { + + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + label L1; + return p_integer+1; +} + + +altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + [] messagePort.receive { + label L_A; + setverdict(pass); + label L_B; + } + +} + +testcase TC_NegSem_1907_label_statement_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + label L1; + + alt { + [] AltSet1(); + [] messagePort.receive { + label L2; + setverdict(pass); + } + [] t_timer.timeout { + label L3; + } + } + label L1; //conflicting label names +} + +control{ + execute(TC_NegSem_1907_label_statement_001()); +} + +} diff --git a/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_001.ttcn b/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_001.ttcn new file mode 100644 index 0000000..acd0c50 --- /dev/null +++ b/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_001.ttcn @@ -0,0 +1,72 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.7, Ensure that the IUT correctly handles label syntax. + ** @verdict pass reject + *****************************************************************/ + +module NegSyn_1907_label_statement_001 { + + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + label L1; + return p_integer+1; +} + + +altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + [] messagePort.receive { + label L_A; + setverdict(pass); + label L_B; + } + +} + +testcase TC_NegSyn_1907_label_statement_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + label L1; + + alt { + [] AltSet1(); + label L_wrong; //wrong label on the alt toplevel + [] messagePort.receive { + label L2; + setverdict(pass); + } + [] t_timer.timeout { + label L3; + } + } + label L4; +} + +control{ + execute(TC_NegSyn_1907_label_statement_001()); +} + +} diff --git a/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_002.ttcn b/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_002.ttcn new file mode 100644 index 0000000..cb2b287 --- /dev/null +++ b/core_language/19_basic_program_statements/1907_label_statement/NegSyn_1907_label_statement_002.ttcn @@ -0,0 +1,73 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.7, Ensure that the IUT correctly handles label syntax. + ** @verdict pass reject + *****************************************************************/ + +module NegSyn_1907_label_statement_002 { + + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + label L1; + return p_integer+1; +} + + +altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + label L_wrong; //wrong label on the altstep toplevel + + [] messagePort.receive { + label L_A; + setverdict(pass); + label L_B; + } + +} + +testcase TC_NegSyn_1907_label_statement_002 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + label L1; + + alt { + [] AltSet1(); + [] messagePort.receive { + label L2; + setverdict(pass); + } + [] t_timer.timeout { + label L3; + } + } + label L4; +} + +control{ + execute(TC_NegSyn_1907_label_statement_002()); +} + +} diff --git a/core_language/19_basic_program_statements/1907_label_statement/Syn_1907_label_statement_001.ttcn b/core_language/19_basic_program_statements/1907_label_statement/Syn_1907_label_statement_001.ttcn new file mode 100644 index 0000000..b8395e6 --- /dev/null +++ b/core_language/19_basic_program_statements/1907_label_statement/Syn_1907_label_statement_001.ttcn @@ -0,0 +1,71 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.7, Ensure that the IUT correctly handles label syntax. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_1907_label_statement_001 { + + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + label L1; + return p_integer+1; +} + + +altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + [] messagePort.receive { + label L_A; + setverdict(pass); + label L_B; + } + +} + +testcase TC_Syn_1907_label_statement_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + label L1; + + alt { + [] AltSet1(); + [] messagePort.receive { + label L2; + setverdict(pass); + } + [] t_timer.timeout { + label L3; + } + } + label L4; +} + +control{ + execute(TC_Syn_1907_label_statement_001()); +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_001.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_001.ttcn new file mode 100644 index 0000000..c37b35b --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_001.ttcn @@ -0,0 +1,73 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_1908_goto_statement_001 { + + + type record MessageType { + integer field1, + charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +function f_test ( integer p_integer := 0 ) runs on GeneralComp return integer { + label L1; + return p_integer+1; +} + + +altstep AltSet1() runs on GeneralComp { + var integer v_LocalVar := f_test(); // local variable + + [] messagePort.receive { + label L_A; + label L_B; + } + +} + +testcase TC_NegSem_1908_goto_statement_001 () runs on GeneralComp { + var MessageType v_testMessage; + timer t_timer; + + v_testMessage:= { + field1 := 1, + field2 := "test string" + } + + messagePort.send(v_testMessage); + t_timer.start( 1.0 ); + label L1; + goto L2; //cannot jump into alt statements + + alt { + [] AltSet1(); + [] messagePort.receive { + label L2; + setverdict(pass); + } + [] t_timer.timeout { + label L2; + } + } + label L3; + setverdict(pass); + +} + +control{ + execute(TC_NegSem_1908_goto_statement_001()); +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_002.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_002.ttcn new file mode 100644 index 0000000..950bde2 --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_002.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass reject + *****************************************************************/ +module NegSem_1908_goto_statement_002 { + +type component GeneralComp { +} + +testcase TC_NegSem_1908_goto_statement_002 () runs on GeneralComp{ + var integer v_i; + goto L1; //forbidden jump into a loop + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + label L1; + if(v_i==5) { break; } + } + +} + + +control{ + + execute(TC_NegSem_1908_goto_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_003.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_003.ttcn new file mode 100644 index 0000000..3ec7457 --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/NegSem_1908_goto_statement_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass reject + *****************************************************************/ +module NegSem_1908_goto_statement_003 { + +type component GeneralComp { +} + +testcase TC_NegSem_1908_goto_statement_003 () runs on GeneralComp{ + var integer v_i:=1; + goto L1; //forbidden jump into a loop + + if(v_i==2) { + label L1; + v_i:=1; + } + else { + v_i:=2; + goto L1; //forbidden jump into an if-else statement + } + +} + +control{ + + execute(TC_NegSem_1908_goto_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_001.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_001.ttcn new file mode 100644 index 0000000..53f2693 --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1908_goto_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1908_goto_statement_001 () runs on GeneralComp{ + var integer v_i:=1; + goto L1; //jumping forward + v_i:=2; + + label L1; + + if( v_i==1 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1908_goto_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_002.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_002.ttcn new file mode 100644 index 0000000..7e1bd03 --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1908_goto_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1908_goto_statement_002 () runs on GeneralComp{ + var integer v_i:=1; + + label L1; + v_i:=v_i+1; + + if(v_i==2) { goto L1; } //jumping backward + + if( v_i==3 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1908_goto_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_003.ttcn b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_003.ttcn new file mode 100644 index 0000000..877948b --- /dev/null +++ b/core_language/19_basic_program_statements/1908_goto_statement/Sem_1908_goto_statement_003.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.8, Ensure that the IUT correctly handles goto statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1908_goto_statement_003 { + +type component GeneralComp { +} + +testcase TC_Sem_1908_goto_statement_003 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + if(v_i==5) { goto L1; } //jumping out of the loop + } + + label L1; + + if( v_i==5 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1908_goto_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_001.ttcn b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_001.ttcn new file mode 100644 index 0000000..9b13b53 --- /dev/null +++ b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.9, Ensure that the IUT correctly handles stop statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1909_stop_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1909_stop_statement_001 () runs on GeneralComp{ + setverdict(pass); + stop; + setverdict(fail); + +} + + +control{ + + execute(TC_Sem_1909_stop_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_002.ttcn b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_002.ttcn new file mode 100644 index 0000000..87e2c86 --- /dev/null +++ b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_002.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.9, Ensure that the IUT correctly handles stop statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1909_stop_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1909_stop_statement_002 () runs on GeneralComp{ + setverdict(pass); +} + +testcase TC_not_to_be_executed () runs on GeneralComp{ + setverdict(fail); +} + + +control{ + execute(TC_Sem_1909_stop_statement_002()); + stop; + execute(TC_not_to_be_executed()); +} + +} diff --git a/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_003.ttcn b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_003.ttcn new file mode 100644 index 0000000..45387a1 --- /dev/null +++ b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.9, stop statement in a function called from a PTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// When invoked in a test case, altstep or function that are executed on a test +// component, it terminates the relevant test component. + +module Sem_1909_stop_statement_003 { + + type component GeneralComp { + } + + function f_stop() runs on GeneralComp { + setverdict(pass); + stop; + } + + function f_ptc() runs on GeneralComp { + f_stop(); + setverdict(fail); + } + + testcase TC_Sem_1909_stop_statement_003 () runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f_ptc()); + v_ptc.done; + } + + + control { + execute(TC_Sem_1909_stop_statement_003()); + } + +} diff --git a/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_004.ttcn b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_004.ttcn new file mode 100644 index 0000000..3e21f17 --- /dev/null +++ b/core_language/19_basic_program_statements/1909_stop_statement/Sem_1909_stop_statement_004.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:19.9, stop statement in a function called from a PTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// When invoked in a test case, altstep or function that are executed on a test +// component, it terminates the relevant test component. + +module Sem_1909_stop_statement_004 { + + type component GeneralComp { + } + + testcase TC_Sem_1909_stop_statement_004 () runs on GeneralComp { + setverdict(pass); + } + + testcase TC_not_to_be_executed () runs on GeneralComp{ + setverdict(fail); + } + + function f_stop() { + execute(TC_Sem_1909_stop_statement_004()); + stop; + } + + control { + f_stop(); + execute(TC_not_to_be_executed()); + } + +} diff --git a/core_language/19_basic_program_statements/1910_return_statement/NOTES b/core_language/19_basic_program_statements/1910_return_statement/NOTES new file mode 100644 index 0000000..55cb17d --- /dev/null +++ b/core_language/19_basic_program_statements/1910_return_statement/NOTES @@ -0,0 +1,2 @@ +The functionality of the RETURN statement has been extensively tested in other sections. +This section contains only special cases which have not been tested elsewhere. \ No newline at end of file diff --git a/core_language/19_basic_program_statements/1910_return_statement/NegSem_1910_return_statement_001.ttcn b/core_language/19_basic_program_statements/1910_return_statement/NegSem_1910_return_statement_001.ttcn new file mode 100644 index 0000000..2c0bc12 --- /dev/null +++ b/core_language/19_basic_program_statements/1910_return_statement/NegSem_1910_return_statement_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.10, Ensure that the IUT correctly handles return statements. + ** @verdict pass reject + *****************************************************************/ +module NegSem_1910_return_statement_001 { + + type component GeneralComp { + } + + + testcase TC_NegSem_1910_return_statement_001 () runs on GeneralComp{ + setverdict(pass); + return 0; //testcase cannot have a return statement + + } + + + control{ + + execute(TC_NegSem_1910_return_statement_001()); + + } + +} diff --git a/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_001.ttcn b/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_001.ttcn new file mode 100644 index 0000000..19ce3f6 --- /dev/null +++ b/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:19.10, Ensure that the IUT correctly handles return statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1910_return_statement_001 { + + type component GeneralComp { + } + + function f_verdict_return() runs on GeneralComp return verdicttype { + setverdict(pass); + return getverdict; + } + + + testcase TC_Sem_1910_return_statement_001 () runs on GeneralComp { + if (f_verdict_return() != pass) { + setverdict(fail, "function return value wrong"); + } + if (getverdict != pass) { + setverdict(fail, "component verdict not set"); + } + + } + + + control{ + + execute(TC_Sem_1910_return_statement_001()); + + } + +} diff --git a/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_002.ttcn b/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_002.ttcn new file mode 100644 index 0000000..8f22707 --- /dev/null +++ b/core_language/19_basic_program_statements/1910_return_statement/Sem_1910_return_statement_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:19.10, Ensure that the IUT correctly handles return statements. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_1910_return_statement_002 { + + type component GeneralComp { + } + + function f_template_return() return template charstring { + setverdict(pass); + return ?; + } + + + testcase TC_Sem_1910_return_statement_002 () runs on GeneralComp { + if ( match("A",f_template_return() ) ) { + setverdict(pass, "function return value correct"); + } + else { + setverdict(fail, "function return value wrong"); + } + + } + + + control{ + + execute(TC_Sem_1910_return_statement_002()); + + } + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/NegSem_1911_log_statement_001.ttcn b/core_language/19_basic_program_statements/1911_log_statement/NegSem_1911_log_statement_001.ttcn new file mode 100644 index 0000000..17dd83d --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/NegSem_1911_log_statement_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass reject + ***************************************************/ +module NegSem_1911_log_statement_001 { + +type component GeneralComp { +} + +function f_no_return(integer p_arg) { + var integer v_f; + v_f:=p_arg; +} + +testcase TC_NegSem_1911_log_statement_001 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + log("Function without return value: ", f_no_return(v_i) ); //not allowed to use function without return value + } + +} + + +control{ + + execute(TC_NegSem_1911_log_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_001.ttcn b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_001.ttcn new file mode 100644 index 0000000..bb0e49c --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1911_log_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1911_log_statement_001 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + log("Actual value of v_i: ", v_i); //actual value of v_i is expected, log output is not validated by the script + } + + setverdict(pass) + +} + + +control{ + + execute(TC_Sem_1911_log_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_002.ttcn b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_002.ttcn new file mode 100644 index 0000000..3914094 --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1911_log_statement_002 { + +type component GeneralComp { +} + +testcase TC_Sem_1911_log_statement_002 () runs on GeneralComp{ + var integer v_i; + + log("Actual value of v_i: ", v_i); //expected to print "UNINITIALIZED" for the unbounded v_i value, log output is not validated by the script + + setverdict(pass) + +} + + +control{ + + execute(TC_Sem_1911_log_statement_002()); + +} + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_003.ttcn b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_003.ttcn new file mode 100644 index 0000000..26c639c --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_003.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1911_log_statement_003 { + +type component GeneralComp { +} + +testcase TC_Sem_1911_log_statement_003 () runs on GeneralComp{ + const integer c_i:=1; + + log("Actual value of c_i: ", c_i); //expected to print 1 for c_i constant value, log output is not validated by the script + + setverdict(pass) + +} + + +control{ + + execute(TC_Sem_1911_log_statement_003()); + +} + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn new file mode 100644 index 0000000..f8f25f2 --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_004.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1911_log_statement_004 { + +type component GeneralComp { +} + +function f_square(integer p_arg) return integer { + return p_arg*p_arg; +} + +testcase TC_Sem_1911_log_statement_004 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + log("Actual value of v_i squared: ", f_square(v_i) ); //actual value of v_i squared is expected, log output is not validated by the script + } + + setverdict(pass) + +} + + +control{ + + execute(TC_Sem_1911_log_statement_004()); + +} + +} diff --git a/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn new file mode 100644 index 0000000..d198a30 --- /dev/null +++ b/core_language/19_basic_program_statements/1911_log_statement/Sem_1911_log_statement_005.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.11, Ensure that the IUT properly evaluates log statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1911_log_statement_005 { + +type component GeneralComp { +} + +testcase TC_Sem_1911_log_statement_005 () runs on GeneralComp{ + var integer v_i; + timer t_1; + + t_1.start(1.0); + log("Actual timer state: ", t_1); //running state is expected, log output is not validated by the script + log("Is timer running? ", t_1.running); //true is expected, log output is not validated by the script + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + log("Actual timer value: ", t_1.read); //actual timer value is expected, log output is not validated by the script + } + + t_1.stop; + log("Actual timer state: ", t_1); //stopped state is expected, log output is not validated by the script + log("Is timer running? ", t_1.running); //false is expected, log output is not validated by the script + + setverdict(pass) + +} + + +control{ + + execute(TC_Sem_1911_log_statement_005()); + +} + +} diff --git a/core_language/19_basic_program_statements/1912_break_statement/NOTES b/core_language/19_basic_program_statements/1912_break_statement/NOTES new file mode 100644 index 0000000..e32353a --- /dev/null +++ b/core_language/19_basic_program_statements/1912_break_statement/NOTES @@ -0,0 +1,2 @@ +The functionality of the BREAK statement has been exhaustively tested in the preceding sections. +No further testing is required for this statement. \ No newline at end of file diff --git a/core_language/19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn b/core_language/19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn new file mode 100644 index 0000000..4bb09f6 --- /dev/null +++ b/core_language/19_basic_program_statements/1913_continue_statement/Sem_1913_continue_statement_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:19.13, Ensure that the IUT properly evaluates continue statements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_1913_continue_statement_001 { + +type component GeneralComp { +} + +testcase TC_Sem_1913_continue_statement_001 () runs on GeneralComp{ + var integer v_i; + + for(v_i:=1; v_i<10; v_i:= v_i+1) { + if(v_i==5) { continue; } + if(v_i==5) { break; } + } + + if( v_i==10 ) { setverdict(pass); } + else { setverdict(fail); } + + +} + + +control{ + + execute(TC_Sem_1913_continue_statement_001()); + +} + +} diff --git a/core_language/19_basic_program_statements/1914_statement_block/NOTES b/core_language/19_basic_program_statements/1914_statement_block/NOTES new file mode 100644 index 0000000..5469318 --- /dev/null +++ b/core_language/19_basic_program_statements/1914_statement_block/NOTES @@ -0,0 +1,2 @@ +The functionality of the statement blocks ( {...} ) has been exhaustively tested in the preceding sections. +No further testing is required in this section. \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2001_the_snapshot_mechanism/NOTES b/core_language/20_statement_and_operations_for_alt/2001_the_snapshot_mechanism/NOTES new file mode 100644 index 0000000..f6f9261 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2001_the_snapshot_mechanism/NOTES @@ -0,0 +1,2 @@ +- NOTE: currently untested. if this can be tested at all from within TTCN-3, we'll have to refer to + part 4 for details at this point as the description in 20.1 is pretty basic. \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NOTES b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NOTES new file mode 100644 index 0000000..6634974 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NOTES @@ -0,0 +1,3 @@ +NOTES: +1. Side effects (restrictions b, c, d) related to function calls are tested in 16.1.4 +2. Side effects (restrictions b, c, d) related to direct calls of operations listed in 16.1.4 (such as create, running, alive etc.) are tested in this section diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn new file mode 100644 index 0000000..04c9a15 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_001.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.2, dynamic error if a test component is completely blocked + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// The test case shall stop and indicate a dynamic error if a test component is +// completely blocked. This means none of the alternatives can be chosen, no +// relevant test component is running, no relevant timer is running and all +// relevant ports contain at least one message, call, reply or exception that +// do not match. + +module NegSem_2002_TheAltStatement_001 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_001() runs on GeneralComp { + timer t_tmr1; + p.send(m_test); + alt { + [] p.receive("abc") { + setverdict(pass); + } + [] t_tmr1.timeout { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_001()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn new file mode 100644 index 0000000..ae56362 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, verify that the create 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_002 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_002() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(m_test); + alt { + [GeneralComp.create != null] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_002()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn new file mode 100644 index 0000000..246b382 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_003.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, verify that the timer.running 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_003 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_003() runs on GeneralComp { + timer t_tmr := 1.0; + t_tmr.start; + p.send(m_test); + alt { + [t_tmr.running] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_003()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn new file mode 100644 index 0000000..617f59e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_004.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, verify that the component.running 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_004 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_004() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(m_test); + alt { + [mtc.running] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_004()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn new file mode 100644 index 0000000..48546c0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_005.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, verify that the alive 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_005 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_005() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(m_test); + alt { + [mtc.alive] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_005()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn new file mode 100644 index 0000000..c556d36 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_006.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, verify that the activate 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_006 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2002_TheAltStatement_006() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(m_test); + alt { + [activate(a_timeout()) != null] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_006()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn new file mode 100644 index 0000000..d799f95 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_007.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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_007 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_007() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(boolean:GeneralComp.create != null) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_007()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn new file mode 100644 index 0000000..dcffe0b --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_008.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_008() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(boolean:t_tmr.running) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_008()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn new file mode 100644 index 0000000..cca8a11 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_009.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_009() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(boolean:mtc.running) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_009()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn new file mode 100644 index 0000000..60dfb0c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_010.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_010() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(boolean:mtc.alive) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_010()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn new file mode 100644 index 0000000..1a49fc7 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_011.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2002_TheAltStatement_011() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(boolean:activate(a_timeout()) != null) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_011()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn new file mode 100644 index 0000000..fdd2685 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_012.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + 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_012() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_receive(GeneralComp.create != null); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_012()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn new file mode 100644 index 0000000..a8a6ad9 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_013.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.1 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + 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_013() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] a_receive(t_tmr.running); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_013()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn new file mode 100644 index 0000000..84c4051 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_014.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + 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_014() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_receive(mtc.running); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_014()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn new file mode 100644 index 0000000..1261669 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_015.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + 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_015() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_receive(mtc.alive); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_015()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn new file mode 100644 index 0000000..a101a89 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_016.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive(boolean p_bool) runs on GeneralComp { + [] p.receive(p_bool) { + setverdict(pass); + } + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2002_TheAltStatement_016() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_receive(activate(a_timeout()) != null); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_016()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn new file mode 100644 index 0000000..35538ef --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_017.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn new file mode 100644 index 0000000..664301d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_018.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn new file mode 100644 index 0000000..2ee8f51 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_019.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn new file mode 100644 index 0000000..ff0ab7d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_020.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn new file mode 100644 index 0000000..a76c1d2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_021.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn new file mode 100644 index 0000000..ae57260 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_022.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn new file mode 100644 index 0000000..f0f3a1d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_023.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn new file mode 100644 index 0000000..a8c956d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_024.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn new file mode 100644 index 0000000..49cdd7a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_025.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn new file mode 100644 index 0000000..d07a60d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_026.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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_013 { + type port P message { + inout integer; + } + + 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_013() 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_013()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn new file mode 100644 index 0000000..606248e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_027.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn new file mode 100644 index 0000000..7a67ff8 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_028.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn new file mode 100644 index 0000000..2f20df5 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_029.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn new file mode 100644 index 0000000..a1a5654 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_030.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn new file mode 100644 index 0000000..c4f7ac9 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_031.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn new file mode 100644 index 0000000..a9d73dd --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_032.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn new file mode 100644 index 0000000..068e314 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_033.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn new file mode 100644 index 0000000..09f48a1 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_034.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn new file mode 100644 index 0000000..10f725f --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_035.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn new file mode 100644 index 0000000..e4f57f0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_036.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S(); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn new file mode 100644 index 0000000..70148e2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_037.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn new file mode 100644 index 0000000..7e2880d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_038.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + signature S() exception (charstring); + + type port PSig procedure { + inout S; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn new file mode 100644 index 0000000..67850a8 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_039.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn new file mode 100644 index 0000000..5ff526c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_040.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn new file mode 100644 index 0000000..4030dc9 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_041.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn new file mode 100644 index 0000000..ff4990a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_042.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn new file mode 100644 index 0000000..566ecbf --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_043.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn new file mode 100644 index 0000000..e8abe2d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_044.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn new file mode 100644 index 0000000..536290c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_045.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn new file mode 100644 index 0000000..0b3f23b --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_046.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn new file mode 100644 index 0000000..693b494 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_047.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn new file mode 100644 index 0000000..2a37a28 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_048.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn new file mode 100644 index 0000000..a384a63 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_049.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn new file mode 100644 index 0000000..3bafbe2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_050.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + /** + * @return always true + */ + external function xf_NegSem_2002_TheAltStatement_001() return boolean; + + function f_test() runs on GeneralComp return boolean { + if (xf_NegSem_2002_TheAltStatement_001()) { 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn new file mode 100644 index 0000000..bd1f517 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_051.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn new file mode 100644 index 0000000..880abaa --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_052.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn new file mode 100644 index 0000000..a1c046c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_053.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn new file mode 100644 index 0000000..afcc577 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_054.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn new file mode 100644 index 0000000..ccc1126 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_055.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn new file mode 100644 index 0000000..07efa8c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_056.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn new file mode 100644 index 0000000..cb799db --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_057.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn new file mode 100644 index 0000000..48e6850 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_058.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn new file mode 100644 index 0000000..9d64123 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_059.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn new file mode 100644 index 0000000..758706d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_060.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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; + p.send(m_test); + alt { + [t_tmr.read > 0.0] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_060()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn new file mode 100644 index 0000000..d3adef2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_061.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2002_TheAltStatement_061() runs on GeneralComp { + p.send(m_test); + alt { + [p.checkstate("Started")] p.receive(charstring:?) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_061()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn new file mode 100644 index 0000000..23847b2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_062.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_062() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + map(self:p, system: 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()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn new file mode 100644 index 0000000..a9bb4e2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_063.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_063() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(boolean:p.checkstate("Started")) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_063()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn new file mode 100644 index 0000000..79dfd59 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_064.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] a_receive(t_tmr.read > 0.0); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_064()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn new file mode 100644 index 0000000..e56d848 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_065.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] a_receive(p.checkstate("Started")); + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_065()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn new file mode 100644 index 0000000..ae69161 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_066.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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_066 { + + type port MyPort message { + inout boolean + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_066() runs on GeneralComp system GeneralComp { + template @fuzzy boolean mw_msg := GeneralComp.create != null; + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_066()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn new file mode 100644 index 0000000..03dce5c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_067.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_067() runs on GeneralComp system GeneralComp { + template @fuzzy boolean mw_msg := mtc.running; + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_067()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn new file mode 100644 index 0000000..a1b5973 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_068.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_068() runs on GeneralComp system GeneralComp { + template @fuzzy boolean mw_msg := mtc.alive; + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_068()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn new file mode 100644 index 0000000..46acc9c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_069.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_069() runs on GeneralComp system GeneralComp { + template @fuzzy boolean mw_msg := p.checkstate("Started"); + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_069()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn new file mode 100644 index 0000000..8c1d601 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_070.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_070() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + template @fuzzy boolean mw_msg := t_tmr.running; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_070()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn new file mode 100644 index 0000000..c813cb4 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_071.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2002_TheAltStatement_071() runs on GeneralComp system GeneralComp { + timer t_tmr := 1.0; + template @fuzzy boolean mw_msg := t_tmr.read > 0.0; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_071()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn new file mode 100644 index 0000000..e9319d0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_072.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2002_TheAltStatement_072() runs on GeneralComp system GeneralComp { + template @fuzzy boolean mw_msg := activate(a_timeout()) != null; + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_072()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn new file mode 100644 index 0000000..085e74d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_073.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg(GeneralComp.create != null)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_073()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn new file mode 100644 index 0000000..724e04a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_074.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + template boolean mw_msg (boolean p_par) := (false, p_par); + + testcase TC_NegSem_2002_TheAltStatement_074() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg(mtc.running)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_074()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn new file mode 100644 index 0000000..414da18 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_075.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg(mtc.alive)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_075()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn new file mode 100644 index 0000000..b47e515 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_076.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg(p.checkstate("Started"))) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_076()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn new file mode 100644 index 0000000..4942820 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_077.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 := 1.0; + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] p.receive(mw_msg(t_tmr.running)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_077()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn new file mode 100644 index 0000000..9b9d83a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_078.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 := 1.0; + map(self:p, system: 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()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn new file mode 100644 index 0000000..122c393 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_079.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] p.receive(mw_msg(activate(a_timeout()) != null)) { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_2002_TheAltStatement_079()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn new file mode 100644 index 0000000..8f2569e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_080.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_080()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn new file mode 100644 index 0000000..3a8dd85 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_081.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := mtc.running; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_081() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_081()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn new file mode 100644 index 0000000..694a863 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_082.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_rcv() runs on GeneralComp { + var boolean v_bool := mtc.alive; + [v_bool] p.receive(boolean:?){ + } + } + + testcase TC_NegSem_2002_TheAltStatement_082() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_082()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn new file mode 100644 index 0000000..49be9b2 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_083.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_083()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn new file mode 100644 index 0000000..bf3f1cd --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_084.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_084()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn new file mode 100644 index 0000000..4d6a829 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_085.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 521 + ** @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 + } + + 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 { + map(self:p, system: p); + t_tmr.start; + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_085()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn new file mode 100644 index 0000000..7b5af65 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_086.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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 + } + + 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 { + map(self:p, system: p); + p.send(true); + alt { + [] a_rcv(); + [] any timer.timeout { + } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2002_TheAltStatement_086()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_087.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_087.ttcn new file mode 100644 index 0000000..378d9c5 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_087.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 548 + ** @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 fuzzy 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_087 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_eval() return integer { + return 10; + } + + function f_test(@fuzzy integer p_par) return boolean { + if (p_par > 0) { + return true; + } else { + return false; + } + } + + altstep a_rcv(boolean p_par) runs on GeneralComp { + [p_par] p.receive(integer:?) {} + } + + testcase TC_NegSem_2002_TheAltStatement_087() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_087()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_088.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_088.ttcn new file mode 100644 index 0000000..d4606d7 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_088.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:20.2, verify that a external function used in a parameter of an altstep invoked from an alt branch cannot contain fuzzy 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_088 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a_anyTimer() runs on GeneralComp { + [] any timer.timeout {} + } + + external function @deterministic f_test(@fuzzy integer p_par) return boolean; + + altstep a_rcv(@fuzzy boolean p_par) runs on GeneralComp { + [p_par] p.receive(integer:?) {} + } + + function f_eval() return integer { + return 10; + } + + testcase TC_NegSem_2002_TheAltStatement_088() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_int := f_eval(); + 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_088()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_089.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_089.ttcn new file mode 100644 index 0000000..43d152a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_089.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 548 + ** @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 fuzzy variables + ** @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_089 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() return integer { + var @fuzzy integer v_int := f_eval(); + return v_int; + } + + + altstep a_rcv(integer p_par) runs on GeneralComp { + [] p.receive(p_par) {} + } + + function f_eval() return integer { + return 1; + } + + testcase TC_NegSem_2002_TheAltStatement_089() 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_089()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_090.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_090.ttcn new file mode 100644 index 0000000..76a38fe --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/NegSem_2002_TheAltStatement_090.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 548 + ** @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 the setencode operation + ** @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_090 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_test() runs on GeneralComp return integer { + p.setencode(integer, "Binary"); + return 1; + } + + altstep a_rcv(integer p_par) runs on GeneralComp { + [] p.receive(p_par) {} + } + + testcase TC_NegSem_2002_TheAltStatement_090() 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_090()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn new file mode 100644 index 0000000..16cbc9e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_001.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the alt-statement works as expected (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_001 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_test := "ping"; + +testcase TC_Sem_2002_TheAltStatement_001() runs on GeneralComp { + p.send(m_test); + alt { + [] p.receive(m_test) { + setverdict(pass); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_001()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn new file mode 100644 index 0000000..ccb2396 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the alt-statement with a guard works as expected (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_002 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_test := "ping"; + +testcase TC_Sem_2002_TheAltStatement_002() runs on GeneralComp { + var integer counter := 1; + p.send(m_test); + alt { + [counter == 1] p.receive(m_test) { + setverdict(pass); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_002()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn new file mode 100644 index 0000000..93ec299 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_003.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the alt-statement processes the alternatives in order (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_003 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_test := "ping"; + +testcase TC_Sem_2002_TheAltStatement_003() runs on GeneralComp { + p.send(m_test); + alt { + [] p.receive(m_test) { + setverdict(pass); + } + [] p.receive(m_test) { + setverdict(fail); + } + [] p.receive(m_test) { + setverdict(fail); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_003()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_004.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_004.ttcn new file mode 100644 index 0000000..a69c25d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_004.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that activated defaults are processed in the reverse order (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_004 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; +template charstring m_testThree := "ping3"; // never sent! + +altstep a_first() runs on GeneralComp { + [] p.receive(m_testTwo) { + setverdict(fail); + } +} + +altstep a_second() runs on GeneralComp { + [] p.receive(m_testOne) { + setverdict(pass); + } +} + +testcase TC_Sem_2002_TheAltStatement_004() runs on GeneralComp { + var default v_defaultOne := activate(a_first()); + var default v_defaultTwo := activate(a_second()); + + p.send(m_testOne); + p.send(m_testTwo); + + alt { + [] p.receive(m_testThree) { + setverdict(fail); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_004(), 2.0); // if the altstep isn't handled after 2s, we raise an error +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_005.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_005.ttcn new file mode 100644 index 0000000..b5667e7 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_005.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the else branch is executed when nothing else matched (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_005 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +testcase TC_Sem_2002_TheAltStatement_005() runs on GeneralComp { + p.send(m_testOne); + p.send(m_testOne); + + alt { + [] p.receive(m_testTwo) { + setverdict(fail); + } + [false] p.receive(m_testTwo) { + setverdict(fail); + } + [else] { + setverdict(pass); + } + } + + setverdict(pass); +} + +control { + execute(TC_Sem_2002_TheAltStatement_005(), 2.0); // if the altstep isn't handled after 2s, we raise an error +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_006.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_006.ttcn new file mode 100644 index 0000000..c74bb72 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_006.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 409 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, Ensure that an altstep invocation works as expected (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_006 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +altstep a_test() runs on GeneralComp { + [] p.receive(m_testOne) { + setverdict(pass); + } +} + +testcase TC_Sem_2002_TheAltStatement_006() runs on GeneralComp { + timer t_tmr := 0.5; + t_tmr.start; + p.send(m_testOne); + t_tmr.timeout; // wait for some time for the answer + alt { + [] a_test(); + [else] { + setverdict(fail); + } + } + + setverdict(pass); +} + +control { + execute(TC_Sem_2002_TheAltStatement_006()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_007.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_007.ttcn new file mode 100644 index 0000000..7077bcc --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_007.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 409 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.2, Ensure that an altstep invocation works as expected and that the optional statement block is executed after the altstep staatement block (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_007 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; + var boolean v_visitedAltstep := false; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +altstep a_test() runs on GeneralComp { + [] p.receive(m_testOne) { + v_visitedAltstep := true; + } +} + +testcase TC_Sem_2002_TheAltStatement_007() runs on GeneralComp { + timer t_tmr := 0.5; + t_tmr.start; + p.send(m_testOne); + t_tmr.timeout; // wait for some time for the answer + + alt { + [] a_test() { + if (v_visitedAltstep == true) { + setverdict(pass); + } + } + [else] { + setverdict(fail); + } + } + + setverdict(pass); +} + +control { + execute(TC_Sem_2002_TheAltStatement_007()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_008.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_008.ttcn new file mode 100644 index 0000000..17d732c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_008.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the done-block in an alt-statement is triggered as expected (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_008 { + +type port MyPort message { + inout charstring +} + +type component MTCComp { + port MyPort p; +} + +type component PTCComp { + port MyPort p; +} + +type component SystemComp { + port MyPort p; +} + +function f_secondComponent() runs on PTCComp { +} + +testcase TC_Sem_2002_TheAltStatement_008() runs on MTCComp system SystemComp { + var PTCComp v_ptc := PTCComp.create alive; + map(self:p, system:p); + v_ptc.start(f_secondComponent()); + + alt { + [] v_ptc.killed { + setverdict(fail); // as we have an alive component, it shouldn't have the killed status here + } + [] v_ptc.done { + setverdict(pass); + } + } + v_ptc.kill; +} + +control { + execute(TC_Sem_2002_TheAltStatement_008()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_009.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_009.ttcn new file mode 100644 index 0000000..83f6e63 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_009.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the killed-block in an alt-statement is triggered as expected when the component is killed (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_009 { + +type port MyPort message { + inout charstring +} + +type component SystemComp { + port MyPort p; +} + +type component MTCComp { + port MyPort p; +} + +type component PTCComp { + port MyPort p; +} + +function f_secondComponent() runs on PTCComp { +} + +testcase TC_Sem_2002_TheAltStatement_009() runs on MTCComp system SystemComp { + var PTCComp v_ptc := PTCComp.create; + map(self:p, system:p); + v_ptc.start(f_secondComponent()); + v_ptc.kill; + + alt { + [] v_ptc.killed { + setverdict(pass); + } + [else] { + setverdict(fail); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_009()); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_010.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_010.ttcn new file mode 100644 index 0000000..b77343e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_010.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the timeout branch is taken as expected (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_010 { + +type component GeneralComp { } + +testcase TC_Sem_2002_TheAltStatement_010() runs on GeneralComp { + timer t_timer; + + t_timer.start(20E-3); + + alt { // block until a timeout happens in 20ms + [] t_timer.timeout { + setverdict(pass); + } + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_010(), 200E-3); // timeout in 100ms, then error +} +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_011.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_011.ttcn new file mode 100644 index 0000000..3b09d2f --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_011.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that the behavior continues after the alt-statement (loopback case). + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2002_TheAltStatement_011 { + +type component GeneralComp { } + +testcase TC_Sem_2002_TheAltStatement_011() runs on GeneralComp { + timer t_timer; + var boolean v_altVisited := false; + + t_timer.start(20E-3); + alt { // block until a timeout happens in 20ms + [] t_timer.timeout { + v_altVisited := true; + } + } + + if (v_altVisited == true) { + setverdict(pass); + } else { + setverdict(fail); // for some reason the alt has not been processed correctly. + } +} + +control { + execute(TC_Sem_2002_TheAltStatement_011(), 200E-3); // timeout in 100ms, then error +} +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_012.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_012.ttcn new file mode 100644 index 0000000..3714758 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_012.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that alt statements are correctly handled for dynamically mapped ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Mycompport A is dynamically mapped +module Sem_2002_TheAltStatement_012{ + + type port loopbackPort message { + inout integer + } + + type port IntegerOutputPortType message { + inout integer + } + +type component GeneralComp + { + + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } + +// MyTestSystemInterface is the test system interface +testcase TC_Sem_2002_TheAltStatement_012() runs on GeneralComp system MyTestSystemInterface { + timer tc_timer := 0.1; + map(mtc:MycomportA, system:messagePort); + + + MycomportA.send(2); + tc_timer.start; + unmap(mtc:MycomportA); + setverdict(pass); + + alt { + [] MycomportA.receive { + } + [] tc_timer.timeout { + setverdict(pass); + } + } +} +control{ + execute(TC_Sem_2002_TheAltStatement_012()); +} +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_013.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_013.ttcn new file mode 100644 index 0000000..36617be --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_013.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:20.2, Ensure that alt statements are correctly handled for dynamically mapped ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// Mycompport A is dynamically mapped +module Sem_2002_TheAltStatement_013{ + + type port loopbackPort message { + inout integer + } + + type port IntegerOutputPortType message { + inout integer + } + +type component GeneralComp + { + + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } + +// MyTestSystemInterface is the test system interface +testcase TC_Sem_2002_TheAltStatement_013() runs on GeneralComp system MyTestSystemInterface { + timer tc_timer := 0.1; + map(mtc:MycomportA, system:messagePort); + + + MycomportA.send(2); + tc_timer.start; + unmap(mtc:MycomportA); + + alt { + [] tc_timer.timeout { + MycomportA.clear; + setverdict(pass); + } + } +} +control{ + execute(TC_Sem_2002_TheAltStatement_013()); +} +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_014.ttcn b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_014.ttcn new file mode 100644 index 0000000..a68bb14 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2002_the_alt_statement/Sem_2002_TheAltStatement_014.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.2, no default activation after else + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If an else branch is defined, the default mechanism will never be called, +// i.e. active defaults will never be entered. + +module Sem_2002_TheAltStatement_014 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive() runs on GeneralComp { + [] p.receive { + setverdict(fail); + } + } + + testcase TC_Sem_2002_TheAltStatement_014() runs on GeneralComp system GeneralComp { + map(self:p, system: p); + p.send(charstring:"abc"); + activate(a_receive()); + alt { + [] p.receive(charstring:"def") { + setverdict(fail); + } + [else] { + setverdict(pass); + } + } + } + + control { + execute(TC_Sem_2002_TheAltStatement_014()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/NegSem_2003_the_repeat_statement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/NegSem_2003_the_repeat_statement_001.ttcn new file mode 100644 index 0000000..aa56061 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/NegSem_2003_the_repeat_statement_001.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.3, Ensure that the IUT correctly processes repeat statements + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2003_the_repeat_statement_001 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + template charstring m_test := "ping"; + + testcase TC_NegSem_2003_the_repeat_statement_001() runs on GeneralComp { + var integer counter := 1; + p.send(m_test); + p.send(m_test); + alt { + [counter == 1] p.receive(m_test) { + counter := 2; + repeat; + } + [counter == 2] p.receive(m_test) { + setverdict(pass); + } + } + repeat; //repeat statement is used outside of an alt or call structure + } + + control { + execute(TC_NegSem_2003_the_repeat_statement_001()); + } + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_001.ttcn new file mode 100644 index 0000000..03205f0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_001.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20.3, Ensure that the IUT correctly processes repeat statements + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2003_the_repeat_statement_001 { + + type port loopbackPort message { + inout charstring + } + + type component GeneralComp { + port loopbackPort p; + } + + template charstring m_test := "ping"; + + testcase TC_Sem_2003_the_repeat_statement_001() runs on GeneralComp { + timer t:= 5.0; + var integer counter := 1; + + p.send(m_test); + p.send(m_test); + + t.start; + alt { + [counter == 1] p.receive(m_test) { + counter := 2; + repeat; + } + [counter == 2] p.receive(m_test) { + setverdict(pass); + } + [] t.timeout { + setverdict(fail); + } + } + } + + control { + execute(TC_Sem_2003_the_repeat_statement_001()); + } + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_002.ttcn new file mode 100644 index 0000000..2c46ad0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_002.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.2, repeat in procedure call block + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// When used in statement blocks of the response and exception handling parts +// of blocking procedure calls, the repeat statement causes the re-evaluation +// of the response and exception handling part of the call (see clause 22.3.1). + +module Sem_2003_the_repeat_statement_002 { + + signature S(); + + type port MyPort procedure { + inout S; + } + + type component GeneralComp { + port MyPort p; + } + + function f_mirror() runs on GeneralComp { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_Sem_2003_the_repeat_statement_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc[2]; + var integer v_counter := 0; + for(var integer i := 0; i < 2; i := i + 1) { + v_ptc[i] := GeneralComp.create; + connect(self:p, v_ptc[i]:p); + v_ptc[i].start(f_mirror()); + } + p.call(S:{}) to all component { // broadcast call (several replies expected) + [] p.getreply(S:?) { + v_counter := v_counter + 1; + if (v_counter < lengthof(v_ptc)) { repeat; } // tested repeat + else { setverdict(pass); } + } + } + } + + control { + execute(TC_Sem_2003_the_repeat_statement_002()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_003.ttcn b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_003.ttcn new file mode 100644 index 0000000..34c92d8 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_003.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.2, repeat in alstep branch of alt statements + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If a repeat statement is used in a top alternative in an altstep definition, +// it causes a new snapshot and the re-evaluation of the alt statement from +// which the altstep has been called. The call of the altstep may either be +// done implicitly by the default mechanism (see clause 20.5.1) or explicitly +// in the alt statement (see clause 20.2). + +module Sem_2003_the_repeat_statement_003 { + + type port MyPort message { + inout charstring; + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receiveAny() runs on GeneralComp { + [] p.receive(charstring:?) { + repeat; + } + } + + testcase TC_Sem_2003_the_repeat_statement_003() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + alt { + [] p.receive(charstring:"bar") { + setverdict(pass); + } + [] a_receiveAny(); + } + } + + control { + execute(TC_Sem_2003_the_repeat_statement_003()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_004.ttcn b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_004.ttcn new file mode 100644 index 0000000..1630d8f --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2003_the_repeat_statement/Sem_2003_the_repeat_statement_004.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.2, repeat in executed default + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If a repeat statement is used in a top alternative in an altstep definition, +// it causes a new snapshot and the re-evaluation of the alt statement from +// which the altstep has been called. The call of the altstep may either be +// done implicitly by the default mechanism (see clause 20.5.1) or explicitly +// in the alt statement (see clause 20.2). + +module Sem_2003_the_repeat_statement_004 { + + type port MyPort message { + inout charstring; + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receiveAny() runs on GeneralComp { + [] p.receive(charstring:?) { + repeat; + } + } + + testcase TC_Sem_2003_the_repeat_statement_004() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + activate(a_receiveAny()); + alt { + [] p.receive(charstring:"bar") { + setverdict(pass); + } + } + } + + control { + execute(TC_Sem_2003_the_repeat_statement_004()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_001.ttcn new file mode 100644 index 0000000..a7dc477 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_001.ttcn @@ -0,0 +1,63 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2004_InterleaveStatement_001 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_NegSem_2004_InterleaveStatement_001() runs on GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + var integer v_i; + timer t_timer; + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + t_timer.start(1.0); + + interleave { + [] pt_myPort1.receive(MySig1) + { + for(v_i:=1; v_i<10; v_i:= v_i+1) { //control transfer statement is not allowed + pt_myPort2.send(MySig2); + } + alt { + [] pt_myPort1.receive(MySig3) { + setverdict(pass); + } + [] t_timer.timeout { + setverdict(fail); + } + } + } + [] pt_myPort2.receive(MySig2) //boolean guard must be empty + { + pt_myPort1.send(MySig3); + } + + } + + + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_001()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_002.ttcn new file mode 100644 index 0000000..0844cf6 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_002.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.2 + ** @purpose 1:20.4, verify a while loop cannot be used inside interleave together with reception statements + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// a. The loop statements for, while, and do-while can be used within statements blocks that do not +// contain reception statements. + +module NegSem_2004_InterleaveStatement_002 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_002() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + for(var integer i := 0; i < 5; i := i + 1) { + p.send("ding"); + } + + interleave { + [] p.receive(charstring:"bar") { + var integer v_counter := 0; + while(v_counter < 5) { + v_counter := v_counter + 1; + p.receive; + } + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_002()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_003.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_003.ttcn new file mode 100644 index 0000000..02e14e8 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_003.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.2 + ** @purpose 1:20.4, verify a do-while loop cannot be used inside interleave together with reception statements + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// a. The loop statements for, while, and do-while can be used within statements blocks that do not +// contain reception statements. + +module NegSem_2004_InterleaveStatement_003 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_003() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + for(var integer i := 0; i < 5; i := i + 1) { + p.send("ding"); + } + interleave { + [] p.receive(charstring:"bar") { + var integer v_counter := 0; + do { + v_counter := v_counter + 1; + p.receive; + } while(v_counter < 5); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_003()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_004.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_004.ttcn new file mode 100644 index 0000000..a59a3cc --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_004.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.2 + ** @purpose 1:20.4, verify that goto cannot be inside interleave if used together with reception statements + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// b. The goto statement can be used for defining unconditional jumps within statements blocks that do not +// contain reception statements and for specifying unconditional jumps out of interleave statements. + +module NegSem_2004_InterleaveStatement_004 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_004() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + p.send(charstring:"ding"); + + interleave { + [] p.receive(charstring:"bar") { + goto L1; + label L1; + p.receive(charstring:"ding"); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_004()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_005.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_005.ttcn new file mode 100644 index 0000000..06aec94 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, activate call inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_005 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_timeout() { + [] any timer.timeout { + } + } + + testcase TC_NegSem_2004_InterleaveStatement_005() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + activate(a_timeout()); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_005()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_006.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_006.ttcn new file mode 100644 index 0000000..77b1e1e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_006.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, deactivate call inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_006 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_006() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + deactivate; + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_006()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_008.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_008.ttcn new file mode 100644 index 0000000..5fb71c7 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_008.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, repeat inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_008 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_008() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + repeat; + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_008()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_010.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_010.ttcn new file mode 100644 index 0000000..0644909 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_010.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, explicit altstep call inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_010 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive() runs on GeneralComp { + [] p.receive(charstring:?) { + } + } + + testcase TC_NegSem_2004_InterleaveStatement_010() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + p.send(charstring:"ding"); + + interleave { + [] p.receive(charstring:"bar") { + a_receive(); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_010()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_011.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_011.ttcn new file mode 100644 index 0000000..edd9a78 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_011.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, direct function call containing reception statement inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_011 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + function f_receive() runs on GeneralComp { + p.receive(charstring:?); + } + + testcase TC_NegSem_2004_InterleaveStatement_011() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + p.send(charstring:"ding"); + + interleave { + [] p.receive(charstring:"bar") { + f_receive(); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_011()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_012.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_012.ttcn new file mode 100644 index 0000000..0be059c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_012.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, indirect function call containing reception statement inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Control transfer statements for, while, do-while, goto, activate, +// deactivate, stop, repeat, return, direct call of altsteps as alternatives +// and (direct and indirect) calls of user-defined functions, which include +// reception statements, shall not be used in interleave statements. + +module NegSem_2004_InterleaveStatement_012 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + function f_receive() runs on GeneralComp { + p.receive(charstring:?); + } + + function f_caller(boolean p_choice) runs on GeneralComp { + if (p_choice) { + f_receive(); + } + } + + testcase TC_NegSem_2004_InterleaveStatement_012() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + p.send(charstring:"ding"); + + interleave { + [] p.receive(charstring:"bar") { + f_caller(true); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_012()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_013.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_013.ttcn new file mode 100644 index 0000000..79fd813 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSem_2004_InterleaveStatement_013.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that conditional goto cannot be inside interleave + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// b. The goto statement can be used for defining unconditional jumps within statements blocks that do not +// contain reception statements and for specifying unconditional jumps out of interleave statements. + +module NegSem_2004_InterleaveStatement_013 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_NegSem_2004_InterleaveStatement_013() runs on GeneralComp { + var boolean v_cond := true; + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + if (v_cond) { + goto L1; + } + } + [] p.receive(charstring:"foo") { + } + } + label L1; + setverdict(pass); + } + + control{ + execute(TC_NegSem_2004_InterleaveStatement_013()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_001.ttcn new file mode 100644 index 0000000..f723600 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_001.ttcn @@ -0,0 +1,62 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass reject + *****************************************************************/ + +module NegSyn_2004_InterleaveStatement_001 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_NegSyn_2004_InterleaveStatement_001() runs on GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + timer t_timer; + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + t_timer.start(1.0); + + interleave { + [] pt_myPort1.receive(MySig1) + { + pt_myPort2.send(MySig2); + alt { + [] pt_myPort1.receive(MySig3) { + setverdict(pass); + } + [] t_timer.timeout { + setverdict(fail); + } + } + } + [] pt_myPort2.receive(MySig2) + { + pt_myPort1.send(MySig3); + } + [else] { + setverdict(pass); + } + } + + + } + + control{ + execute(TC_NegSyn_2004_InterleaveStatement_001()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_002.ttcn new file mode 100644 index 0000000..b7c910c --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/NegSyn_2004_InterleaveStatement_002.ttcn @@ -0,0 +1,61 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass reject + *****************************************************************/ + +module NegSyn_2004_InterleaveStatement_002 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_NegSyn_2004_InterleaveStatement_002() runs on GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + timer t_timer; + var integer v:=1; + t_timer.start(1.0); + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + + interleave { + [v>0] pt_myPort1.receive(MySig1) //boolean guard must be empty + { + pt_myPort2.send(MySig2); + alt { + [] pt_myPort1.receive(MySig3) { + setverdict(pass); + } + [] t_timer.timeout { + setverdict(fail); + } + } + } + [v<0] pt_myPort2.receive(MySig2) //boolean guard must be empty + { + pt_myPort1.send(MySig3); + } + + } + + + } + + control{ + execute(TC_NegSyn_2004_InterleaveStatement_002()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_001.ttcn new file mode 100644 index 0000000..86040f6 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_001.ttcn @@ -0,0 +1,66 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2004_InterleaveStatement_001 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + timer t_timer; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + altstep checkTimeout(timer t_timer){ + [] t_timer.timeout { + setverdict(fail); + } + } + + testcase TC_Sem_2004_InterleaveStatement_001() runs on GeneralComp system GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + map(mtc:pt_myPort1, system:pt_myPort1); + map(mtc:pt_myPort2, system:pt_myPort2); + + activate(checkTimeout(t_timer)); + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + t_timer.start(3.0); + + interleave { + [] pt_myPort1.receive(MySig1) + { + pt_myPort2.send(MySig2); + alt { + [] pt_myPort1.receive(MySig3) { + setverdict(pass); + } + } + } + [] pt_myPort2.receive(MySig2) + { + pt_myPort1.send(MySig3); + } + } + + + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_001()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_002.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_002.ttcn new file mode 100644 index 0000000..257efdd --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_002.ttcn @@ -0,0 +1,67 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2004_InterleaveStatement_002 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + altstep checkTimeout(timer t_timer){ + [] t_timer.timeout { + setverdict(fail); + } + } + + testcase TC_Sem_2004_InterleaveStatement_002() runs on GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + timer t_timer; + + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + + t_timer.start(1.0); + + interleave { + [] pt_myPort1.receive(MySig1) + { + pt_myPort2.send(MySig2); + alt { + [] pt_myPort1.receive(MySig3) { + setverdict(fail); + } + } + } + [] pt_myPort2.receive(MySig2) + { + setverdict(pass); + break; //evaluation of correct exit from interleave + pt_myPort1.send(MySig3); + setverdict(fail); + } + } + + + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_002()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_003.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_003.ttcn new file mode 100644 index 0000000..418444f --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_003.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.4, while loop inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If none of the alternatives of the interleave statement can be executed, +// the default mechanism will be invoked. This means, according to the +// semantics of the default mechanism, the actual snapshot will be used to +// evaluate those altsteps that have been activated before entering the +// interleave statement. + +module Sem_2004_InterleaveStatement_003 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + altstep a_receive() runs on GeneralComp { + [] p.receive(charstring:?) { + setverdict(pass, "default called"); + } + } + + testcase TC_Sem_2004_InterleaveStatement_003() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"ding"); + p.send(charstring:"bar"); + activate(a_receive()); + + interleave { + [] p.receive(charstring:"bar") { // should not be called, because the default is invoked instead + setverdict(fail, "default not used properly!!!"); + } + [] p.receive(charstring:"foo") { + setverdict(pass, "foo received"); + } + } + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_003()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_004.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_004.ttcn new file mode 100644 index 0000000..54c1e56 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_004.ttcn @@ -0,0 +1,65 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that a for loop can be used inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// a. The loop statements for, while, and do-while can be used within statements blocks that do not +// contain reception statements. + + +module Sem_2004_InterleaveStatement_004 { + + type port loopbackPort message { + inout MyMessageType + } + + type component GeneralComp { + port loopbackPort pt_myPort1,pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_Sem_2004_InterleaveStatement_004() runs on GeneralComp { + + template MyMessageType MySig1 := {1,"aaa",true}; + template MyMessageType MySig2 := {2,"bbb",true}; + template MyMessageType MySig3 := {3,"ccc",true}; + + var integer v_i; + timer t_timer; + pt_myPort1.send(MyMessageType:{1, "aaa", true}); + t_timer.start(1.0); + + interleave { + [] pt_myPort1.receive(MySig1) + { + var integer v_counter := 0; + for(v_i:=1; v_i<10; v_i:= v_i+1) { //control transfer statement is not allowed + v_counter := v_counter + 1; + } + log (v_counter); + } + [] pt_myPort2.receive(MySig2) //boolean guard must be empty + { + pt_myPort1.send(MySig3); + } + + } + + + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_004()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_005.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_005.ttcn new file mode 100644 index 0000000..2674914 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_005.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that while loop can be used inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// a. The loop statements for, while, and do-while can be used within statements blocks that do not +// contain reception statements. + +module Sem_2004_InterleaveStatement_005 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_Sem_2004_InterleaveStatement_005() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + var integer v_counter := 0; + while(v_counter < 5) { + v_counter := v_counter + 1; + } + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_005()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_006.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_006.ttcn new file mode 100644 index 0000000..5d177d4 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_006.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that a do-while loop can be used inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// a. The loop statements for, while, and do-while can be used within statements blocks that do not +// contain reception statements. + +module Sem_2004_InterleaveStatement_006 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_Sem_2004_InterleaveStatement_006() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + var integer v_counter := 0; + do { + v_counter := v_counter + 1; + } while(v_counter < 5); + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_006()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_007.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_007.ttcn new file mode 100644 index 0000000..8c204b5 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_007.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that goto can be used for jumps out of interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// b. The goto statement can be used for defining unconditional jumps within statements blocks that do not +// contain reception statements and for specifying unconditional jumps out of interleave statements. + +module Sem_2004_InterleaveStatement_007 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_Sem_2004_InterleaveStatement_007() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + goto L1; + } + [] p.receive(charstring:"foo") { + } + } + label L1; + setverdict(pass); + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_007()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_008.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_008.ttcn new file mode 100644 index 0000000..da90980 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_008.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.1 + ** @purpose 1:20.4, verify that goto can be used inside interleave for jumps within statement blocks + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction d) +// The restricted use of the control transfer statements for, while, do-while, and goto within interleave +// statements is allowed under the following conditions: +// b. The goto statement can be used for defining unconditional jumps within statements blocks that do not +// contain reception statements and for specifying unconditional jumps out of interleave statements. + +module Sem_2004_InterleaveStatement_008 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_Sem_2004_InterleaveStatement_008() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + log ("inside interleave"); + goto L1; + label L1; + } + [] p.receive(charstring:"foo") { + } + } + setverdict(pass); + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_008()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_009.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_009.ttcn new file mode 100644 index 0000000..35c62b8 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_009.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.2 + ** @purpose 1:20.4, stop inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// Background: +// The stop statement was forbidden inside interleave in TTCN-3:2016 and older + +module Sem_2004_InterleaveStatement_009 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + testcase TC_Sem_2004_InterleaveStatement_009() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + + interleave { + [] p.receive(charstring:"bar") { + setverdict(pass); + stop; + } + [] p.receive(charstring:"foo") { + } + } + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_009()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_010.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_010.ttcn new file mode 100644 index 0000000..bd65ddb --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Sem_2004_InterleaveStatement_010.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 584 + ** @version 0.0.2 + ** @purpose 1:20.4, return inside interleave + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// Background: +// The return statement was forbidden inside interleave in TTCN-3:2016 and older + +module Sem_2004_InterleaveStatement_010 { + + type port MyPort message { + inout charstring + } + + type component GeneralComp { + port MyPort p; + } + + function f_interleave() runs on GeneralComp { + interleave { + [] p.receive(charstring:"bar") { + setverdict(pass); + return; + } + [] p.receive(charstring:"foo") { + } + } + } + + testcase TC_Sem_2004_InterleaveStatement_010() runs on GeneralComp { + p.send(charstring:"foo"); + p.send(charstring:"bar"); + f_interleave(); + } + + control{ + execute(TC_Sem_2004_InterleaveStatement_010()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Syn_2004_InterleaveStatement_001.ttcn b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Syn_2004_InterleaveStatement_001.ttcn new file mode 100644 index 0000000..4e9abd6 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2004_the_interleave_statement/Syn_2004_InterleaveStatement_001.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:20.4, Validate that interleave statements are properly handled. + ** @verdict pass accept, noexecution + *****************************************************************/ +module Syn_2004_InterleaveStatement_001 { + type port MyMessagePortType message { + inout MyMessageType; + } + + type component GeneralComp { + port MyMessagePortType pt_myPort1, pt_myPort2; + } + + type record MyMessageType { + integer field1, + charstring field2, + boolean field3 + } + + testcase TC_Syn_2004_InterleaveStatement_001() runs on GeneralComp { + + template MyMessageType MySig1 := {1, "abc", true} + template MyMessageType MySig2 := MySig1; + template MyMessageType MySig3 := MySig1; + template MyMessageType MySig4 := MySig1; + template MyMessageType MySig5 := MySig1; + template MyMessageType MySig6 := MySig1; + + pt_myPort1 + .send(MyMessageType: + { + 2, + "abcxyz", + true + }); + + interleave { + [] pt_myPort1.receive(MySig1) { + pt_myPort1.send(MySig2); + pt_myPort1.receive(MySig3); + } + [] pt_myPort2.receive(MySig4) { + pt_myPort2.send(MySig5); + pt_myPort2.receive(MySig6); + } + } + } + control { + execute(TC_Syn_2004_InterleaveStatement_001()); + } +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/NegSem_200501_the_default_mechanism_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/NegSem_200501_the_default_mechanism_001.ttcn new file mode 100644 index 0000000..17bb9d1 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/NegSem_200501_the_default_mechanism_001.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify unsuccessful default termination + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For each test component the defaults, i.e. activated altsteps, are stored as an ordered +// list. The defaults are listed in the reversed order of their activation i.e. the last +// activated default is the first element in the list of active defaults. + +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +// In the case of an unsuccessful termination, the default mechanism invokes the next +// default in the list. If the last default in the list has terminated unsuccessfully, +// the default mechanism will return to the place in the alt statement in which it +// has been invoked, i.e. at the end of the alt statement, and indicate an unsuccessful +// default execution. An unsuccessful default execution will also be indicated if the list +// of defaults is empty. An unsuccessful default execution may cause a new snapshot or +// a dynamic error if the test component is blocked. + +module NegSem_200501_the_default_mechanism_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:2) { // no match + setverdict(pass, "First default"); + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:1) { // no match + setverdict(fail, "Last default"); + } + } + + testcase TC_NegSem_200501_the_default_mechanism_001() runs on GeneralComp { + activate(a1()); + activate(a2()); + p.send(integer:5); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } // defaults are terminated unsuccessfully -> dynamic test case error + } + + control{ + execute(TC_NegSem_200501_the_default_mechanism_001(), 1.0); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_001.ttcn new file mode 100644 index 0000000..a5d3945 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_001.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that activated default is invoked + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +module Sem_200501_the_default_mechanism_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_Sem_200501_the_default_mechanism_001() runs on GeneralComp { + activate(a()); + p.send(integer:5); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_001()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_002.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_002.ttcn new file mode 100644 index 0000000..e3c4216 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_002.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that default are processed in interleave + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +// In particular, the test case is related to the NOTE 1: +// An interleave statement is semantically equivalent to a nested set of alt statements +// and the default mechanism also applies to each of these alt statements. This means, +// the default mechanism also applies to interleave statements. Furthermore, the restrictions +// imposed on interleave statements in clause 20.4 do not apply to altsteps that are +// activated as default behaviour for interleave statements. + +module Sem_200501_the_default_mechanism_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_Sem_200501_the_default_mechanism_002() runs on GeneralComp { + activate(a()); + p.send(integer:1); + p.send(integer:2); + interleave { + [] p.receive(integer:5) { // not expected: leads to default invocation + setverdict(fail); + } + [] p.receive(integer:2) { // not expected: the first default causes exit from interleave + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_002()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_003.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_003.ttcn new file mode 100644 index 0000000..62cc75a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_003.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify than default are processed in interleave + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +// In particular, the test case is related to the NOTE 1: +// An interleave statement is semantically equivalent to a nested set of alt statements +// and the default mechanism also applies to each of these alt statements. This means, +// the default mechanism also applies to interleave statements. Furthermore, the restrictions +// imposed on interleave statements in clause 20.4 do not apply to altsteps that are +// activated as default behaviour for interleave statements. + +module Sem_200501_the_default_mechanism_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_Sem_200501_the_default_mechanism_003() runs on GeneralComp { + activate(a()); + p.send(integer:1); + p.send(integer:2); + interleave { + [] p.receive(integer:1) { // expected, no default in this case + setverdict(pass); + } + [] p.receive(integer:3) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_003()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_004.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_004.ttcn new file mode 100644 index 0000000..f782b0e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_004.ttcn @@ -0,0 +1,64 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that default processing order is correct + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For each test component the defaults, i.e. activated altsteps, are stored as an ordered +// list. The defaults are listed in the reversed order of their activation i.e. the last +// activated default is the first element in the list of active defaults. + +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +// In the case of a successful termination, the default ... the main control flow of the +// test component will continue immediately after the alt statement from which the default +// mechanism was called... + +// Note: +// In this test case, two altsteps are activated as defaults. The sooner activated +// default leads to a test case failure, but because the last activated default takes +// precedence, it should never happen. + +module Sem_200501_the_default_mechanism_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(fail, "First default"); + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass, "Last default"); + } + } + + testcase TC_Sem_200501_the_default_mechanism_004() runs on GeneralComp { + activate(a1()); + activate(a2()); + p.send(integer:5); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_004()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_005.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_005.ttcn new file mode 100644 index 0000000..8f33efe --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_005.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that default processing order is correct + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For each test component the defaults, i.e. activated altsteps, are stored as an ordered +// list. The defaults are listed in the reversed order of their activation i.e. the last +// activated default is the first element in the list of active defaults. + +// The default mechanism is evoked at the end of each alt statement, if due to the +// actual snapshot none of the specified alternatives could be executed. An evoked +// default mechanism invokes the first altstep in the list of defaults, i.e. the last +// activated default, and waits for the result of its termination. The termination can +// be successful or unsuccessful. + +// In the case of an unsuccessful termination, the default mechanism invokes the next +// default in the list. + +// In the case of a successful termination, the default ... the main control flow of the +// test component will continue immediately after the alt statement from which the default +// mechanism was called... + +// Note: +// In this test case, two altsteps are activated as defaults. The last activated doesn't +// match, which should lead to invokation of the default activated as the first one. + +module Sem_200501_the_default_mechanism_005 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass, "First default"); + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:1) { // no match + setverdict(fail, "Last default"); + } + } + + testcase TC_Sem_200501_the_default_mechanism_005() runs on GeneralComp { + activate(a1()); + activate(a2()); + p.send(integer:5); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_005()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_006.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_006.ttcn new file mode 100644 index 0000000..d18b7de --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_006.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify repeat command behaviour in invoked default + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// In the case of a successful termination, ... the test component will take new +// snapshot and re-evaluate the alt statement. The latter has to be specified by +// means of a repeat statement. + +module Sem_200501_the_default_mechanism_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + var integer vc_messageCounter := 0; + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + vc_messageCounter := vc_messageCounter + 1; + setverdict(pass, "Default value -> repeating alt"); + repeat; + } + } + + testcase TC_Sem_200501_the_default_mechanism_006() runs on GeneralComp { + activate(a()); + p.send(integer:5); + p.send(integer:1); + alt { + [] p.receive(integer:1) { + vc_messageCounter := vc_messageCounter + 1; + setverdict(pass); + } + } + if (vc_messageCounter != 2) { + setverdict(fail, "Different number of received messages (", vc_messageCounter, ") than expected (2)"); + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_006()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_007.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_007.ttcn new file mode 100644 index 0000000..26e29e1 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_007.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify break command behaviour in invoked default + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// If the execution of the selected top alternative of the default ends with a break statement +// the control flow of the test component will continue immediately after the alt statement. + +module Sem_200501_the_default_mechanism_007 { + + type port P message { + inout integer; + } + + type component GeneralComp { + var integer vc_messageCounter := 0; + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + vc_messageCounter := vc_messageCounter + 1; + if (vc_messageCounter == 2) { + setverdict(pass, "Message count full, terminating alt"); + break; + } + setverdict(pass, "Default value -> repeating alt"); + repeat; + } + } + + testcase TC_Sem_200501_the_default_mechanism_007() runs on GeneralComp { + activate(a()); + p.send(integer:5); + p.send(integer:0); + p.send(integer:1); + alt { + [] p.receive(integer:1) { // not expected: break should occur first + vc_messageCounter := vc_messageCounter + 1; + setverdict(fail); + } + } + if (vc_messageCounter != 2) { + setverdict(fail, "Different number of received messages (", vc_messageCounter, ") than expected (2)"); + } + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_007()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_008.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_008.ttcn new file mode 100644 index 0000000..a9df8ac --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200501_the_default_mechanism/Sem_200501_the_default_mechanism_008.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify stop command behaviour in invoked default + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// In the case of a successful termination, the default may either stop the test component +// by means of a stop statement + +module Sem_200501_the_default_mechanism_008 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass, "Default value -> stopping component"); + stop; + } + } + + testcase TC_Sem_200501_the_default_mechanism_008() runs on GeneralComp { + activate(a()); + p.send(integer:5); + alt { + [] p.receive(integer:1) { // not expected: invoking default + setverdict(fail); + } + } + setverdict(fail, "Component stop expected"); + } + + control{ + execute(TC_Sem_200501_the_default_mechanism_008()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_001.ttcn new file mode 100644 index 0000000..df77e3b --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify error is generated if activated alstep runs on incompatible component + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An activate operation will put the referenced altstep as the first element into the list +// of defaults and return a default reference. +// The effect of an activate operation is local to the test component in which it is called. + +module NegSem_200502_the_activate_operation_001 { + + type component GeneralComp { + } + + type port P message { + inout integer; + } + + type component TestComp { + port P p; + } + + altstep a() runs on TestComp { + [] p.receive {} + } + + testcase TC_NegSem_200502_the_activate_operation_001() runs on GeneralComp { + activate(a()); + setverdict(pass); + } + + control{ + execute(TC_NegSem_200502_the_activate_operation_001()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_002.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_002.ttcn new file mode 100644 index 0000000..4599b5f --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_002.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify error is generated when passing local timer + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// All timer instances in the actual parameter list shall be declared as component type local timers. + +module NegSem_200502_the_activate_operation_002 { + + type component GeneralComp { + } + + altstep a(timer t_tmr) runs on GeneralComp { + [] t_tmr.timeout {} + } + + testcase TC_NegSem_200502_the_activate_operation_002() runs on GeneralComp { + if (true) { + timer t_local := 0.5; + t_local.start; + activate(a(t_local)); + } + any port.receive; + setverdict(pass); + } + + control{ + execute(TC_NegSem_200502_the_activate_operation_002()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_003.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_003.ttcn new file mode 100644 index 0000000..108a8cc --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_003.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify error is generated when activating altstep with out parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An altstep that is activated as a default shall only have in parameters, port parameters, or timer parameters. + +module NegSem_200502_the_activate_operation_003 { + + type component GeneralComp { + } + + altstep a(out integer p_val) runs on GeneralComp { + [] any port.receive {} + } + + testcase TC_NegSem_200502_the_activate_operation_003() runs on GeneralComp { + var integer v_val; + activate(a(v_val)); + } + + control{ + execute(TC_NegSem_200502_the_activate_operation_003()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_004.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_004.ttcn new file mode 100644 index 0000000..4fe876e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_004.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify error is generated when activating altstep with inout parameters + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An altstep that is activated as a default shall only have in parameters, port parameters, or timer parameters. + +module NegSem_200502_the_activate_operation_004 { + + type component GeneralComp { + } + + altstep a(inout integer p_val) runs on GeneralComp { + [] any port.receive {} + } + + testcase TC_NegSem_200502_the_activate_operation_004() runs on GeneralComp { + var integer v_val := 1; + activate(a(v_val)); + } + + control{ + execute(TC_NegSem_200502_the_activate_operation_004()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_005.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_005.ttcn new file mode 100644 index 0000000..1082065 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_005.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify error is generated when activating function + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// An activate operation will put the referenced altstep as the first element into the list of defaults +// and return a default reference. + +module NegSem_200502_the_activate_operation_005 { + + type component GeneralComp { + } + + function f() runs on GeneralComp { + alt { + [] any port.receive {} + } + } + + testcase TC_NegSem_200502_the_activate_operation_005() runs on GeneralComp { + activate(f()); + setverdict(pass); + } + + control{ + execute(TC_NegSem_200502_the_activate_operation_005()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_006.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_006.ttcn new file mode 100644 index 0000000..22e9292 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_006.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.5.2, local timer as a parameter of activated altstep in module control + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For altsteps activated in module control or in functions or altsteps invoked +// directly or indirectly from module control, all timer instances in the actual +// parameter list shall be declared in the highest scope of the module control +// part (see clause 26.2). Timers from lower scopes of the module control part +// (i.e. from the nested statement blocks) are not allowed to occur in the actual +// parameter list. + +module NegSem_200502_the_activate_operation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a(timer t_tmr) { + [] t_tmr.timeout { log ("Timeout in default"); } + } + + testcase TC_NegSem_200502_the_activate_operation_006() runs on GeneralComp { + setverdict(pass); + } + + function f_test() { + timer t_tmr := 1.0, t_tmr2; + t_tmr.start; + activate(a(t_tmr)); + alt { + [] t_tmr2.timeout { } + } + } + + control{ + f_test(); + execute(TC_NegSem_200502_the_activate_operation_006()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_007.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_007.ttcn new file mode 100644 index 0000000..bc51d96 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/NegSem_200502_the_activate_operation_007.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.5.2, local timer (referenced through timer parameter) as a parameter of activated altstep in module control + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// For altsteps activated in module control or in functions or altsteps invoked +// directly or indirectly from module control, all timer instances in the actual +// parameter list shall be declared in the highest scope of the module control +// part (see clause 26.2). Timers from lower scopes of the module control part +// (i.e. from the nested statement blocks) are not allowed to occur in the actual +// parameter list. + +module NegSem_200502_the_activate_operation_007 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a(timer t_tmr) { + [] t_tmr.timeout { log ("Timeout in default"); } + } + + testcase TC_NegSem_200502_the_activate_operation_007() runs on GeneralComp { + setverdict(pass); + } + + function f_activate(timer t_tmr) { + activate(a(t_tmr)); + } + + function f_test() { + timer t_tmr := 1.0; + t_tmr.start; + f_activate(t_tmr); // t_tmr is a local timer, this should lead to an activation error in f_activate + } + + control{ + timer t_tmr2; + f_test(); + alt { + [] t_tmr2.timeout { } + } + execute(TC_NegSem_200502_the_activate_operation_007()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_001.ttcn new file mode 100644 index 0000000..c490493 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_001.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify that activate operation can be used as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The activate operation can be called without saving the returned default reference. +// This form is useful in test cases which do not require explicit deactivation +// of the activated default, i.e. deactivation of a default is done implicitly at +// MTC termination. + +// Note: +// An activate operation saving the returned default reference is tested in the section +// 6.2.8. + +module Sem_200502_the_activate_operation_001 { + + type component GeneralComp { + } + + altstep a() runs on GeneralComp + { + [] any port.receive {} + } + + testcase TC_Sem_200502_the_activate_operation_001() runs on GeneralComp { + activate(a()); + setverdict(pass); + } + + control{ + execute(TC_Sem_200502_the_activate_operation_001()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_002.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_002.ttcn new file mode 100644 index 0000000..8ef14c5 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_002.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify that parameters are passed at activation time + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// The actual parameters of a parameterized altstep (see clause 16.2.1) that should +// be activated as a default, shall be provided in the corresponding activate statement. +// This means the actual parameters are bound to the default at the time of its activation +// (and not e.g. at the time of its invocation by the default mechanism). + +module Sem_200502_the_activate_operation_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + const integer c_defaultParValue := 1; + + altstep a(integer p_par) runs on GeneralComp { + [] p.receive(integer:?) { + if (p_par == c_defaultParValue) { setverdict(pass); } + else { setverdict(fail); } + } + } + + testcase TC_Sem_200502_the_activate_operation_002() runs on GeneralComp { + var integer v_num := c_defaultParValue; + activate(a(v_num)); + v_num := v_num + 1; + p.send(integer:5); + alt { + [] p.receive(integer:0) { // not expected: leads to default evocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200502_the_activate_operation_002()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_003.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_003.ttcn new file mode 100644 index 0000000..de3d703 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_003.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify that passing component timer to activated altstep + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// All timer instances in the actual parameter list shall be declared as component type local timers. + +module Sem_200502_the_activate_operation_003 { + + type component GeneralComp { + timer tc_tmr := 0.5; + } + + altstep a(timer t_tmr) runs on GeneralComp { + [] t_tmr.timeout {} + } + + testcase TC_Sem_200502_the_activate_operation_003() runs on GeneralComp { + tc_tmr.start; + activate(a(tc_tmr)); + any port.receive; + setverdict(pass); + } + + control{ + execute(TC_Sem_200502_the_activate_operation_003()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_004.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_004.ttcn new file mode 100644 index 0000000..a9f86c7 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_004.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.2, verify passing port parameter to activated altstep + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// An altstep that is activated as a default shall only have in parameters, port parameters, or timer parameters. + +module Sem_200502_the_activate_operation_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a(P p_port) runs on GeneralComp { + [] p_port.receive(integer:?) { setverdict(pass); } + } + + testcase TC_Sem_200502_the_activate_operation_004() runs on GeneralComp { + activate(a(p)); + p.send(integer:1); + alt { + [] p.receive(integer:0) { setverdict(fail); } + } + } + + control{ + execute(TC_Sem_200502_the_activate_operation_004()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_005.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_005.ttcn new file mode 100644 index 0000000..10cac36 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_005.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.5.2, control block timer as a parameter of activated altstep + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For altsteps activated in module control or in functions or altsteps invoked +// directly or indirectly from module control, all timer instances in the actual +// parameter list shall be declared in the highest scope of the module control +// part (see clause 26.2). Timers from lower scopes of the module control part +// (i.e. from the nested statement blocks) are not allowed to occur in the actual +// parameter list. + +module Sem_200502_the_activate_operation_005 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a(timer t_tmr) { + [] t_tmr.timeout { log ("Timeout in default"); } + } + + testcase TC_Sem_200502_the_activate_operation_005() runs on GeneralComp { + setverdict(pass); + } + + control{ + timer t_tmr := 1.0, t_tmr2; + t_tmr.start; + activate(a(t_tmr)); + alt { + [] t_tmr2.timeout { } + } + execute(TC_Sem_200502_the_activate_operation_005()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_006.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_006.ttcn new file mode 100644 index 0000000..38bb71d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200502_the_activate_operation/Sem_200502_the_activate_operation_006.ttcn @@ -0,0 +1,48 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:20.5.2, control block timer (referenced through timer parameter) as a parameter of activated altstep + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// For altsteps activated in module control or in functions or altsteps invoked +// directly or indirectly from module control, all timer instances in the actual +// parameter list shall be declared in the highest scope of the module control +// part (see clause 26.2). Timers from lower scopes of the module control part +// (i.e. from the nested statement blocks) are not allowed to occur in the actual +// parameter list. + +module Sem_200502_the_activate_operation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a(timer t_tmr) { + [] t_tmr.timeout { log ("Timeout in default"); } + } + + testcase TC_Sem_200502_the_activate_operation_006() runs on GeneralComp { + setverdict(pass); + } + + function f_test(timer t_tmr) { + //timer t_tmr2; + t_tmr.start; + activate(a(t_tmr)); + alt { + [] t_tmr.timeout { } + } + } + + control{ + timer t_tmr := 1.0; + f_test(t_tmr); + execute(TC_Sem_200502_the_activate_operation_006()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_001.ttcn new file mode 100644 index 0000000..010161a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_001.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate deactivated default causes error + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Calling a deactivate operation with an undefined default reference, e.g. an old reference +// to a default that has already been deactivated, shall cause a runtime error. + +module NegSem_200503_the_deactivate_operation_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_NegSem_200503_the_deactivate_operation_001() runs on GeneralComp { + var default v_default := activate(a1()); + p.send(integer:1); + deactivate(v_default); // correct deactivation + deactivate(v_default); // v_default is deactivated at this point -> runtime error + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_200503_the_deactivate_operation_001(), 1.0); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_002.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_002.ttcn new file mode 100644 index 0000000..82ed5a3 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_002.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate uninitialized default causes error + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Calling a deactivate operation with an uninitialized default reference variable +// shall cause a runtime error. + +module NegSem_200503_the_deactivate_operation_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + + testcase TC_NegSem_200503_the_deactivate_operation_002() runs on GeneralComp { + var default v_default; + var boolean v_flag := false; + if (v_flag) { + v_default := activate(a1()); + } + p.send(integer:1); + deactivate(v_default); // uninitialized -> runtime error + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_200503_the_deactivate_operation_002(), 1.0); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_003.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_003.ttcn new file mode 100644 index 0000000..34ea01d --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/NegSem_200503_the_deactivate_operation_003.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that error is generated when deactivated reference is on incorrect type + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// A deactivate operation will remove the referenced default from the list of defaults. + +module NegSem_200503_the_deactivate_operation_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_NegSem_200503_the_deactivate_operation_003() runs on GeneralComp { + var GeneralComp v_ptc := null; + p.send(integer:1); + deactivate(v_ptc); // incorrect type -> error + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_200503_the_deactivate_operation_003()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_001.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_001.ttcn new file mode 100644 index 0000000..040387a --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_001.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate removes default from list of defaults + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// A deactivate operation will remove the referenced default from the list of defaults. + +module Sem_200503_the_deactivate_operation_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(fail, "Deactivated"); // should be deactivated at the time of default processing + } + } + + testcase TC_Sem_200503_the_deactivate_operation_001() runs on GeneralComp { + var default v_default; + activate(a1()); + v_default := activate(a2()); + p.send(integer:1); + deactivate(v_default); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200503_the_deactivate_operation_001()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_002.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_002.ttcn new file mode 100644 index 0000000..02d00df --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_002.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate removes default from list of defaults + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// A deactivate operation will remove the referenced default from the list of defaults. + +// Note: +// The test verifies syntactical variant with a function instance passed as a parameter +// to the deactivate operation. + +module Sem_200503_the_deactivate_operation_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(fail, "Deactivated"); // should be deactivated at the time of default processing + } + } + + function f(default p_default) return default { + return p_default; + } + + testcase TC_Sem_200503_the_deactivate_operation_002() runs on GeneralComp { + var default v_default; + activate(a1()); + v_default := activate(a2()); + p.send(integer:1); + deactivate(f(v_default)); + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200503_the_deactivate_operation_002()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_003.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_003.ttcn new file mode 100644 index 0000000..42c2e31 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_003.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate without parameter clear list of defaults + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// A deactivate operation without parameter deactivates all defaults of a test component. + +module Sem_200503_the_deactivate_operation_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:1) { + setverdict(fail, "Deactivated"); // should be deactivated at the time of default processing + } + } + + altstep a2() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(fail, "Deactivated"); // should be deactivated at the time of default processing + } + } + + testcase TC_Sem_200503_the_deactivate_operation_003() runs on GeneralComp { + timer t := 0.5; + t.start; + activate(a1()); + activate(a2()); + p.send(integer:1); + deactivate; + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + [] t.timeout { // timer should provide enough time to take at least one snapshot + setverdict(pass); + } + } + } + + control{ + execute(TC_Sem_200503_the_deactivate_operation_003()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_004.ttcn b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_004.ttcn new file mode 100644 index 0000000..bd500da --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/2005_default_handling/200503_the_deactivate_operation/Sem_200503_the_deactivate_operation_004.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:20.5.1, verify that deactivate null works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Calling a deactivate operation with the special value null has no effect. + +module Sem_200503_the_deactivate_operation_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a1() runs on GeneralComp { + [] p.receive(integer:?) { + setverdict(pass); + } + } + + testcase TC_Sem_200503_the_deactivate_operation_004() runs on GeneralComp { + var default v_default := null; + activate(a1()); + p.send(integer:1); + deactivate(v_default); // v_default is null: there should be no error and no deactivation + alt { + [] p.receive(integer:0) { // not expected: leads to default invocation + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_200503_the_deactivate_operation_004()); + } +} diff --git a/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_001.ttcn b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_001.ttcn new file mode 100644 index 0000000..56b409e --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20, Ensure that alt-statements are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_20_TopLevel_001 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_test := "ping"; + +testcase TC_Syn_20_TopLevel_001() runs on GeneralComp { + var boolean guard := false; + p.send(m_test); + alt { + [] p.receive(m_test) { + setverdict(pass); + } + [guard == true] p.receive(m_test) { + setverdict(fail); + } + [else] { + setverdict(fail); + } + } +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_002.ttcn b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_002.ttcn new file mode 100644 index 0000000..49abd6b --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20, Ensure that repeat in an alt-statement is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_20_TopLevel_002 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_test := "ping"; + +testcase TC_Syn_20_TopLevel_002() runs on GeneralComp { + var integer counter := 1; + p.send(m_test); + alt { + [counter == 1] p.receive(m_test) { + counter := counter + 1; + repeat; + } + [else] { + setverdict(pass); + } + } +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_003.ttcn b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_003.ttcn new file mode 100644 index 0000000..e4cf4e0 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_003.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20, Ensure that the interleave-statement is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_20_TopLevel_003 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +testcase TC_Syn_20_TopLevel_003() runs on GeneralComp { + p.send(m_testOne); + p.send(m_testTwo); + interleave { + [] p.receive(m_testOne) { + } + [] p.receive(m_testTwo) { + } + } + setverdict(pass); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_004.ttcn b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_004.ttcn new file mode 100644 index 0000000..c109174 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_004.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20, Ensure that defaults and the activate statement is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_20_TopLevel_004 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +altstep a_catchError() runs on GeneralComp { + [] any port.receive { + } +} + +testcase TC_Syn_20_TopLevel_004() runs on GeneralComp { + var default v_errorDefault := activate(a_catchError()); + p.send(m_testOne); + alt { + [] p.receive(m_testOne) { + } + } + setverdict(pass); +} + +} \ No newline at end of file diff --git a/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_005.ttcn b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_005.ttcn new file mode 100644 index 0000000..1230052 --- /dev/null +++ b/core_language/20_statement_and_operations_for_alt/20_toplevel/Syn_20_TopLevel_005.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:20, Ensure that defaults and the activate statement is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_20_TopLevel_005 { + +type port MyPort message { + inout charstring +} + +type component GeneralComp { + port MyPort p; +} + +template charstring m_testOne := "ping1"; +template charstring m_testTwo := "ping2"; + +altstep a_catchError() runs on GeneralComp { + [] any port.receive { + } +} + +testcase TC_Syn_20_TopLevel_005() runs on GeneralComp { + var default v_errorDefault := activate(a_catchError()); + p.send(m_testOne); + alt { + [] p.receive(m_testOne) { + } + } + deactivate(v_errorDefault); + setverdict(pass); +} + +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NOTES b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NOTES new file mode 100644 index 0000000..f49c96a --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NOTES @@ -0,0 +1 @@ +More connect and map test are given in section 9.1 \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_001.ttcn new file mode 100644 index 0000000..1971f53 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_001.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that connect operation rejects ports with incompatible message type lists + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, inlists and outlists are completely incompatible + +module NegSem_210101_connect_and_map_operations_001 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + in R; + } + + type port P2 message { + out bitstring; + in boolean; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + testcase TC_NegSem_210101_connect_and_map_operations_001() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + connect(v_ptc1:p, v_ptc2:p); // incompatible message types: error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_001()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_002.ttcn new file mode 100644 index 0000000..e579377 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_002.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that connect operation rejects ports with only partially compatible message type lists + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, one pair in outlist-PORT1 and inlist-PORT2 is incompatible (using +// strong typing rules) + +module NegSem_210101_connect_and_map_operations_002 { + type record R { + integer field1, + charstring field2 + } + + type record R2 { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R; + } + + type port P2 message { + in R2, integer; + out integer; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + testcase TC_NegSem_210101_connect_and_map_operations_002() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + // R2 and R are compatible types, but strong typing is required in case of connection operation + connect(v_ptc1:p, v_ptc2:p); // incompatible message types: error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_002()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_003.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_003.ttcn new file mode 100644 index 0000000..5134dbd --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_003.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that map operation rejects ports with incompatible message type lists + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, inlists and outlists are completely incompatible + +module NegSem_210101_connect_and_map_operations_003 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R; + } + + type port P2 message { + out boolean; + in bitstring; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_NegSem_210101_connect_and_map_operations_003() runs on GeneralComp system SystemComp { + map(system:p, self:p); // incompatible message types: error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_003()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_004.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_004.ttcn new file mode 100644 index 0000000..7a2316a --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_004.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that connect operation rejects ports with only partially compatible message type lists + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, one pair in outlist-PORT1 and inlist-PORT2 is incompatible (using +// strong typing rules) + +module NegSem_210101_connect_and_map_operations_004 { + type record R { + integer field1, + charstring field2 + } + + type record R2 { + integer field1, + charstring field2 + } + + type port P1 message { + in integer; + inout R; + } + + type port P2 message { + in integer, R; + out R2; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_NegSem_210101_connect_and_map_operations_004() runs on GeneralComp system SystemComp { + // R2 and R are compatible types, but strong typing is required in case of connection operation + map(system:p, self:p); // incompatible message types: error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_004()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_005.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_005.ttcn new file mode 100644 index 0000000..0d05dae --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_005.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that map parameters cannot be used when not declared in the port type + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction g: +// If in a map operation a param clause is present, the actual parameters shall conform +// to the map param clause of the port type declaration of the system port used. + +module NegSem_210101_connect_and_map_operations_005 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210101_connect_and_map_operations_005() runs on GeneralComp system GeneralComp { + map(system:p, self:p) param(5); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_005()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_006.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_006.ttcn new file mode 100644 index 0000000..04383b4 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_006.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that type incompatibility in map parameters is detected + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction g: +// If in a map operation a param clause is present, the actual parameters shall conform +// to the map param clause of the port type declaration of the system port used. + +module NegSem_210101_connect_and_map_operations_006 { + + type port P message { + inout integer; + map param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210101_connect_and_map_operations_006() runs on GeneralComp system GeneralComp { + map(system:p, self:p) param("5"); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_006()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_007.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_007.ttcn new file mode 100644 index 0000000..548a2c2 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_007.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that parameter count mismatch in map param clause is detected + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction g: +// If in a map operation a param clause is present, the actual parameters shall conform +// to the map param clause of the port type declaration of the system port used. + +module NegSem_210101_connect_and_map_operations_007 { + + type port P message { + inout integer; + map param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210101_connect_and_map_operations_007() runs on GeneralComp system GeneralComp { + map(system:p, self:p) param(5, 3); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_007()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_008.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_008.ttcn new file mode 100644 index 0000000..0a7b926 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_008.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for local ports in connect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_008 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_connect() runs on GeneralComp { + connect(self:p, self:p2); // although the actual instance of self contains the p2 port, + // it cannot be referenced as the "runs on" clause contains the GeneralComp type and + // not GeneralCompEx + } + + testcase TC_NegSem_210101_connect_and_map_operations_008() runs on GeneralCompEx system GeneralComp { + f_connect(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_008()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_009.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_009.ttcn new file mode 100644 index 0000000..5466f8f --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_009.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for MTC ports in connect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_009 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_connect() runs on GeneralCompEx mtc GeneralComp { + connect(mtc:p2, self:p); // although the actual instance of MTC contains the p2 port, + // it cannot be referenced as the mtc clause of the f_connect function contains + // the GeneralComp type and not GeneralCompEx + } + + testcase TC_NegSem_210101_connect_and_map_operations_009() runs on GeneralCompEx system GeneralComp { + f_connect(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_009()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_010.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_010.ttcn new file mode 100644 index 0000000..ae811f1 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_010.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for PTC ports in connect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_010 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + testcase TC_NegSem_210101_connect_and_map_operations_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralCompEx.create; + connect(self:p, v_ptc:p2); // although the actual PTC instance contains the p2 port, + // it cannot be referenced as the variable v_ptc is of the GeneralComp type and + // not GeneralCompEx + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_010()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_011.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_011.ttcn new file mode 100644 index 0000000..de870af --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_011.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for local ports in map operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_011 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_map() runs on GeneralComp system GeneralComp { + map(system:p, self:p2); // although the actual instance of self contains the p2 port, + // it cannot be referenced as the "runs on" clause contains the GeneralComp type and + // not GeneralCompEx + } + + testcase TC_NegSem_210101_connect_and_map_operations_011() runs on GeneralCompEx system GeneralComp { + f_map(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_011()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_012.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_012.ttcn new file mode 100644 index 0000000..6953aac --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_012.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for MTC ports in map operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_012 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_map() runs on GeneralCompEx mtc GeneralComp system GeneralComp { + map(mtc:p2, system:p); // although the actual instance of MTC contains the p2 port, + // it cannot be referenced as the mtc clause of the f_connect function contains + // the GeneralComp type and not GeneralCompEx + } + + testcase TC_NegSem_210101_connect_and_map_operations_012() runs on GeneralCompEx system GeneralComp { + f_map(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_012()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_013.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_013.ttcn new file mode 100644 index 0000000..d56fbdc --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_013.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for PTC ports in map operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_013 { + + type port P message { + inout integer; + map param (integer p_par1); + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + testcase TC_NegSem_210101_connect_and_map_operations_013() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralCompEx.create; + map(system:p, v_ptc:p2); // although the actual PTC instance contains the p2 port, + // it cannot be referenced as the variable v_ptc is of the GeneralComp type and + // not GeneralCompEx + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_013()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_014.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_014.ttcn new file mode 100644 index 0000000..b5f0fa4 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_and_map_operations_014.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.1, violation of strong typing rules for system ports in map operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined in the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210101_connect_and_map_operations_014 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_map() runs on GeneralComp system GeneralComp { + map(self:p, system:p2); // although the actual instance of TSI contains the p2 port, + // it cannot be referenced as the system clause of the f_map function contains + // the GeneralComp type and not GeneralCompEx + } + + testcase TC_NegSem_210101_connect_and_map_operations_014() runs on GeneralComp system GeneralCompEx { + f_map(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_connect_and_map_operations_014()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_operation_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_operation_001.ttcn new file mode 100644 index 0000000..1109035 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_connect_operation_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Ensure that the the IUT does not allows two output port connection + ** @verdict pass reject + ***************************************************/ +//Test the two output port cannot connect +module NegSem_210101_connect_operation_001{ + + type port myport message { + out integer + } + + +type component Mysystem + { + port myport messagePort; + } + +testcase TC_NegSem_210101_connect_operation_001() runs on Mysystem system Mysystem { + var Mysystem MyCompA; + var Mysystem MyCompB; + +MyCompA:=Mysystem.create; +MyCompB:=Mysystem.create; +connect(MyCompA:messagePort,MyCompB:messagePort); //not allowed messageports are output + +} +control{ + execute(TC_NegSem_210101_connect_operation_001()); +} +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_map_operation_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_map_operation_002.ttcn new file mode 100644 index 0000000..5668748 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/NegSem_210101_map_operation_002.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 451 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:21.1.1, Ensure that IUT cannot map input port with output port + ** @verdict pass reject + ***************************************************/ + +// Mycompport A P1 is output port mapped to SUT in port +module NegSem_210101_map_operation_002{ + + type port loopbackPort message { + inout integer + } +type port IntegerOutputPortType message { + out integer + } + +type component GeneralComp + { + + port IntegerOutputPortType MycomportA + } + +type component MyTestSystemInterface + { + port loopbackPort messagePort + } +// MyTestSystemInterface is the test system interface +testcase TC_NegSem_210101_map_operation_002() runs on GeneralComp system MyTestSystemInterface { +// establishing the port connections +map(mtc:MycomportA, system:messagePort); //not allowed: MycomportA is out port, meanwhile MySysteminterface port is input + +} +control{ + execute(TC_NegSem_210101_map_operation_002()); +} +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn new file mode 100644 index 0000000..55547ab --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_001.ttcn @@ -0,0 +1,84 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Connect operation accepts ports with compatible message type list containing several types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, outlist-PORT1 == inlist-PORT2 and outlist-PORT2 == inlist-PORT1 + +module Sem_210101_connect_and_map_operations_001 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R, charstring; + } + + type port P2 message { + in charstring, R, integer; + out integer; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + function f1() runs on C1 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + function f2() runs on C2 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + testcase TC_Sem_210101_connect_and_map_operations_001() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + connect(v_ptc1:p, v_ptc2:p); // compatible, 1:1 mapping + v_ptc1.start(f1()); + v_ptc2.start(f2()); + all component.done; + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_001()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_002.ttcn new file mode 100644 index 0000000..7456178 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_002.ttcn @@ -0,0 +1,86 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Connect operation accepts ports where outlist of the 1st port is a subset of inlist of the 2nd port + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, outlist-PORT1 ⊂ inlist-PORT2 and outlist-PORT2 == inlist-PORT1 + +module Sem_210101_connect_and_map_operations_002 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R; + } + + type port P2 message { + in charstring, boolean, R, integer; + out integer; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + function f1() runs on C1 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + function f2() runs on C2 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + + testcase TC_Sem_210101_connect_and_map_operations_002() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + // v_ptc1:p outlist is (integer, R) and v_ptc2:p inlist is (charstring, boolean, R, integer) + connect(v_ptc1:p, v_ptc2:p); + v_ptc1.start(f1()); + v_ptc2.start(f2()); + all component.done; + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_002()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_003.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_003.ttcn new file mode 100644 index 0000000..8e9d07c --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_003.ttcn @@ -0,0 +1,86 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Connect operation accepts ports where outlist of the 2nd port is a subset of inlist of the 1st port + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, outlist-PORT1 == inlist-PORT2 and outlist-PORT2 ⊂ inlist-PORT1 + +module Sem_210101_connect_and_map_operations_003 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R; + } + + type port P2 message { + in charstring, boolean, R, integer; + out integer; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + function f1() runs on C1 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + function f2() runs on C2 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + + testcase TC_Sem_210101_connect_and_map_operations_003() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + // v_ptc2:p inlist is (charstring, boolean, R, integer) and v_ptc1:p outlist is (integer, R) + connect(v_ptc2:p, v_ptc1:p); + v_ptc1.start(f1()); + v_ptc2.start(f2()); + all component.done; + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_003()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_004.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_004.ttcn new file mode 100644 index 0000000..2af32be --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_004.ttcn @@ -0,0 +1,86 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Connect operation accepts ports where outlist of both ports are subsets of inlist of the counterpart ports + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// +// In this test, outlist-PORT1 ⊂inlist-PORT2 and outlist-PORT2 ⊂ inlist-PORT1 + +module Sem_210101_connect_and_map_operations_004 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer, R; + in bitstring; + } + + type port P2 message { + in charstring, boolean, R, integer; + out integer; + } + + type component GeneralComp { + } + + type component C1 { + port P1 p; + } + + type component C2 { + port P2 p; + } + + function f1() runs on C1 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + function f2() runs on C2 + { + timer t := 1.0; + t.start; + if(p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + testcase TC_Sem_210101_connect_and_map_operations_004() runs on GeneralComp system GeneralComp { + var C1 v_ptc1 := C1.create; + var C2 v_ptc2 := C2.create; + // v_ptc1:p outlist is (integer, R) and v_ptc2:p inlist is (charstring, boolean, R, integer) + // v_ptc2:p outlist is (integer) and v_ptc2:p inlist is (R, integer, bitstring) + connect(v_ptc1:p, v_ptc2:p); + v_ptc1.start(f1()); + v_ptc2.start(f2()); + all component.done; + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_004()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn new file mode 100644 index 0000000..4a5923f --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_005.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Map operation accepts ports with compatible message type list containing several types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, outlist-PORT1 == outlist-PORT2 and inlist-PORT2 == inlist-PORT1 + +module Sem_210101_connect_and_map_operations_005 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R, charstring; + } + + type port P2 message { + out charstring, R, integer; + in integer; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_Sem_210101_connect_and_map_operations_005() runs on GeneralComp system SystemComp { + map(self:p, system:p); // compatible, 1:1 mapping + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_005()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn new file mode 100644 index 0000000..c0a98c2 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_006.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Map operation accepts ports with compatible message type list containing several types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, outlist-PORT1 ⊂ outlist-PORT2 and inlist-PORT2 == inlist-PORT1 + +module Sem_210101_connect_and_map_operations_006 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + inout integer; + out R; + } + + type port P2 message { + out charstring, R, integer, bitstring; + in integer; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_Sem_210101_connect_and_map_operations_006() runs on GeneralComp system SystemComp { + // self:p outlist is (integer, R) and system:p outlist is (charstring, boolean, R, integer) + map(self:p, system:p); + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_006()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_007.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_007.ttcn new file mode 100644 index 0000000..abd280e --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_007.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Map operation accepts ports with compatible message type list containing several types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, outlist-PORT1 == outlist-PORT2 and inlist-PORT2 ⊂ inlist-PORT1 + +module Sem_210101_connect_and_map_operations_007 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + in charstring, bitstring; + inout integer; + out R; + } + + type port P2 message { + out R, integer; + in integer; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_Sem_210101_connect_and_map_operations_007() runs on GeneralComp system SystemComp { + // self:p inlist is (integer, charstring, bitstring) and system:p inlist is (integer) + map(system:p, self:p); + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_007()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_008.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_008.ttcn new file mode 100644 index 0000000..8e8c568 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_008.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Map operation accepts ports with compatible message type list containing several types + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// For the connect operations, only consistent connections are allowed. +// a) Assuming the following: +// 1) ports PORT1 and PORT2 are the ports to be connected; +// 2) inlist-PORT1 defines the messages or procedures of the in-direction of PORT1; +// 3) outlist-PORT1defines the messages or procedures of the out-direction of PORT1; +// 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. +// 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. +// +// In this test, outlist-PORT1 ⊂ outlist-PORT2 and inlist-PORT2 ⊂ inlist-PORT1 + +module Sem_210101_connect_and_map_operations_008 { + type record R { + integer field1, + charstring field2 + } + + type port P1 message { + in charstring, bitstring; + inout integer; + out R; + } + + type port P2 message { + out R, integer, boolean; + in integer; + } + + type component GeneralComp { + port P1 p + } + + type component SystemComp { + port P2 p; + } + + testcase TC_Sem_210101_connect_and_map_operations_008() runs on GeneralComp system SystemComp { + // self:p inlist is (integer, charstring, bitstring) and system:p inlist is (integer) + // self:p outlist is (integer, R) and system:p outlist is (integer, R, boolean) + map(system:p, self:p); + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_008()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn new file mode 100644 index 0000000..4c223af --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_009.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 433, STF 470 + ** @version 0.0.2 + ** @purpose 1:21.1.1, Ensure that map param statements are allowed in testcase block + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210101_connect_and_map_operations_009 { + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType1 { + integer field1, + charstring field2, + boolean field3 + } + + type port MyMessagePortType message { + inout integer; + map param (in MyMessageType1 p1, inout charstring p2); + } + + const MyMessageType1 c_myTemplate1 := { + field1 := 2, + field2 := "foobar", + field3 := true + } + + testcase TC_Sem_210101_connect_and_map_operations_009() runs on GeneralComp system GeneralComp { + var charstring v_varString := "foobar"; + + map(mtc:pt_myPort, system:pt_myPort) param(c_myTemplate1, v_varString); + + pt_myPort.send(13); + log("Map inout parameter: ", v_varString); + + if(pt_myPort.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + unmap(mtc:pt_myPort, system:pt_myPort); + + setverdict(pass); + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_009()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_010.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_010.ttcn new file mode 100644 index 0000000..0fb7873 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_010.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.1, Verify that the param part can be skipped in map operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Restriction g: +// In map operations, param clauses are optional. + +module Sem_210101_connect_and_map_operations_010 { + + type port P message { + inout integer; + map param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_Sem_210101_connect_and_map_operations_010() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_Sem_210101_connect_and_map_operations_010()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_011.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_011.ttcn new file mode 100644 index 0000000..27d4b9c --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_011.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 451 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:21.1.1, Ensure that the the IUT allows connecting ports with empty outlists + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// NOTE: the test shall pass as empty set (in this case a list of allowed out types) is always a subset +// of another set (in this case a list of allowed in types). For that reason, the test was changed +// into a positive one as it does not violate any TTCN-3 requirement. +// Of course it doesn't make much sense to connect these two ports as communication is not possible +// between them. A CR7607 was submitted to mantis to add a new restriction to the core language standard. + +module Sem_210101_connect_and_map_operations_011 { + + type port myport message { + in integer + } + + type component Mysystem { + port myport messagePort; + } + + testcase TC_Sem_210101_connect_and_map_operations_011() runs on Mysystem system Mysystem { + var Mysystem MyCompA := Mysystem.create, + MyCompB := Mysystem.create; + connect(MyCompA:messagePort, MyCompB:messagePort); + setverdict(pass); + } + + control { + execute(TC_Sem_210101_connect_and_map_operations_011(), 5.0); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_012.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_012.ttcn new file mode 100644 index 0000000..d5b953b --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210101_connect_and_map_operations/Sem_210101_connect_and_map_operations_012.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 451 (updated by STF 521) + ** @version 0.0.1 + ** @purpose 1:21.1.1, Ensure that IUT can map ports with empty outlist-PORT1 and inlist-PORT2 + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// NOTE: the test shall pass as empty set (in this case outlist-PORT1 and inlist-PORT2) is always a subset +// of another set (in this case outlist-PORT2 and inlist-PORT1). For that reason, the test was changed +// into a positive one as it does not violate any TTCN-3 requirement. +// Of course it doesn't make much sense to map these two ports as communication is not possible +// between them. A CR7607 was submitted to mantis to add a new restriction to the core language standard. + +module Sem_210101_connect_and_map_operations_012 { + + type port LoopbackPort message { + out integer + } + type port IntegerOutputPortType message { + in integer + } + + type component GeneralComp { + port IntegerOutputPortType MycomportA + } + + type component MyTestSystemInterface { + port LoopbackPort messagePort + } + + // MyTestSystemInterface is the test system interface + testcase TC_Sem_210101_connect_and_map_operations_012() runs on GeneralComp system MyTestSystemInterface { + // establishing the port connections + map(mtc:MycomportA, system:messagePort); //not allowed: MycomportA is in port, meanwhile MySysteminterface port is output + setverdict(pass); + } + + control { + execute(TC_Sem_210101_connect_and_map_operations_012()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_001.ttcn new file mode 100644 index 0000000..657ce69 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_001.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that unmap operation cannot contain a system port reference + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The disconnect and unmap operations are the opposite operations of connect and map. +// (21.1) The ports of a test component can be connected to other components or to the +// ports of the test system interface. When connecting a test component to a test system +// interface the map operation shall be used. + +module NegSem_210102_disconnect_and_unmap_operations_001 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + + connect(self:p, v_ptc:p); + unmap(self:p, v_ptc:p); // no system port reference: error expected + } + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_001()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_002.ttcn new file mode 100644 index 0000000..e91c4db --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_002.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that disconnecting all ports of all components is not possible in PTC + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The all component keyword ... shall only be used by the MTC. + +module NegSem_210102_disconnect_and_unmap_operations_002 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp { + disconnect(all component:all port); // error: allowed in PTC only + setverdict(pass); + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + v_ptc.done; // wait for the PTC to finish + } + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_002()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_003.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_003.ttcn new file mode 100644 index 0000000..263b6ce --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_003.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that unmapping all ports of all components is not possible in PTC + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The all component keyword ... shall only be used by the MTC. + +module NegSem_210102_disconnect_and_unmap_operations_003 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp { + unmap(all component:all port); // error: allowed in PTC only + setverdict(pass); + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + map(self:p, system:p); + map(v_ptc:p, system:p); + v_ptc.start(f()); + v_ptc.done; // wait for the PTC to finish + } + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_003()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_004.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_004.ttcn new file mode 100644 index 0000000..679be7d --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_004.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that unmap parameters cannot be used when not declared in the port type + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction b: +// If in a unmap operation a param clause is present, the actual parameters shall conform +// to the unmap param clause of the port type declaration of the system port used. + +module NegSem_210102_disconnect_and_unmap_operations_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_004() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(system:p, self:p) param(5); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_004()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_005.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_005.ttcn new file mode 100644 index 0000000..42b149d --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_005.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that type incompatibility in unmap parameters is detected + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction b: +// If in a unmap operation a param clause is present, the actual parameters shall conform +// to the unmap param clause of the port type declaration of the system port used. + +module NegSem_210102_disconnect_and_unmap_operations_005 { + + type port P message { + inout integer; + unmap param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_005() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(self:p, system:p) param("5"); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_005()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_006.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_006.ttcn new file mode 100644 index 0000000..b246a9b --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_006.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that parameter count mismatch in unmap param clause is detected + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction b: +// If in a unmap operation a param clause is present, the actual parameters shall conform +// to the unmap param clause of the port type declaration of the system port used. + +module NegSem_210102_disconnect_and_unmap_operations_006 { + + type port P message { + inout integer; + unmap param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_006() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(self:p, system:p) param(5, 3); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_006()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_007.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_007.ttcn new file mode 100644 index 0000000..ec4456a --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_007.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that the param clause cannot be used when unmap contains no system port reference + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Restriction a: +// In an unmap operation, a param clause shall only be present if the system port to +// which the param clause belongs to is explicitly referenced. + +module NegSem_210102_disconnect_and_unmap_operations_007 { + + type port P message { + inout integer; + unmap param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_007() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(self:p) param(3); + if(not p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_007()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_008.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_008.ttcn new file mode 100644 index 0000000..5d5a3c8 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_008.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for local ports in disconnect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_008 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_disconnect() runs on GeneralComp { + disconnect(self:p, self:p2); // although the actual instance of self contains the p2 port, + // it cannot be referenced as the "runs on" clause contains the GeneralComp type and + // not GeneralCompEx + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_008() runs on GeneralCompEx system GeneralComp { + connect(self:p, self:p2); + f_disconnect(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_008()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_009.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_009.ttcn new file mode 100644 index 0000000..a9fe3c1 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_009.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for MTC ports in disconnect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_009 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_disconnect() runs on GeneralCompEx mtc GeneralComp { + disconnect(mtc:p2, self:p); // although the actual instance of MTC contains the p2 port, + // it cannot be referenced as the mtc clause of the f_connect function contains + // the GeneralComp type and not GeneralCompEx + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_009() runs on GeneralCompEx system GeneralComp { + connect(mtc:p2, self:p); + f_disconnect(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_009()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_010.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_010.ttcn new file mode 100644 index 0000000..17ddd67 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_010.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for PTC ports in disconnect operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_010 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_010() runs on GeneralComp system GeneralComp { + var GeneralCompEx v_ptc := GeneralCompEx.create; + var GeneralComp v_ptcAlias := v_ptc; + connect(self:p, v_ptc:p2); + disconnect(self:p, v_ptcAlias:p2);// although the actual PTC instance contains the p2 port, + // it cannot be referenced as the variable v_ptc is of the GeneralComp type and + // not GeneralCompEx + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_010()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_011.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_011.ttcn new file mode 100644 index 0000000..02a909c --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_011.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for local ports in unmap operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_011 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_unmap() runs on GeneralComp system GeneralComp { + unmap(self:p2, system:p); // although the actual instance of self contains the p2 port, + // it cannot be referenced as the "runs on" clause contains the GeneralComp type and + // not GeneralCompEx + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_011() runs on GeneralCompEx system GeneralComp { + map(self:p2, system:p); + f_unmap(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_011()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_012.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_012.ttcn new file mode 100644 index 0000000..e33ad2c --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_012.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for MTC ports in unmap operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_012 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_unmap() runs on GeneralCompEx mtc GeneralComp system GeneralComp { + unmap(mtc:p2, system:p); // although the actual instance of MTC contains the p2 port, + // it cannot be referenced as the mtc clause of the f_connect function contains + // the GeneralComp type and not GeneralCompEx + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_012() runs on GeneralCompEx system GeneralComp { + map(mtc:p2, system:p); + f_unmap(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_012()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_013.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_013.ttcn new file mode 100644 index 0000000..b264769 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_013.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for PTC ports in unmap operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_013 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_013() runs on GeneralComp system GeneralComp { + var GeneralCompEx v_ptc := GeneralCompEx.create; + var GeneralComp v_ptcAlias := v_ptc; + map(system:p, v_ptc:p2); + unmap(system:p, v_ptcAlias:p2);// although the actual PTC instance contains the p2 port, + // it cannot be referenced as the variable v_ptc is of the GeneralComp type and + // not GeneralCompEx + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_013()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_014.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_014.ttcn new file mode 100644 index 0000000..b1e5d61 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/NegSem_210102_disconnect_and_unmap_operations_014.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.1.2, violation of strong typing rules for system ports in unmap operations + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// If the type of the component referenced in a connection operation is known (either +// when the component reference is a variable or value returned from a function or the +// type is defined the runs on, mtc or system clause of the calling function), the +// referenced port declaration shall be present in this component type. + +module NegSem_210102_disconnect_and_unmap_operations_014 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component GeneralCompEx extends GeneralComp { + port P p2; + } + + function f_unmap() runs on GeneralComp system GeneralComp { + unmap(self:p, system:p2); // although the actual instance of TSI contains the p2 port, + // it cannot be referenced as the system clause contains the GeneralComp type and + // not GeneralCompEx + } + + testcase TC_NegSem_210102_disconnect_and_unmap_operations_014() runs on GeneralComp system GeneralCompEx { + map(self:p, system:p2); + f_unmap(); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210102_disconnect_and_unmap_operations_014()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_001.ttcn new file mode 100644 index 0000000..20ee5eb --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_001.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that disconnect operation with two parameters works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The disconnect ... operations perform the disconnection (of previously connected) +// ports of test components... + +module Sem_210102_disconnect_and_unmap_operations_001{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkConnected(boolean p_stateActive) runs on GeneralComp + { + if(p.checkstate("Connected") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_001() runs on GeneralComp system GeneralComp { + // components are created alive so that their connections are not destroyed when behaviour stops + var GeneralComp v_ptc1 := GeneralComp.create alive, + v_ptc2 := GeneralComp.create alive, + v_ptc3 := GeneralComp.create alive; + + connect(v_ptc1:p, v_ptc2:p); + connect(v_ptc1:p, v_ptc3:p); + + disconnect(v_ptc1:p, v_ptc2:p); + + // verity that ports are really disconnected + v_ptc1.start(checkConnected(true)); // still connectected to v_ptc3:p + v_ptc2.start(checkConnected(false)); // no active connection + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_001()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_002.ttcn new file mode 100644 index 0000000..ebaba9d --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_002.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that disconnect operation with one parameter works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// To ease disconnect ... operations related to all connections ... of ... a port, it is +// allowed to use disconnect ... operations with one argument only. This one argument +// specifies one side of the connections to be disconnected... + +module Sem_210102_disconnect_and_unmap_operations_002{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkDisconnected() runs on GeneralComp + { + if(not p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_002() runs on GeneralComp system GeneralComp { + // components are created alive so that their connections are not destroyed when behaviour stops + var GeneralComp v_ptc1 := GeneralComp.create alive, + v_ptc2 := GeneralComp.create alive, + v_ptc3 := GeneralComp.create alive; + + connect(v_ptc1:p, v_ptc2:p); + connect(v_ptc1:p, v_ptc3:p); + + disconnect(v_ptc1:p); + + // verity that ports are really disconnected + v_ptc2.start(checkDisconnected()); + v_ptc3.start(checkDisconnected()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_002()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_003.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_003.ttcn new file mode 100644 index 0000000..5f5406d --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_003.ttcn @@ -0,0 +1,68 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that disconnect operation with all ports of a component works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// To ease disconnect ... operations related to all connections ... of a component ..., +// it is allowed to use disconnect ... operations with one argument only. This one argument +// specifies one side of the connections to be disconnected... The all port keyword can be +// used to denote all ports of a component. + +module Sem_210102_disconnect_and_unmap_operations_003{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + function checkAllDisconnected() runs on GeneralComp + { + timer t := 1.0; + t.start; + if(not p1.checkstate("Connected") and not p2.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + function checkSecondConnected() runs on GeneralComp + { + if(not p1.checkstate("Connected") and p2.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_003() runs on GeneralComp system GeneralComp { + // components are created alive so that their connections are not destroyed when behaviour stops + var GeneralComp v_ptc1 := GeneralComp.create alive, + v_ptc2 := GeneralComp.create alive, + v_ptc3 := GeneralComp.create alive; + + connect(v_ptc1:p1, v_ptc2:p1); + connect(v_ptc1:p2, v_ptc3:p1); + connect(v_ptc2:p2, v_ptc3:p2); + + disconnect(v_ptc1:all port); + + // verity that ports are really disconnected + v_ptc1.start(checkAllDisconnected()); + v_ptc2.start(checkSecondConnected()); + v_ptc3.start(checkSecondConnected()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_003()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_004.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_004.ttcn new file mode 100644 index 0000000..2ed0c76 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_004.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that disconnect operation with no argument works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The usage of a disconnect ... operation without any parameters is a shorthand +// form for using the operation with the parameter self:all port. It disconnects +// ... all ports of the component that calls the operation. + +module Sem_210102_disconnect_and_unmap_operations_004{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + function checkSecondConnected() runs on GeneralComp + { + if(not p1.checkstate("Connected") and p2.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_004() runs on GeneralComp system GeneralComp { + // components are created alive so that their connections are not destroyed when behaviour stops + var GeneralComp v_ptc1 := GeneralComp.create alive, + v_ptc2 := GeneralComp.create alive; + + connect(self:p1, v_ptc1:p1); + connect(self:p2, v_ptc2:p1); + connect(v_ptc1:p2, v_ptc2:p2); + + disconnect; + + // verity that ports are really disconnected + v_ptc1.start(checkSecondConnected()); + v_ptc2.start(checkSecondConnected()); + if(not p1.checkstate("Connected") and not p2.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_004()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_005.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_005.ttcn new file mode 100644 index 0000000..56b16fa --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_005.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that unmap operation with one system port as a parameter works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// To ease ... map operations related to all ... mappings of ... a port, it is +// allowed to use ... unmap operations with one argument only. This one argument +// specifies one side of the connections to be ... unmapped. + +module Sem_210102_disconnect_and_unmap_operations_005 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkUnmapped() runs on GeneralComp + { + if(not p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p, system:p); + map(v_ptc1:p, system:p); + + unmap(system:p); + + // verity that ports are really unmapped + checkUnmapped(); + v_ptc1.start(checkUnmapped()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_005()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_006.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_006.ttcn new file mode 100644 index 0000000..5c99637 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_006.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that unmap operation with one component port as a parameter works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// To ease ... map operations related to all ... mappings of ... a port, it is +// allowed to use ... unmap operations with one argument only. This one argument +// specifies one side of the connections to be ... unmapped. + +module Sem_210102_disconnect_and_unmap_operations_006 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkMapped(boolean p_stateActive) runs on GeneralComp + { + if(p.checkstate("Mapped") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p, system:p); + map(v_ptc1:p, system:p); + + unmap(v_ptc1:p); + + // verity that ports are really unmapped + checkMapped(true); // still mapped to system:p + v_ptc1.start(checkMapped(false)); // no active mapping + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_006()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_007.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_007.ttcn new file mode 100644 index 0000000..24e75ac --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_007.ttcn @@ -0,0 +1,58 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that unmap operation with all ports of a component works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// To ease ... map operations related to all ... mappings of a component ..., it is +// allowed to use ... unmap operations with one argument only. This one argument +// specifies one side of the connections to be ... unmapped. The all port keyword +// can be used to denote all ports of a component. + +module Sem_210102_disconnect_and_unmap_operations_007 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + function checkPortMapped(boolean p_stateActive, P p_port) + { + if(p_port.checkstate("Mapped") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + function checkMapped(boolean p_stateActive) runs on GeneralComp + { + checkPortMapped(p_stateActive, p1); + checkPortMapped(p_stateActive, p2); + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p1, system:p1); + map(self:p2, system:p2); + map(v_ptc1:p1, system:p1); + map(v_ptc1:p2, system:p2); + + unmap(v_ptc1:all port); + + // verity that ports are really unmapped + checkMapped(true); // still mapped to system:p1 and system:p2 + v_ptc1.start(checkMapped(false)); // no active mapping + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_007()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_008.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_008.ttcn new file mode 100644 index 0000000..557620e --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_008.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that unmap operation with no parameters works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The usage of an ... unmap operation without any parameters is a shorthand +// form for using the operation with the parameter self:all port. It ... +// unmaps all ports of the component that calls the operation. + +module Sem_210102_disconnect_and_unmap_operations_008 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + function checkPortMapped(boolean p_stateActive, P p_port) + { + if(p_port.checkstate("Mapped") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + function checkMapped(boolean p_stateActive) runs on GeneralComp + { + checkPortMapped(p_stateActive, p1); + checkPortMapped(p_stateActive, p2); + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p1, system:p1); + map(self:p2, system:p2); + map(v_ptc1:p1, system:p1); + map(v_ptc1:p2, system:p2); + + unmap; + + // verity that ports are really unmapped + checkMapped(false); // no active mapping + v_ptc1.start(checkMapped(true)); // still mapped to system:p1 and system:p2 + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_008()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_009.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_009.ttcn new file mode 100644 index 0000000..a661f6e --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_009.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Ensure that all component notation works correctly in unmap operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The all component keyword shall only be used in combination with the all port +// keyword, i.e. all component:all port, and shall only be used by the MTC. Furthermore, +// the all component:all port argument shall be used as the one and only argument of a +// disconnect or unmap operation and it allows to release all connections and mappings +// of the test configuration. + +module Sem_210102_disconnect_and_unmap_operations_009 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p1, p2; + } + + function checkUnmapped() runs on GeneralComp + { + if(not p1.checkstate("Mapped") and not p2.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p1, system:p1); + map(self:p2, system:p2); + map(v_ptc1:p1, system:p1); + map(v_ptc1:p2, system:p2); + + unmap(all component:all port); + + // verity that ports are really unmapped + checkUnmapped(); + v_ptc1.start(checkUnmapped()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_009()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_010.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_010.ttcn new file mode 100644 index 0000000..64cd4b0 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_010.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that no error is generated when unmapping ports that are not mapped + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// An ... unmap operation has only an effect if the ... mapping to be removed +// has been created beforehand. + +module Sem_210102_disconnect_and_unmap_operations_010 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + connect(self:p, v_ptc1:p); + unmap( v_ptc1:p, system:p); //no effect, ports not mapped + setverdict(pass); + } + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_010()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn new file mode 100644 index 0000000..7721373 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_011.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 470 and STF 521) + ** @version 0.0.3 + ** @purpose 1:21.1.2, Ensure that unmap param statements are allowed in testcase block + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210102_disconnect_and_unmap_operations_011 { + + type component GeneralComp { + port MyMessagePortType pt_myPort; + } + + type record MyMessageType1 { + boolean h1, + MyMessageType1 h2 optional + } + + type record MyMessageType2 { + integer g1, + charstring g2 + } + + type port MyMessagePortType message { + inout all; + unmap param (in MyMessageType1 p1, inout MyMessageType2 p2); + } + + const MyMessageType1 c_myTemplate1 := { + h1 := false, + h2 := { + h1:= true, + h2 := omit + } + } + + const MyMessageType2 c_myTemplate2 := { + g1 := 2, + g2 := "foo" + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_011() runs on GeneralComp system GeneralComp { + var MyMessageType2 v_myTemplate2 := c_myTemplate2; + timer t_tmr := 0.2; + t_tmr.start; + map(mtc:pt_myPort, system:pt_myPort); + + pt_myPort.send(13); + t_tmr.timeout; // give adapter some time to enqueue the message + + unmap(mtc:pt_myPort, system:pt_myPort) param(c_myTemplate1, v_myTemplate2); + log("Unmap inout parameter", v_myTemplate2); + + setverdict(pass); + } + + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_011()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_012.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_012.ttcn new file mode 100644 index 0000000..65dfe40 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_012.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that the param part can be skipped in unmap operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Restriction b: +// In unmap operations, param clauses are optional. + +module Sem_210102_disconnect_and_unmap_operations_012 { + + type port P message { + inout integer; + unmap param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_012() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(self:p, system:p); + if(not p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_012()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_013.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_013.ttcn new file mode 100644 index 0000000..a5da241 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_and_unmap_operations_013.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1.2, Verify that the param clause can be used when unmap contains a single system port parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Restriction a: +// In an unmap operation, a param clause shall only be present if the system port to +// which the param clause belongs to is explicitly referenced. + +module Sem_210102_disconnect_and_unmap_operations_013 { + + type port P message { + inout integer; + unmap param (integer p_par1); + } + + type component GeneralComp { + port P p + } + + testcase TC_Sem_210102_disconnect_and_unmap_operations_013() runs on GeneralComp system GeneralComp { + map(system:p, self:p); + unmap(system:p) param(1); + if(not p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control{ + execute(TC_Sem_210102_disconnect_and_unmap_operations_013()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn new file mode 100644 index 0000000..755f38a --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_001.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 451, STF 470 + ** @version 0.0.2 + ** @purpose 1:21.1.2, Ensure that all component notation work correctly in disconnect operation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The all component keyword shall only be used in combination with the all port +// keyword, i.e. all component:all port, and shall only be used by the MTC. Furthermore, +// the all component:all port argument shall be used as the one and only argument of a +// disconnect or unmap operation and it allows to release all connections and mappings +// of the test configuration. + +module Sem_210102_disconnect_operation_001{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + timer t := 1.0; + t.start; + if(not p.checkstate("Connected")) { + setverdict(pass); + } else { + setverdict(fail); + } + t.timeout; // keep alive for 1 second + } + + testcase TC_Sem_210102_disconnect_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create, + v_ptc3 := GeneralComp.create; + + connect(v_ptc1:p, v_ptc2:p); + connect(v_ptc1:p, v_ptc3:p); + connect(v_ptc2:p, v_ptc3:p); + + disconnect(all component:all port); + + // verity that ports are really disconnected + v_ptc1.start(f()); + v_ptc2.start(f()); + v_ptc3.start(f()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_operation_001()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn new file mode 100644 index 0000000..3b7f828 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_002.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 451, STF 470 + ** @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 + ***************************************************/ + +module Sem_210102_disconnect_operation_002{ + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + if(p.checkstate("Mapped")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_disconnect_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create, + v_ptc2 := GeneralComp.create; + + map(v_ptc1:p, system:p); + + disconnect(v_ptc1:p, v_ptc2:p); // acceptable even when not connected + + v_ptc1.start(f()); + all component.done; + } + control{ + execute(TC_Sem_210102_disconnect_operation_002()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_003.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_003.ttcn new file mode 100644 index 0000000..2c67ebc --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_disconnect_operation_003.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 451 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:21.1.2, Ensure that mapped port cannot disconnect + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// System and component interface cannot disconnect +module Sem_210102_disconnect_operation_003 { + + type port myport message { + inout integer + } + + + type component Mysystem + { + port myport messagePort; + } + function f() runs on Mysystem {} + + testcase TC_Sem_210102_disconnect_operation_003() runs on Mysystem system Mysystem { + var Mysystem MyCompA; + + MyCompA:=Mysystem.create; + + map(MyCompA:messagePort,system:messagePort); + + MyCompA.start(f()); + + disconnect(MyCompA:messagePort); // should not cause any error + setverdict(pass); + } + control{ + execute(TC_Sem_210102_disconnect_operation_003()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn new file mode 100644 index 0000000..c7a94cd --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_001.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 451, STF 470 + ** @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 + ***************************************************/ + +// The following requirements are tested: +// The ... unmap operations perform ... the unmapping of (previously mapped) ports of +// test components and ports in the test system interface. + +module Sem_210102_unmap_operation_001 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkMapped(boolean p_stateActive) runs on GeneralComp + { + if(p.checkstate("Mapped") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_unmap_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p, system:p); + map(v_ptc1:p, system:p); + + unmap(system:p, v_ptc1:p); + + // verity that ports are really unmapped + checkMapped(true); // still mapped to system:p + v_ptc1.start(checkMapped(false)); // no active mapping + v_ptc1.done; + } + + control{ + execute(TC_Sem_210102_unmap_operation_001()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn new file mode 100644 index 0000000..9857f7b --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/210102_disconnect_and_unmap_operations/Sem_210102_unmap_operation_002.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 451, STF 470 + ** @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 + ***************************************************/ + +// The following requirements are tested: +// The ... unmap operations perform ... the unmapping of (previously mapped) ports of +// test components and ports in the test system interface. + +module Sem_210102_unmap_operation_002 { + + type port P message { + inout integer + } + + type component GeneralComp + { + port P p; + } + + function checkMapped(boolean p_stateActive) runs on GeneralComp + { + if(p.checkstate("Mapped") xor not p_stateActive) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + testcase TC_Sem_210102_unmap_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc1 := GeneralComp.create; + + map(self:p, system:p); + map(v_ptc1:p, system:p); + + unmap(v_ptc1:p, system:p); + + // verity that ports are really unmapped + checkMapped(true); // still mapped to system:p + v_ptc1.start(checkMapped(false)); // no active mapping + v_ptc1.done; + } + + control{ + execute(TC_Sem_210102_unmap_operation_001()); + } +} + diff --git a/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_001.ttcn b/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_001.ttcn new file mode 100644 index 0000000..d8d6751 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1, Verify that connect operation cannot contain a system port + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// In the case of connections between two test components, the connect operation shall be used. + +module NegSem_2101_TopLevel_001 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_210101_TopLevel_001() runs on GeneralComp system GeneralComp { + connect(self:p, system:p); // error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_TopLevel_001()); + } +} diff --git a/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_002.ttcn b/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_002.ttcn new file mode 100644 index 0000000..bfe1548 --- /dev/null +++ b/core_language/21_configuration_operations/2101_connection_operations/2101_toplevel/NegSem_2101_TopLevel_002.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.1, Verify that map operation fails if both operands are component ports + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// When connecting a test component to a test system interface the map operation shall be used. + +module NegSem_2101_TopLevel_002 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_210101_TopLevel_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + map(self:p, v_ptc:p); // error expected + setverdict(pass); + } + + control{ + execute(TC_NegSem_210101_TopLevel_002()); + } +} diff --git a/core_language/21_configuration_operations/2102_test_case_operations/NegSem_2102_testcase_stop_001.ttcn b/core_language/21_configuration_operations/2102_test_case_operations/NegSem_2102_testcase_stop_001.ttcn new file mode 100644 index 0000000..20f0853 --- /dev/null +++ b/core_language/21_configuration_operations/2102_test_case_operations/NegSem_2102_testcase_stop_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 451 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:21.2, Stopping test case + ** @verdict pass accept, ttcn3verdict:error + ***************************************************/ +// Explicit test case termination test +module NegSem_2102_testcase_stop_001 { + type component GeneralComp {} + + testcase TC_NegSem_2102_testcase_stop_001() runs on GeneralComp { + var boolean v_b := true; + + setverdict(pass, "Unexpected termination with verdict pass"); + + testcase.stop("Expected Termination with verdict error"); // stop runing test case now with verdict error + } + + control { + execute(TC_NegSem_2102_testcase_stop_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_001.ttcn new file mode 100644 index 0000000..fd39ef7 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_001.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named components on hosts are accepted + ** @verdict pass reject + *****************************************************************/ +module NegSem_210301_CreateOperation_001 { + + type component GeneralComp { } + + testcase TC_NegSem_210301_CreateOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create(5); // it should expect charstring + setverdict(pass); + } + + control { + execute(TC_NegSem_210301_CreateOperation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_002.ttcn new file mode 100644 index 0000000..543052d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_002.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named components on hosts are accepted + ** @verdict pass reject + *****************************************************************/ +module NegSem_210301_CreateOperation_002 { + + type component GeneralComp { } + + testcase TC_NegSem_210301_CreateOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create(true); // it should expect charstring + setverdict(pass); + } + + control { + execute(TC_NegSem_210301_CreateOperation_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_003.ttcn new file mode 100644 index 0000000..7a546da --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/NegSem_210301_CreateOperation_003.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named components on hosts are accepted + ** @verdict pass reject + *****************************************************************/ +module NegSem_210301_CreateOperation_003 { + + type component GeneralComp { } + + testcase TC_NegSem_210301_CreateOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create(-, 'CAFFEE'O); // it should expect charstring + setverdict(pass); + } + + control { + execute(TC_NegSem_210301_CreateOperation_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_001.ttcn new file mode 100644 index 0000000..f972e8f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_001.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that unnamed components can be created + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210301_CreateOperation_001 { + + type component GeneralComp { + var NewComp vc_NewComp; + timer t := 5.0; + } + type component NewComp { } + + function f_testComp() runs on GeneralComp { + var NewComp v_NewComp := NewComp.create; + t.start; + a_createComp(); + setverdict(pass); + } + + function f_createComp() return NewComp { + return NewComp.create; + } + + altstep a_createComp() runs on GeneralComp { + [] t.timeout { + vc_NewComp := NewComp.create; + setverdict(pass); + } + } + + testcase TC_Sem_210301_CreateOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + ptc.start(f_testComp()); + setverdict(pass); + } + + control { + execute(TC_Sem_210301_CreateOperation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_002.ttcn new file mode 100644 index 0000000..30745bd --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_002.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named components can be created + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210301_CreateOperation_002 { + + type component GeneralComp { + var NewComp vc_NewComp; + timer t := 5.0; + } + + type component NewComp { } + + function f_testComp() runs on GeneralComp { + var NewComp v_NewComp := NewComp.create("1 & * 5abc"); + t.start; + a_createComp(); + setverdict(pass); + } + + function f_createComp() return NewComp { + return NewComp.create("some name"); + } + + altstep a_createComp() runs on GeneralComp { + [] t.timeout { + vc_NewComp := NewComp.create("component#" & int2str(2)); + setverdict(pass); + } + } + + testcase TC_Sem_210301_CreateOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create("a component name"); + ptc.start(f_testComp()); + setverdict(pass); + } + + control { + execute(TC_Sem_210301_CreateOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_003.ttcn new file mode 100644 index 0000000..7b8567d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_003.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that unnamed alive components on hosts can be created + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210301_CreateOperation_003 { + + type component GeneralComp { + var NewComp vc_NewComp; + timer t := 5.0; + } + + type component NewComp { } + + function f_testComp() runs on GeneralComp { + var NewComp v_NewComp := NewComp.create alive; + t.start; + a_createComp(); + setverdict(pass); + } + + function f_createComp() return NewComp { + return NewComp.create alive; + } + + altstep a_createComp() runs on GeneralComp { + [] t.timeout { + vc_NewComp := NewComp.create alive; + setverdict(pass); + } + } + + testcase TC_Sem_210301_CreateOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create alive; + ptc.start(f_testComp()); + setverdict(pass); + } + + control { + execute(TC_Sem_210301_CreateOperation_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_004.ttcn new file mode 100644 index 0000000..ffd9902 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Sem_210301_CreateOperation_004.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named alive components can be created + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210301_CreateOperation_004 { + const charstring componentName := "component#"; + + type component GeneralComp { + var NewComp vc_NewComp; + timer t := 5.0; + } + + type component NewComp { } + + function f_testComp() runs on GeneralComp { + var NewComp v_NewComp := NewComp.create("1 & * 5abc") alive; + t.start; + a_createComp(); + setverdict(pass); + } + + function f_createComp() return NewComp { + return NewComp.create("some name") alive; + } + + altstep a_createComp() runs on GeneralComp { + [] t.timeout { + vc_NewComp := NewComp.create(componentName & int2str(2)) alive; + setverdict(pass); + } + } + + testcase TC_Sem_210301_CreateOperation_004() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create("a component name") alive; + ptc.start(f_testComp()); + setverdict(pass); + } + + control { + execute(TC_Sem_210301_CreateOperation_004()); + } + +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Syn_210301_CreateOperation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Syn_210301_CreateOperation_001.ttcn new file mode 100644 index 0000000..639d91e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210301_create_operation/Syn_210301_CreateOperation_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.1, Ensure that named components on hosts are accepted + ** @verdict pass accept, noexecution + *****************************************************************/ +// only syntactic test since it cannot be tested if "localhost" is not supported for component creation +module Syn_210301_CreateOperation_001 { + const charstring hostname := "localhost"; + + type component GeneralComp { + var NewComp vc_NewComp; + timer t := 5.0; + } + + type component NewComp { } + + function f_testComp() runs on GeneralComp { + var NewComp v_NewComp := NewComp.create("1 & * 5abc", hostname); + t.start; + a_createComp(); + setverdict(pass); + } + + function f_createComp() return NewComp { + return NewComp.create(-, "localhost"); + } + + altstep a_createComp() runs on GeneralComp { + [] t.timeout { + vc_NewComp := NewComp.create("component#" & int2str(2), hostname); + setverdict(pass); + } + } + + testcase TC_Syn_210301_CreateOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create("a component name", "localhost"); + ptc.start(f_testComp()); + setverdict(pass); + } + + control { + execute(TC_Syn_210301_CreateOperation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_001.ttcn new file mode 100644 index 0000000..32a0385 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that non-alive ptc cannot start again + ** @verdict pass reject + *****************************************************************/ +//Non alive test component cannot start another function behavior +module NegSem_210302_Start_test_component_001 { + + type component GeneralComp { } + function f() runs on GeneralComp {} + function f2() runs on GeneralComp {} + + testcase TC_NegSem_210302_Start_test_component_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + ptc:=GeneralComp.create; + + ptc.start(f()); + ptc.done; + ptc.start(f2()); // test case error, ptc is non-alive + + setverdict(pass); + } + + control { + execute(TC_NegSem_210302_Start_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_002.ttcn new file mode 100644 index 0000000..bacdd81 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_002.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that only component type is allowed for ptc declaration + ** @verdict pass reject + *****************************************************************/ +// VariableRef (being a component type variable, a component type parameter +module NegSem_210302_Start_test_component_002 { + + type component GeneralComp { } + type record Rectype{} + function f() runs on GeneralComp {} + testcase TC_NegSem_210302_Start_test_component_002() runs on GeneralComp system GeneralComp { + var Rectype ptc; + ptc:=GeneralComp.create; // VariableRef (being a component type variable, a component type parameter + + ptc.start(f()); + + setverdict(pass); + } + + control { + execute(TC_NegSem_210302_Start_test_component_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_004.ttcn new file mode 100644 index 0000000..47305df --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_004.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, starting behaviour on already running non-alive component + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Starting a second behaviour function on a non-alive PTC or starting a function +// on a PTC that is still running results in a test case error. + +module NegSem_210302_Start_test_component_004 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + testcase TC_NegSem_210302_Start_test_component_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.start(f_ptcBehaviour()); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_004()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_005.ttcn new file mode 100644 index 0000000..4ca084d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_005.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, starting behaviour on already running non-alive component + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Starting a second behaviour function on a non-alive PTC or starting a function +// on a PTC that is still running results in a test case error. + +module NegSem_210302_Start_test_component_005 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 10.0; + t_tmr.start; + t_tmr.timeout; + } + + testcase TC_NegSem_210302_Start_test_component_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + v_ptc.start(f_ptcBehaviour()); + v_ptc.start(f_ptcBehaviour()); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_005()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_006.ttcn new file mode 100644 index 0000000..246c02f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_006.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, function invocation in the start operation doesn't return a component + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The variable associated with VariableRef (being a component type variable, +// a component type parameter, etc.) or the return type associated with +// FunctionInstance shall be of component type. + +module NegSem_210302_Start_test_component_006 { + + type component GeneralComp { + } + + type record R { + GeneralComp comp + } + + function f_create() return R { + var R v_rec := { GeneralComp.create("PTC") } + return v_rec; + } + + function f_ptcBehaviour() runs on GeneralComp { + } + + testcase TC_NegSem_210302_Start_test_component_006() runs on GeneralComp system GeneralComp { + f_create().start(f_ptcBehaviour()); + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_006()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_007.ttcn new file mode 100644 index 0000000..87a3175 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_007.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, starting function with incompatible "runs on" clause + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// The function invoked in a start test component operation shall have a runs on +// definition referencing a component type that is compatible with the newly +// created component (see clause 6.3.3). + +module NegSem_210302_Start_test_component_007 { + + type component GeneralComp { + var charstring vc_str := "abc"; + } + + type component DifferentComp { + var integer vc_int := 0; + } + + + function f_ptcBehaviour() runs on DifferentComp { + setverdict(pass, "Executing PTC behaviour..."); + } + + testcase TC_NegSem_210302_Start_test_component_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_007()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_008.ttcn new file mode 100644 index 0000000..47f6c98 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_008.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, passing port to started component function + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Ports, defaults and timers shall not be passed into a function invoked in a start +// test component operation. + +module NegSem_210302_Start_test_component_008 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_behaviour(P p_port) runs on GeneralComp { + p_port.receive(integer:?); + setverdict(pass); + } + + testcase TC_NegSem_210302_Start_test_component_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, self:p); + p.send(1); + v_ptc.start(f_behaviour(p)); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_008()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_009.ttcn new file mode 100644 index 0000000..f895d65 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_009.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, passing default to started component function + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Ports, defaults and timers shall not be passed into a function invoked in a start +// test component operation. + +module NegSem_210302_Start_test_component_009 { + + type component GeneralComp { + } + + function f_behaviour(default p_default) runs on GeneralComp { + setverdict(pass); + } + + altstep a_timeout() { + [] any timer.timeout { } + } + + testcase TC_NegSem_210302_Start_test_component_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + var default v_def := activate(a_timeout()); + v_ptc.start(f_behaviour(v_def)); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_009()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_010.ttcn new file mode 100644 index 0000000..b370c9b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_010.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, passing timer to started component function + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// Ports, defaults and timers shall not be passed into a function invoked in a start +// test component operation. + +module NegSem_210302_Start_test_component_010 { + + type component GeneralComp { + } + + function f_behaviour(timer t_tmr) runs on GeneralComp { + t_tmr.timeout; + setverdict(pass); + } + + testcase TC_NegSem_210302_Start_test_component_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + timer t_tmr := 0.0; + t_tmr.start; + v_ptc.start(f_behaviour(t_tmr)); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_010()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_011.ttcn new file mode 100644 index 0000000..9466e25 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_011.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, passing structured value containing ports to started component function + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// All formal parameter types of the function shall neither be of port or default type +// or should contain a direct or indirect element or field of port or default type. + +module NegSem_210302_Start_test_component_011 { + + type port P message { + inout integer; + } + + type P PortArray[2]; + + type component GeneralComp { + port P p[2]; + } + + function f_behaviour(PortArray p_ports) runs on GeneralComp { + p_ports[0].receive(integer:?); + setverdict(pass); + } + + testcase TC_NegSem_210302_Start_test_component_011() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p[0], self:p[0]); + p[0].send(1); + v_ptc.start(f_behaviour(p)); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_011()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_012.ttcn new file mode 100644 index 0000000..65edb5b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/NegSem_210302_Start_test_component_012.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, passing default to started component function + ** @verdict pass reject + ***************************************************/ + +// The following requirements are tested: +// All formal parameter types of the function shall neither be of port or default type +// or should contain a direct or indirect element or field of port or default type. + +module NegSem_210302_Start_test_component_012 { + + type record R { + default def + } + + type component GeneralComp { + } + + function f_behaviour(R p_def) runs on GeneralComp { + setverdict(pass); + } + + altstep a_timeout() { + [] any timer.timeout { } + } + + testcase TC_NegSem_210302_Start_test_component_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + var R v_def := { def := activate(a_timeout()) }; + v_ptc.start(f_behaviour(v_def)); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_NegSem_210302_Start_test_component_012()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_001.ttcn new file mode 100644 index 0000000..c295345 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.2, Ensure that alive test components are allowed to start another function + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Alive test component starts another function +module Sem_210302_Start_test_component_001 { + + type component GeneralComp { } + function f() runs on GeneralComp {} + function f2() runs on GeneralComp {} + + testcase TC_Sem_210302_Start_test_component_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + ptc:=GeneralComp.create alive; + + ptc.start(f()); + ptc.done; + ptc.start(f2()); // allowed since ptc is alive + + setverdict(pass); + } + + control { + execute(TC_Sem_210302_Start_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_002.ttcn new file mode 100644 index 0000000..cf696ca --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_002.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, component variable reference in 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. + +module Sem_210302_Start_test_component_002 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + setverdict(pass, "Executing PTC behaviour..."); + } + + testcase TC_Sem_210302_Start_test_component_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"); + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_002()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_003.ttcn new file mode 100644 index 0000000..3e2520f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_003.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, test component as a result of function invocation in 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. + +module Sem_210302_Start_test_component_003 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + setverdict(pass, "Executing PTC behaviour..."); + } + + function f_create() return GeneralComp { + return GeneralComp.create("PTC"); + } + + testcase TC_Sem_210302_Start_test_component_003() runs on GeneralComp system GeneralComp { + f_create().start(f_ptcBehaviour()); + all component.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_003()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_004.ttcn new file mode 100644 index 0000000..e7909ee --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_004.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, component variable value reuse in alive component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// If a function is started on an alive-type PTC after termination of a previous +// function, it uses variable values, timers, ports, and the local verdict as they +// were left after termination of the previous function. + +module Sem_210302_Start_test_component_004 { + + type component GeneralComp { + var integer vc_val := 0; + } + + function f_ptcBehaviour() runs on GeneralComp { + vc_val := 1; + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (vc_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_210302_Start_test_component_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_004()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_005.ttcn new file mode 100644 index 0000000..e781a7c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_005.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, timer reuse in alive component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// If a function is started on an alive-type PTC after termination of a previous +// function, it uses variable values, timers, ports, and the local verdict as they +// were left after termination of the previous function. + +module Sem_210302_Start_test_component_005 { + + type component GeneralComp { + timer tc_tmr := 30.0; + } + + function f_ptcBehaviour() runs on GeneralComp { + tc_tmr.start; + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (tc_tmr.running) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_210302_Start_test_component_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_005()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_006.ttcn new file mode 100644 index 0000000..47983fe --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_006.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, port reuse in alive component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// If a function is started on an alive-type PTC after termination of a previous +// function, it uses variable values, timers, ports, and the local verdict as they +// were left after termination of the previous function. + +module Sem_210302_Start_test_component_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + connect(self:p, self:p); // loopback + p.send(1); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + p.receive(integer:?); + } + + + testcase TC_Sem_210302_Start_test_component_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_006()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_007.ttcn new file mode 100644 index 0000000..e4944b1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_007.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, verdict value reuse in alive component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// If a function is started on an alive-type PTC after termination of a previous +// function, it uses variable values, timers, ports, and the local verdict as they +// were left after termination of the previous function. + +module Sem_210302_Start_test_component_007 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + setverdict(pass); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (getverdict != pass) { setverdict(fail); } + } + + + testcase TC_Sem_210302_Start_test_component_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_007()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn new file mode 100644 index 0000000..c38482d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_008.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, timer reuse in alive component + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// If a function is started on an alive-type PTC after termination of a previous +// function, it uses variable values, timers, ports, and the local verdict as they +// were left after termination of the previous function. + +module Sem_210302_Start_test_component_008 { + + type component GeneralComp { + timer tc_tmr := 30.0; + } + + function f_ptcBehaviour() runs on GeneralComp { + tc_tmr.start; + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (tc_tmr.running) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_210302_Start_test_component_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_008()); + } +} + diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn new file mode 100644 index 0000000..ebe4dc3 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_009.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, deactivation of defaults in alive components + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// In contrast to that, all active defaults are deactivated when the behaviour of +// an alive-type PTC is stopped. This means no default is activated when a new +// behaviour is started on an alive-type PTC. + +module Sem_210302_Start_test_component_009 { + + type port P message { + inout integer; + } + + type component GeneralComp { + timer tc_tmr := 1.0; + port P p; + } + + altstep a_receive() runs on GeneralComp { + [] p.receive(integer:?) { setverdict(fail); } + } + + function f_ptcBehaviour() runs on GeneralComp { + activate(a_receive()); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + tc_tmr.start; + alt { + [] tc_tmr.timeout { setverdict(pass); } + } + } + + + testcase TC_Sem_210302_Start_test_component_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + connect(self:p, v_ptc:p); + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + p.send(2); + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_009()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn new file mode 100644 index 0000000..3a1ece6 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_010.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, starting function with compatible "runs on" clause + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// The function invoked in a start test component operation shall have a runs on +// definition referencing a component type that is compatible with the newly +// created component (see clause 6.3.3). + +module Sem_210302_Start_test_component_010 { + + type component GeneralComp { + } + + type component GeneralCompEx extends GeneralComp { + var integer vc_int := 0; + } + + + function f_ptcBehaviour() runs on GeneralComp { + setverdict(pass, "Executing PTC behaviour..."); + } + + testcase TC_Sem_210302_Start_test_component_010() runs on GeneralComp system GeneralComp { + var GeneralCompEx v_ptc := GeneralCompEx.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210302_Start_test_component_010()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn new file mode 100644 index 0000000..01211aa --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_011.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn new file mode 100644 index 0000000..24bcda1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_012.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 521 + ** @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 GeneralCompSystem { } + type component GeneralComp { + port myPortType myPort; + } + + altstep a_myBehaviour() runs on GeneralComp { + + [] any port.receive { + setverdict(pass); + } + } + + + testcase TC_Sem_210302_Start_test_component_012() runs on GeneralComp system GeneralCompSystem { + var GeneralComp ptc; + + ptc:=GeneralComp.create alive; + + connect(mtc:myPort, ptc:myPort); + myPort.send(1); + + ptc.start(a_myBehaviour()); + ptc.done; + + setverdict(pass); + } + + control { + execute(TC_Sem_210302_Start_test_component_012()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn new file mode 100644 index 0000000..0857adc --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_013.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 521 + ** @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); } + + } + + testcase TC_Sem_210302_Start_test_component_013() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var integer v_var:=5; + ptc:=GeneralComp.create alive; + ptc.start(f(v_var)); + setverdict(pass); + } + + control { + execute(TC_Sem_210302_Start_test_component_013()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn new file mode 100644 index 0000000..bc2a0c0 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210302_start_test_component/Sem_210302_Start_test_component_014.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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 ptc; + + ptc:=GeneralComp.create alive; + ptc.start(f()); + + if(match(v_var,5)){ + setverdict(pass); + } + else { + setverdict(fail,v_var); + } + } + + control { + execute(TC_Sem_210302_Start_test_component_014()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn new file mode 100644 index 0000000..2feda83 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, restarting explicitly stopped non-alive component + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Stopping a non-alive-type test component (implicitly or explicitly) shall destroy +// it and all resources associated with the test component shall be released. + +module NegSem_210303_Stop_test_component_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_NegSem_210303_Stop_test_component_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + ptc.start(f()); + ptc.stop; + ptc.start(f()); + setverdict(pass); + } + + control { + execute(TC_NegSem_210303_Stop_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn new file mode 100644 index 0000000..2476157 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, stopping all PTCs from a PTC + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The all keyword can be used by the MTC only in order to stop all running PTCs but +// the MTC itself. + +module NegSem_210303_Stop_test_component_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + all component.stop; + } + + testcase TC_NegSem_210303_Stop_test_component_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + ptc.start(f()); + ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_210303_Stop_test_component_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn new file mode 100644 index 0000000..6f21cb2 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_003.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, applying stop operation to a variable of a different than component type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable associated with VariableRef (being a component type variable, a component +// type parameter, etc.) or the return type associated with FunctionInstance shall be of +// component type. + +module NegSem_210303_Stop_test_component_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_behaviour() runs on GeneralComp { + p.receive(integer:?); // infinite blocking + } + + testcase TC_NegSem_210303_Stop_test_component_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc[2]; + v_ptc[0] := GeneralComp.create; + v_ptc[1] := GeneralComp.create; + v_ptc[0].start(f_behaviour()); + v_ptc[1].start(f_behaviour()); + v_ptc.stop; + setverdict(pass); + } + + control { + execute(TC_NegSem_210303_Stop_test_component_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_004.ttcn new file mode 100644 index 0000000..79be237 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/NegSem_210303_Stop_test_component_004.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, applying stop operation to a function call result of a different than component type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable associated with VariableRef (being a component type variable, a component +// type parameter, etc.) or the return type associated with FunctionInstance shall be of +// component type. + +module NegSem_210303_Stop_test_component_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type GeneralComp CompArray[2]; + + function f_behaviour() runs on GeneralComp { + p.receive(integer:?); // infinite blocking + } + + function f_createComponents() return CompArray { + var CompArray v_ptc; + v_ptc[0] := GeneralComp.create; + v_ptc[1] := GeneralComp.create; + v_ptc[0].start(f_behaviour()); + v_ptc[1].start(f_behaviour()); + return v_ptc; + } + + testcase TC_NegSem_210303_Stop_test_component_004() runs on GeneralComp system GeneralComp { + f_createComponents().stop; + setverdict(pass); + } + + control { + execute(TC_NegSem_210303_Stop_test_component_004()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_001.ttcn new file mode 100644 index 0000000..d426f4c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_001.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.3, Ensure that component.stop causes the stopping of the target component. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_210303_Stop_test_component_001 { + + type component GeneralComp { } + + function f() runs on GeneralComp { + // wait until component is stopped from outside + while (true) {} + } + + + testcase TC_Sem_210303_Stop_test_component_001() runs on GeneralComp system GeneralComp { + timer t := 1.0; + var GeneralComp ptc; + ptc:=GeneralComp.create; + + ptc.start(f()); + + // wait until component started + t.start; + t.timeout; + + ptc.stop; + + // Test ptc behavior after stop + if (ptc.running==false) + { + setverdict(pass); + } + else + { + setverdict(fail, "Component still running"); + } + + } + + control { + execute(TC_Sem_210303_Stop_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_002.ttcn new file mode 100644 index 0000000..4625018 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451, updated by STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, Ensure that self.stop stops current component + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A component can stop its own behaviour by using a simple stop execution statement +// (see clause 19.9) or by addressing itself in the stop operation, e.g. by using +// the self operation. + +module Sem_210303_Stop_test_component_002 { + + type component GeneralComp { + } + function f() runs on GeneralComp { + var boolean v_cond := true; + if (v_cond) { + setverdict(pass); + self.stop; //stops the ptc + } + setverdict(fail); // in case the stop operation doesn't work + } + + testcase TC_Sem_210303_Stop_test_component_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_210303_Stop_test_component_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_003.ttcn new file mode 100644 index 0000000..f36a91e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_003.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, stopping MTC from PTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// By using the stop test component statement a test component can stop the execution +// of its own currently running test behaviour or the execution of the test behaviour +// running on another test component. If a component does not stop its own behaviour, +// but the behaviour running on another test component in the test system, the component +// to be stopped has to be identified by using its component reference. +// +// If the stopped test component is the MTC, resources of all existing PTCs shall be +// released, the PTCs shall be removed from the test system and the test case shall +// terminate (see clause 26.1). + +module Sem_210303_Stop_test_component_003 { + + type component GeneralComp { + } + + function f() runs on GeneralComp { + var boolean v_cond := true; + if (v_cond) { // to prevent "unreachable statement" errors + setverdict(pass); + mtc.stop; //stops the MTC and as a consequence the PTC is stopped too + } + setverdict(fail); // in case the stop operation doesn't work + } + + testcase TC_Sem_210303_Stop_test_component_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_ptc.done; + setverdict(fail); // this statement shall never be reached + } + + control { + execute(TC_Sem_210303_Stop_test_component_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_004.ttcn new file mode 100644 index 0000000..e329c4f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_004.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, stop.self in MTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// A component can stop its own behaviour by using a simple stop execution statement +// (see clause 19.9) or by addressing itself in the stop operation, e.g. by using the +// self operation. +// +// If the stopped test component is the MTC, resources of all existing PTCs shall be +// released, the PTCs shall be removed from the test system and the test case shall +// terminate (see clause 26.1). + +module Sem_210303_Stop_test_component_004 { + + type component GeneralComp { + } + + function f() runs on GeneralComp { + timer t_tmr := 2.0; + t_tmr.start; + t_tmr.timeout; + setverdict(fail); // in case the stop operation doesn't work + } + + testcase TC_Sem_210303_Stop_test_component_004() runs on GeneralComp system GeneralComp { + var boolean v_cond := true; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + if (v_cond) { // to prevent "unreachable statement" errors + setverdict(pass); + self.stop; // stops the MTC and as a consequence the PTC is stopped too + } + setverdict(fail); // this statement shall never be reached + } + + testcase TC_Sem_210303_Stop_test_component_004_next() runs on GeneralComp system GeneralComp { + timer t_tmr := 2.5; + t_tmr.start; + t_tmr.timeout; + setverdict(pass); + } + + control { + execute(TC_Sem_210303_Stop_test_component_004()); + // run another test case to make sure the PTC is not active and doesn't influence its result + execute(TC_Sem_210303_Stop_test_component_004_next()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn new file mode 100644 index 0000000..791354b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_005.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:21.3.3, alive component restart after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Stopping an alive-type component shall stop the currently running behaviour only +// but the component continues to exist and can execute new behaviour (started on +// it using the start operation). + +module Sem_210303_Stop_test_component_005 { + + type component GeneralComp { + } + + function f_ptcBehaviour() runs on GeneralComp { + timer t_tmr := 1.0; + t_tmr.start; + t_tmr.timeout; + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + setverdict(pass); + } + + + testcase TC_Sem_210303_Stop_test_component_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + v_ptc.stop; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + } + + control{ + execute(TC_Sem_210303_Stop_test_component_005()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_006.ttcn new file mode 100644 index 0000000..1e6c2d1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_006.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, component variable value reuse in alive component after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Stopping an alive-type component means that all variables, timers and ports +// declared in the component type definition of the alive-type component keep their +// value, contents or state. + +module Sem_210303_Stop_test_component_006 { + + type port P message { + inout charstring; + } + + type component GeneralComp { + var integer vc_val := 0; + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + vc_val := 1; + p.send("PTC started"); + p.receive(charstring:?); // this will never come + setverdict(fail); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (vc_val == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + + testcase TC_Sem_210303_Stop_test_component_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + connect(self:p, v_ptc:p); + v_ptc.start(f_ptcBehaviour()); + p.receive(charstring:?); + v_ptc.stop; + p.send("greetings from the MTC"); + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210303_Stop_test_component_006()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_007.ttcn new file mode 100644 index 0000000..e844b1f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_007.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, timer reuse in alive component after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Stopping an alive-type component means that all variables, timers and ports +// declared in the component type definition of the alive-type component keep their +// value, contents or state. + +module Sem_210303_Stop_test_component_007 { + + type port P message { + inout integer; + } + + type component GeneralComp { + timer tc_tmr := 2.0; + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + tc_tmr.start; + p.send(1); + p.receive(integer:?); + setverdict(fail); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + tc_tmr.timeout; + setverdict(pass); + } + + + testcase TC_Sem_210303_Stop_test_component_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + connect(self:p, v_ptc:p); + v_ptc.start(f_ptcBehaviour()); + p.receive(integer:?); + v_ptc.stop; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + } + + control{ + execute(TC_Sem_210303_Stop_test_component_007()); + } +} + diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_008.ttcn new file mode 100644 index 0000000..2b5ad2c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_008.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, port reuse in alive component after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Stopping an alive-type component means that all variables, timers and ports +// declared in the component type definition of the alive-type component keep their +// value, contents or state. + +module Sem_210303_Stop_test_component_008 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + function f_ptcBehaviour() runs on GeneralComp { + connect(self:p1, self:p1); // loopback + connect(mtc:p2, self:p2); // mtc + p1.send(1); + p2.send(2); + p2.receive(integer:?); + setverdict(fail); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + p1.receive(integer:?); + setverdict(pass); + } + + + testcase TC_Sem_210303_Stop_test_component_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + v_ptc.start(f_ptcBehaviour()); + p2.receive(integer:?); + v_ptc.stop; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + } + + control{ + execute(TC_Sem_210303_Stop_test_component_008()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_009.ttcn new file mode 100644 index 0000000..899c644 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_009.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.2, verdict value reuse in alive component after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// Furthermore, the local verdict of the component keeps its value. + +module Sem_210303_Stop_test_component_009 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_ptcBehaviour() runs on GeneralComp { + setverdict(pass); + p.send(1); + p.receive(integer:?); + setverdict(fail); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + if (getverdict != pass) { setverdict(fail); } + } + + + testcase TC_Sem_210303_Stop_test_component_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + connect(self:p, v_ptc:p); + v_ptc.start(f_ptcBehaviour()); + p.receive(integer:?); + v_ptc.stop; + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + } + + control{ + execute(TC_Sem_210303_Stop_test_component_009()); + } +} diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_010.ttcn new file mode 100644 index 0000000..b5f3d4e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_010.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, deactivation of defaults in alive components after explicit stop + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirements are tested: +// In contrast to that, all active defaults are automatically deactivated when +// the alive-type component is stopped. + +module Sem_210303_Stop_test_component_010 { + + type port P message { + inout integer; + } + + type component GeneralComp { + timer tc_tmr := 1.0; + port P p; + } + + altstep a_receive() runs on GeneralComp { + [] p.receive(integer:?) { setverdict(fail); } + } + + function f_ptcBehaviour() runs on GeneralComp { + activate(a_receive()); + p.send(1); + p.receive(integer:?); // infinite blocking as MTC doesn't send anything + setverdict(fail); + } + + function f_ptcSecondBehaviour() runs on GeneralComp { + tc_tmr.start; + alt { + [] tc_tmr.timeout { setverdict(pass); } + } + } + + + testcase TC_Sem_210303_Stop_test_component_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC") alive; + connect(self:p, v_ptc:p); + v_ptc.start(f_ptcBehaviour()); + p.receive(integer:?); + v_ptc.stop; + p.send(2); + v_ptc.start(f_ptcSecondBehaviour()); + v_ptc.done; + setverdict(pass); + } + + control{ + execute(TC_Sem_210303_Stop_test_component_010()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_011.ttcn new file mode 100644 index 0000000..ab4736d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210303_stop_test_component/Sem_210303_Stop_test_component_011.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, stopping all PTCs + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The all keyword can be used by the MTC only in order to stop all running PTCs but +// the MTC itself. + +module Sem_210303_Stop_test_component_011 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); // infinite blocking + } + + testcase TC_Sem_210303_Stop_test_component_011() runs on GeneralComp system GeneralComp { + var GeneralComp ptc1 := GeneralComp.create, ptc2 := GeneralComp.create; + ptc1.start(f()); + ptc2.start(f()); + all component.stop; + interleave { + [] ptc1.done {} + [] ptc2.done {} + } + setverdict(pass); + } + + control { + execute(TC_Sem_210303_Stop_test_component_011()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_001.ttcn new file mode 100644 index 0000000..cd94743 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_001.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, restarting explicitly killed non-alive component + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The kill operation applied on a test component stops the execution of the currently +// running behaviour - if any - of that component and frees all resources associated +// to it (including all port connections of the killed component) and removes the +// component from the test system. + +module NegSem_210304_kill_test_component_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_NegSem_210304_kill_test_component_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + ptc.start(f()); + ptc.kill; + ptc.start(f()); + setverdict(pass); + } + + control { + execute(TC_NegSem_210304_kill_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_002.ttcn new file mode 100644 index 0000000..c4d64d9 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.3, restarting explicitly killed alive component + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The kill operation applied on a test component stops the execution of the currently +// running behaviour - if any - of that component and frees all resources associated +// to it (including all port connections of the killed component) and removes the +// component from the test system. + +module NegSem_210304_kill_test_component_002 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_NegSem_210304_kill_test_component_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create alive; + ptc.start(f()); + ptc.kill; + ptc.start(f()); + setverdict(pass); + } + + control { + execute(TC_NegSem_210304_kill_test_component_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_003.ttcn new file mode 100644 index 0000000..2ccee24 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_003.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, killing all PTCs from a PTC + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The all keyword can be used by the MTC only in order to stop and kill all running PTCs +// but the MTC itself. + +module NegSem_210304_kill_test_component_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + all component.kill; + } + + testcase TC_NegSem_210304_kill_test_component_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + ptc.start(f()); + ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_210304_kill_test_component_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_004.ttcn new file mode 100644 index 0000000..018bb6c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_004.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, applying kill operation to a variable of a different than component type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable associated with VariableRef (being a component type variable, a component +// type parameter, etc.) or the return type associated with FunctionInstance shall be of +// component type. + +module NegSem_210304_kill_test_component_004 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f_behaviour() runs on GeneralComp { + p.receive(integer:?); // infinite blocking + } + + testcase TC_NegSem_210304_kill_test_component_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc[2]; + v_ptc[0] := GeneralComp.create; + v_ptc[1] := GeneralComp.create; + v_ptc[0].start(f_behaviour()); + v_ptc[1].start(f_behaviour()); + v_ptc.kill; + setverdict(pass); + } + + control { + execute(TC_NegSem_210304_kill_test_component_004()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_005.ttcn new file mode 100644 index 0000000..1cf0632 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/NegSem_210304_kill_test_component_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, applying kill operation to a function call result of a different than component type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable associated with VariableRef (being a component type variable, a component +// type parameter, etc.) or the return type associated with FunctionInstance shall be of +// component type. + +module NegSem_210304_kill_test_component_005 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type GeneralComp CompArray[2]; + + function f_behaviour() runs on GeneralComp { + p.receive(integer:?); // infinite blocking + } + + function f_createComponents() return CompArray { + var CompArray v_ptc; + v_ptc[0] := GeneralComp.create; + v_ptc[1] := GeneralComp.create; + v_ptc[0].start(f_behaviour()); + v_ptc[1].start(f_behaviour()); + return v_ptc; + } + + testcase TC_NegSem_210304_kill_test_component_005() runs on GeneralComp system GeneralComp { + f_createComponents().kill; + setverdict(pass); + } + + control { + execute(TC_NegSem_210304_kill_test_component_005()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_001.ttcn new file mode 100644 index 0000000..ed01618 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_001.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 451, modified by STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, Ensure that kill operator stops a non alive test components. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The kill operation applied on a test component stops the execution of the currently +// running behaviour - if any - of that component and frees all resources associated +// to it (including all port connections of the killed component) and removes the +// component from the test system. +// +// The kill operation can also be applied to another test component. In this case the +// component to be killed shall be addressed using its component reference. + +module Sem_210304_kill_test_component_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_Sem_210304_kill_test_component_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + ptc:=GeneralComp.create; + + ptc.start(f()); + ptc.kill; + ptc.killed; + setverdict(pass); + } + + control { + execute(TC_Sem_210304_kill_test_component_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_002.ttcn new file mode 100644 index 0000000..5496b5f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.4, Ensure that all component kill stop all ptcs + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Kill all component (ptc and ptc2) with all component.kill +module Sem_210304_kill_test_component_002 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210304_kill_test_component_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + + all component.kill; + + if (all component.alive==false) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210304_kill_test_component_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_003.ttcn new file mode 100644 index 0000000..233ebc1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_003.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.4, Ensure that kill operator stops only non alive test components + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Kill only stops non alive test components +module Sem_210304_kill_test_component_003 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210304_kill_test_component_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + ptc.kill; + + + if (match(ptc.alive, false) and match(ptc2.alive, true)) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210304_kill_test_component_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_004.ttcn new file mode 100644 index 0000000..fe06059 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_004.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 451, modified by STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, Ensure that self kill called in a functions stops non alive test comp. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// non alive test component calls function with self.kill + +module Sem_210304_kill_test_component_004 { + + type component GeneralComp { + timer t; + } + function f() runs on GeneralComp { + self.kill; + setverdict(fail); + } + + + testcase TC_Sem_210304_kill_test_component_004() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create; + + ptc.start(f()); + t.start(5.0); + alt { + [] ptc.killed { setverdict(pass); } + [] t.timeout { setverdict(fail); } + } + } + + control { + execute(TC_Sem_210304_kill_test_component_004()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_005.ttcn new file mode 100644 index 0000000..948feec --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_005.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, standalone kill in alive PTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The kill operation can be applied on the current test component itself by a simple +// kill statement or by addressing itself using the self operation in conjunction with +// the kill operation. + + +module Sem_210304_kill_test_component_005 { + + type component GeneralComp { + timer t; + } + + function f() runs on GeneralComp { + var boolean v_bCond := true; + if (v_bCond) { kill; } // to bypass possible "unreachable statement" errors + setverdict(fail); + } + + testcase TC_Sem_210304_kill_test_component_005() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create alive; + + ptc.start(f()); + t.start(5.0); + alt { + [] ptc.killed { setverdict(pass); } + [] t.timeout { setverdict(fail); } + } + } + + control { + execute(TC_Sem_210304_kill_test_component_005()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_006.ttcn new file mode 100644 index 0000000..000ec7a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210304_kill_test_component_operation/Sem_210304_kill_test_component_006.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.4, killing MTC from PTC + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The kill operation can be applied on the current test component itself by a simple +// kill statement or by addressing itself using the self operation in conjunction with +// the kill operation. + + +module Sem_210304_kill_test_component_006 { + + type component GeneralComp { + timer t; + } + + function f() runs on GeneralComp { + var boolean v_bCond := true; + setverdict(pass); + if (v_bCond) { mtc.kill; } // to bypass possible "unreachable statement" errors + setverdict(fail); + } + + testcase TC_Sem_210304_kill_test_component_006() runs on GeneralComp system GeneralComp { + var GeneralComp ptc := GeneralComp.create alive; + + ptc.start(f()); + t.start(5.0); + t.timeout; + setverdict(fail); + } + + control { + execute(TC_Sem_210304_kill_test_component_006()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_001.ttcn new file mode 100644 index 0000000..1a4d214 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when any from alive is applied to single component + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction b +// The ComponentArrayRef shall be a reference to a component array variable identifier. +module NegSem_210305_alive_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210305_alive_operation_001() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isAlive := any from v_ptc.alive; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn new file mode 100644 index 0000000..a849a6f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_002.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @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); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn new file mode 100644 index 0000000..4f3d7d7 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_003.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @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 has wrong type + ** @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_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210305_alive_operation_003() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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].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 == 1.0){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn new file mode 100644 index 0000000..b7bec97 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_004.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210305_alive_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210305_alive_operation_004() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[1]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn new file mode 100644 index 0000000..fc5d686 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210305_alive_operation_005 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210305_alive_operation_005() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_006.ttcn new file mode 100644 index 0000000..ba7c9e4 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSem_210305_alive_operation_006.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.5, partially initialized array in any from ComponentArrayRef.alive + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The ComponentArrayRef shall be a reference to a completely initialized component array. + +module NegSem_210305_alive_operation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_NegSem_210305_alive_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[2]; + v_ptcs[0] := GeneralComp.create alive; + v_ptcs[0].start(f()); + if (any from v_ptcs.alive) { + setverdict(pass); + } + } + + control { + execute(TC_NegSem_210305_alive_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_001.ttcn new file mode 100644 index 0000000..8ef6eff --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when using index redirection in component.alive operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210305_alive_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210305_alive_operation_001() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isAlive := v_ptc.alive -> @index value v_index; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSyn_210305_alive_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_002.ttcn new file mode 100644 index 0000000..6ece880 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_002.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when using index redirection in any component.alive operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210305_alive_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210305_alive_operation_002() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isAlive := any component.alive -> @index value v_index; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSyn_210305_alive_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_003.ttcn new file mode 100644 index 0000000..88ed568 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_003.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when using index redirection in all component.alive operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210305_alive_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210305_alive_operation_003() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isAlive := all component.alive -> @index value v_index; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSyn_210305_alive_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_004.ttcn new file mode 100644 index 0000000..6035c31 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/NegSyn_210305_alive_operation_004.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that error occurs when using index redirection in function instance.alive operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210305_alive_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + function initComp() return GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + return v_ptc; + } + + testcase TC_NegSyn_210305_alive_operation_004() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + var integer v_index; + v_isAlive := initComp().alive -> @index value v_index; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_NegSyn_210305_alive_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_001.ttcn new file mode 100644 index 0000000..3f64ac2 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_001.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Testing alive operator with an alive test component + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Alive test component calls a function f1. Afterwards calls f2 function + +module Sem_210305_alive_operation_001 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + function f2 ( integer p_integer ) runs on GeneralComp return integer { + v_gc:=p_integer*p_integer; + return v_gc; + } + testcase TC_Sem_210305_alive_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + ptc:=GeneralComp.create alive; + + ptc.start(f1()); + + ptc.done; + + if (ptc.alive) { + ptc.start(f2(3)); + v_res:=f2(3); +} + + if(v_res==9) + { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210305_alive_operation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_002.ttcn new file mode 100644 index 0000000..00a28ed --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Test all component alive operator with alive test components + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +//Test all component alive operator in case when two alive test components is already running + +module Sem_210305_alive_operation_002 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210305_alive_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + ptc.done; + + if (all component.alive) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210305_alive_operation_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_003.ttcn new file mode 100644 index 0000000..2182c6e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Ensure that alive operator gives a correct boolean result + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Two alive test components.ptc killed, than the alive check. +module Sem_210305_alive_operation_003 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210305_alive_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + ptc.kill; + + if (match(ptc.alive, false) and match(ptc2.alive, true)) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210305_alive_operation_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_004.ttcn new file mode 100644 index 0000000..224c5cc --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_004.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Test any component alive operator with multiple test components + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Any component alive test with two test components. + +module Sem_210305_alive_operation_004 { + + type component GeneralComp { + var integer v_gc:=0; + var integer v_res:=0;} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210305_alive_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + ptc.kill; + + if (any component.alive) { + setverdict(pass); + } + else + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_210305_alive_operation_004()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_005.ttcn new file mode 100644 index 0000000..3ff92b0 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_005.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive returns false if no component is alive + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being inactive or running a function from +// innermost to outermost dimension from lowest to highest index for each dimension. The first +// component to be found being inactive or running a function causes the alive operation to +// return the true value. +module Sem_210305_alive_operation_005 { + + type component GeneralComp {} + + testcase TC_Sem_210305_alive_operation_005() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isAlive := any from v_ptc.alive; + if(not v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation incorrectly detected an alive component"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_006.ttcn new file mode 100644 index 0000000..d4beae5 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_006.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive returns true if at least one component is inactive + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being inactive or running a function from +// innermost to outermost dimension from lowest to highest index for each dimension. The first +// component to be found being inactive or running a function causes the alive operation to +// return the true value. +module Sem_210305_alive_operation_006 { + + type component GeneralComp {} + + testcase TC_Sem_210305_alive_operation_006() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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 + } + v_isAlive := any from v_ptc.alive; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_007.ttcn new file mode 100644 index 0000000..8e7ac99 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_007.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive returns true if at least one component is running + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being inactive or running a function from +// innermost to outermost dimension from lowest to highest index for each dimension. The first +// component to be found being inactive or running a function causes the alive operation to +// return the true value. +module Sem_210305_alive_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_007() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_008.ttcn new file mode 100644 index 0000000..fd643d4 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_008.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive doesn't assign index when no component is alive + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the first component found alive can optionally be assigned to an integer +// variable for single-dimensional component arrays +module Sem_210305_alive_operation_008 { + + type component GeneralComp {} + + testcase TC_Sem_210305_alive_operation_008() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_008(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn new file mode 100644 index 0000000..87ae49f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_009.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the first component found alive can optionally be assigned to an integer +// variable for single-dimensional component arrays. +module Sem_210305_alive_operation_009 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_009() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer 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].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 == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn new file mode 100644 index 0000000..5a453e3 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_010.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive can be used inside expressions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the first component found alive can optionally be assigned to an integer +// variable for single-dimensional component arrays. +module Sem_210305_alive_operation_010 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_010() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate PTC + } + v_isAlive := any from v_ptc.alive -> @index value v_index and v_index == 1; + if(v_isAlive){ + setverdict(pass); + } else { + setverdict(fail, "The any from alive operation didn't find alive components"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn new file mode 100644 index 0000000..64e2c6c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_011.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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 Sem_210305_alive_operation_011 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_011() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[2]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn new file mode 100644 index 0000000..d95a40e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_012.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify that any from alive doesn't change index variable when no component is alive + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the first component found alive can optionally be assigned to an integer +// variable for single-dimensional component arrays +module Sem_210305_alive_operation_012 { + + type component GeneralComp {} + + testcase TC_Sem_210305_alive_operation_012() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index := 99; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isAlive := any from v_ptc.alive -> @index value v_index; + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_012(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn new file mode 100644 index 0000000..38c55b1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_013.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify any from alive index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the alive operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the alive +// operation. +module Sem_210305_alive_operation_013 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_013() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @lazy integer 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].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; + v_ptc[1].kill; // component at position 1 is killed after the redirect assignment + if(v_index == 1) { // no alive call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn new file mode 100644 index 0000000..2868dd9 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_014.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.5, Verify any from alive index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the alive operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the alive +// operation. +module Sem_210305_alive_operation_014 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210305_alive_operation_014() runs on GeneralComp system GeneralComp { + var boolean v_isAlive; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @fuzzy integer 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].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; + v_ptc[1].kill; // component at position 1 is killed after the redirect assignment + if(v_index == 1) { // no alive call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210305_alive_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn new file mode 100644 index 0000000..3de087e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210305_alive_operation/Sem_210305_alive_operation_015.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 521 + ** @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()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn new file mode 100644 index 0000000..84f90ff --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when any from running is applied to single component + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction b +// The ComponentArrayRef shall be a reference to a component array variable identifier. +module NegSem_210306_running_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210306_running_operation_001() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isRunning := any from v_ptc.running; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSem_210306_running_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn new file mode 100644 index 0000000..ab19736 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_002.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when any from running 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_210306_running_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210306_running_operation_002() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + 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_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index[0] == 1){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSem_210306_running_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn new file mode 100644 index 0000000..959db16 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_003.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when any from running is applied to 1D array and index target has wrong type + ** @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_210306_running_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210306_running_operation_003() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index == 1.0){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSem_210306_running_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_004.ttcn new file mode 100644 index 0000000..8a9594b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_004.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210306_running_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210306_running_operation_004() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[1]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_NegSem_210306_running_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_005.ttcn new file mode 100644 index 0000000..9a37d72 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210306_running_operation_005 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210306_running_operation_005() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_NegSem_210306_running_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_006.ttcn new file mode 100644 index 0000000..bda535d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSem_210306_running_operation_006.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.6, partially initialized array in any from ComponentArrayRef.running + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The ComponentArrayRef shall be a reference to a completely initialized component array. + +module NegSem_210306_running_operation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.receive(integer:?); + } + + testcase TC_NegSem_210306_running_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[2]; + v_ptcs[0] := GeneralComp.create; + v_ptcs[0].start(f()); + if (any from v_ptcs.running) { + setverdict(pass); + } + } + + control { + execute(TC_NegSem_210306_running_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_001.ttcn new file mode 100644 index 0000000..0d81e8a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when using index redirection in component.running operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210306_running_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210306_running_operation_001() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isRunning := v_ptc.running -> @index value v_index; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSyn_210306_running_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_002.ttcn new file mode 100644 index 0000000..91d61a9 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_002.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when using index redirection in any component.running operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210306_running_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210306_running_operation_002() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isRunning := any component.running -> @index value v_index; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSyn_210306_running_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_003.ttcn new file mode 100644 index 0000000..0664771 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_003.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when using index redirection in all component.running operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210306_running_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210306_running_operation_003() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + v_isRunning := all component.running -> @index value v_index; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSyn_210306_running_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_004.ttcn new file mode 100644 index 0000000..615545a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/NegSyn_210306_running_operation_004.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that error occurs when using index redirection in function instance.running operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210306_running_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + function initComp() return GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + return v_ptc; + } + + testcase TC_NegSyn_210306_running_operation_004() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + var integer v_index; + v_isRunning := initComp().running -> @index value v_index; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_NegSyn_210306_running_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_001.ttcn new file mode 100644 index 0000000..caf6b79 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Check that running operator provides information about test components. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_210306_running_operation_001 { + + type component GeneralComp {} + + function f1 ( ) runs on GeneralComp { + while (true) {} // block forever + } + + testcase TC_Sem_210306_running_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + ptc.stop; + + // Check that ptc is not running, and ptc2 component is running + if (match(ptc.running, false) and match(ptc2.running, true)) { + setverdict(pass); + } else { + setverdict(fail, "either stopped ptc is running or not stopped ptc2 is not running"); + } + } + + control { + execute(TC_Sem_210306_running_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_002.ttcn new file mode 100644 index 0000000..a1dbd75 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_002.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Any component with running can check the status of the test components + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_210306_running_operation_002 { + + type component GeneralComp {} + + function f1 ( ) runs on GeneralComp { + while (true) {} // block forever + } + + testcase TC_Sem_210306_running_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create; + ptc2:=GeneralComp.create; + + ptc.start(f1()); + ptc2.start(f1()); + + ptc.kill; + + // Any component running test that from two test components at least one is running or not + if (any component.running == true) { //ptc2 running + setverdict(pass); + } else { + setverdict(fail, "ptc2 should still be running"); + } + } + + control { + execute(TC_Sem_210306_running_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_003.ttcn new file mode 100644 index 0000000..9c7b1d5 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_003.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running returns false if no component is running + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for executing currently from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// executing causes the running operation to succeed. +module Sem_210306_running_operation_003 { + + type component GeneralComp {} + + testcase TC_Sem_210306_running_operation_003() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isRunning := any from v_ptc.running; + if(not v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation incorrectly detected an running component"); + } + } + + control { + execute(TC_Sem_210306_running_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_004.ttcn new file mode 100644 index 0000000..15d85ed --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_004.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running returns true if at least one component is running + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for executing currently from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// executing causes the running operation to succeed. +module Sem_210306_running_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_004() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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_isRunning := any from v_ptc.running; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_Sem_210306_running_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_005.ttcn new file mode 100644 index 0000000..2a9ab13 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_005.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running doesn't assign index when no component is running + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210306_running_operation_005 { + + type component GeneralComp {} + + testcase TC_Sem_210306_running_operation_005() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_005(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_006.ttcn new file mode 100644 index 0000000..5f73671 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_006.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running doesn't change index variable when no component is running + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210306_running_operation_006 { + + type component GeneralComp {} + + testcase TC_Sem_210306_running_operation_006() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index := 99; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].kill; + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_006(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_007.ttcn new file mode 100644 index 0000000..31af178 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_007.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210306_running_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_007() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_008.ttcn new file mode 100644 index 0000000..d131497 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_008.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running can be used inside expressions + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210306_running_operation_008 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_008() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate PTC + } + v_isRunning := any from v_ptc.running -> @index value v_index and v_index == 1; + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_Sem_210306_running_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_009.ttcn new file mode 100644 index 0000000..5116cfc --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_009.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that any from running index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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 Sem_210306_running_operation_009 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_009() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[2]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + v_isRunning := any from v_ptc.running -> @index value v_index; + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn new file mode 100644 index 0000000..8ffc853 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_010.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify any from running index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the running operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// running operation. +module Sem_210306_running_operation_010 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_010() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @lazy integer 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + v_isRunning := any from v_ptc.running -> @index value v_index; + v_ptc[1].kill; // component at position 1 is killed after the redirect assignment + if(v_index == 1) { // no running call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn new file mode 100644 index 0000000..b353768 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_011.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify any from running index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the running operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// running operation. +module Sem_210306_running_operation_011 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_011() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @fuzzy integer 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + v_isRunning := any from v_ptc.running -> @index value v_index; + v_ptc[1].kill; // component at position 1 is killed after the redirect assignment + if(v_index == 1) { // no running call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210306_running_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn new file mode 100644 index 0000000..b7d4659 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_012.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.6, Verify that all component.running produces true if some components haven't been started + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the all keyword is used with the running operation, it will return true if all PTCs started +// but not stopped explicitly by another component are executing their behaviour. Otherwise it +// returns false. +// Interpretation according to the following note: +// The difference between the running operation applied to a single ptc and the usage of the all +// keyword leads to the situation that ptc.running is false if the ptc has never been started but +// all component.running is true at the same time as it considers only those components that ever +// have been started. +module Sem_210306_running_operation_012 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210306_running_operation_012() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i mod 2 == 1) { v_ptc[i].start(f());} // start only components with odd index + } + v_isRunning := all component.running; // only once started components shall be considered + if(v_isRunning){ + setverdict(pass); + } else { + setverdict(fail, "The any from running operation didn't find running components"); + } + } + + control { + execute(TC_Sem_210306_running_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn new file mode 100644 index 0000000..e435299 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210306_running_operation/Sem_210306_running_operation_013.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 521 + ** @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 { + while (true) {} // block forever + } + + testcase TC_Sem_210306_running_operation_013() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + 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()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn new file mode 100644 index 0000000..64e0a3c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_001.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Ensure that done operator can be used only for ptcs. + ** @verdict pass reject + *****************************************************************/ +// Done operator can be used only for ptcs, not for mtcs. + +module NegSem_210307_done_operation_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_NegSem_210307_done_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + + GeneralComp.done; // not allowed. Done only allowed for ptcs. + + } + + control { + execute(TC_NegSem_210307_done_operation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn new file mode 100644 index 0000000..58627c6 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when any from done is applied to single component + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The ComponentArrayRef shall be a reference to a component array variable identifier. +module NegSem_210307_done_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210307_done_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] any from v_ptc.done { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSem_210307_done_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn new file mode 100644 index 0000000..a822952 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_003.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when any from done is applied to 1D array and index target is array + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e +// 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_210307_done_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210307_done_operation_003() runs on GeneralComp system GeneralComp { + 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 + } + alt + { + [] any from v_ptc.done -> @index value v_index + { + if(v_index[0] == 1){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSem_210307_done_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_004.ttcn new file mode 100644 index 0000000..681586f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_004.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when any from done is applied to 1D array and index target has wrong type + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e +// 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_210307_done_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210307_done_operation_004() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + alt + { + [] any from v_ptc.done -> @index value v_index + { + if(v_index == 1.0){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSem_210307_done_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_005.ttcn new file mode 100644 index 0000000..c683bf9 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_005.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction f: +// 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_210307_done_operation_005 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210307_done_operation_005() runs on GeneralComp system GeneralComp { + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[1]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + alt + { + [] any from v_ptc.done -> @index value v_index + { + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSem_210307_done_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_006.ttcn new file mode 100644 index 0000000..ff7a82a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_006.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction f: +// 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_210307_done_operation_006 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210307_done_operation_006() runs on GeneralComp system GeneralComp { + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + alt + { + [] any from v_ptc.done -> @index value v_index + { + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSem_210307_done_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_007.ttcn new file mode 100644 index 0000000..c50135c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_007.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, variable of incorrect type used for storing verdict in done operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable used in the (optional) value clause for storing the final local verdict +// of a PTC shall be of the type verdicttype. + +module NegSem_210307_done_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210307_done_operation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var boolean v_verdict; + v_ptc.start(f()); + alt { + [] v_ptc.done -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210307_done_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_008.ttcn new file mode 100644 index 0000000..135018b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_008.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, storing verdict in any component.done operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The (optional) value clause for storing the final local verdict of a PTC shall not be used +// in combination with all component or any component. + +module NegSem_210307_done_operation_008 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210307_done_operation_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] any component.done -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210307_done_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_009.ttcn new file mode 100644 index 0000000..829e7c4 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_009.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, storing verdict in all component.done operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The (optional) value clause for storing the final local verdict of a PTC shall not be used +// in combination with all component or any component. + +module NegSem_210307_done_operation_009 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210307_done_operation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] all component.done -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210307_done_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_010.ttcn new file mode 100644 index 0000000..405aa5a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSem_210307_done_operation_010.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, partially initialized array in any from ComponentArrayRef.done + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The ComponentArrayRef shall be a reference to a completely initialized component array. + +module NegSem_210307_done_operation_010 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210307_done_operation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[2]; + var verdicttype v_verdict; + v_ptcs[0] := GeneralComp.create; + v_ptcs[0].start(f()); + alt { + [] any from v_ptcs.done { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210307_done_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_001.ttcn new file mode 100644 index 0000000..ec4dea3 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when using index redirection in component.done operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction d +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210307_done_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210307_done_operation_001() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] v_ptc.done -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSyn_210307_done_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_002.ttcn new file mode 100644 index 0000000..8c6d52d --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when using index redirection in any component.done operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction d +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210307_done_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210307_done_operation_002() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] any component.done -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSyn_210307_done_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_003.ttcn new file mode 100644 index 0000000..591df0a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_003.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when using index redirection in all component.done operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction d +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210307_done_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210307_done_operation_003() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] all component.done -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSyn_210307_done_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_004.ttcn new file mode 100644 index 0000000..23379df --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/NegSyn_210307_done_operation_004.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that error occurs when using index redirection in function instance.done operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction d +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210307_done_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + function f_getComp(GeneralComp p_ptc) return GeneralComp { + return p_ptc; + } + + testcase TC_NegSyn_210307_done_operation_004() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + alt + { + [] any from f_getComp(v_ptc).done -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't find done components"); } + } + } + + control { + execute(TC_NegSyn_210307_done_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_001.ttcn new file mode 100644 index 0000000..5cda27b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Ensure that all component with done can check that at least one test component is not done + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Any component done to check that two test component finished. + +module Sem_210307_done_operation_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210307_done_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + + all component.done; + + alt { + [] all component.done {setverdict(pass);} + } + + + } + + control { + execute(TC_Sem_210307_done_operation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_002.ttcn new file mode 100644 index 0000000..36492f4 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_002.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done is not triggered if no component has been started + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being stopped or killed from innermost to +// outermost dimension from lowest to highest index for each dimension. The first component to +// be found stopped or killed causes the done operation to succeed. +module Sem_210307_done_operation_002 { + + type component GeneralComp {} + + testcase TC_Sem_210307_done_operation_002() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + } + alt + { + [] any from v_ptc.done { setverdict(fail, "The any from done operation found stopped or killed component"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_210307_done_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_003.ttcn new file mode 100644 index 0000000..2f8f486 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_003.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done matches if at least one component is stopped or killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for executing currently from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// executing causes the done operation to succeed. +module Sem_210307_done_operation_003 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_003() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 3) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.done { setverdict(pass); } + [else] { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_004.ttcn new file mode 100644 index 0000000..8974964 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_004.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done doesn't assign index when no component has been stopped or killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210307_done_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_004() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.done -> @index value v_index { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + [else] { setverdict(pass); } + } + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210307_done_operation_004(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_005.ttcn new file mode 100644 index 0000000..e187b9e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_005.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done doesn't change index variable when no component has been stopped or killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210307_done_operation_005 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_005() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index := 99; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.done -> @index value v_index { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + [else] { setverdict(pass); } + } + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210307_done_operation_005(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_006.ttcn new file mode 100644 index 0000000..706ae10 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_006.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210307_done_operation_006 { + + type component GeneralComp {} + + function f(float f_time) runs on GeneralComp { + timer t := f_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_006() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.done -> @index value v_index { + if(v_index == 2){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_007.ttcn new file mode 100644 index 0000000..dc0c11c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_007.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done is not triggered if all components are executing function + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being stopped or killed from innermost to +// outermost dimension from lowest to highest index for each dimension. The first component to +// be found stopped or killed causes the done operation to succeed. +module Sem_210307_done_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_007() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.done { setverdict(fail, "The any from done operation found stopped or killed component"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_210307_done_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_008.ttcn new file mode 100644 index 0000000..9898245 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_008.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that any from done index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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 Sem_210307_done_operation_008 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_008() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[2]; + timer t := 2.0; + 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 == 2 and j == 1) { v_ptc[i][j].start(f(1.0)); } + else { v_ptc[i][j].start(f(100.0));} // activate v_ptc + } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.done -> @index value v_index { + if(v_index[0] == 2 and v_index[1] == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_009.ttcn new file mode 100644 index 0000000..828e454 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_009.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify any from done index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction g +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the done operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// done operation. +module Sem_210307_done_operation_009 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_009() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @lazy integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.done -> @index value v_index { + v_ptc[0].kill; // component at position 0 is killed after the redirect assignment + if(v_index == 2){ // no done call during evaluation, v_index remains equal to 2 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_010.ttcn new file mode 100644 index 0000000..c244708 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_010.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify any from done index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction g +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the done operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// done operation. +module Sem_210307_done_operation_010 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_010() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @fuzzy integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.done -> @index value v_index { + v_ptc[0].kill; // component at position 0 is killed after the redirect assignment + if(v_index == 2){ // no done call during evaluation, v_index remains equal to 2 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from done operation didn't found stopped or killed component"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_011.ttcn new file mode 100644 index 0000000..1e3ca18 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_011.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.7, Verify that all component.done produces true if some components haven't been started + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the all keyword is used with the done operation, it matches if no one PTC is executing its +// behaviour. It also matches if no PTC has been created. +// Interpretation according to the following note: +// The difference between the done operation applied to a single ptc and the usage of the all +// keyword leads to the situation that ptc.done does not match if the ptc has never been started +// but all component.done matches at the same time as it considers only those components that +// ever have been started . +module Sem_210307_done_operation_011 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210307_done_operation_011() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 4; + var GeneralComp v_ptc := GeneralComp.create; + alt { + [] v_ptc.done { setverdict(fail, "PTC is not done yet (it actually hasn't been started yet)" )} + [] all component.done { setverdict(pass); } + [else] { setverdict(fail, "all component.done wasn't triggered"); } + } + } + + control { + execute(TC_Sem_210307_done_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_012.ttcn new file mode 100644 index 0000000..a0885af --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210307_done_operation/Sem_210307_done_operation_012.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, storing verdict in done operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When the done operation is applied to a PTC and matches, the final local verdict of the PTC +// can be retrieved and stored in variable of the type verdicttype. This is denoted by the +// symbol '->' the keyword value followed by the name of the variable into which the verdict +// is stored. + +module Sem_210307_done_operation_012 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_210307_done_operation_012() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] v_ptc.done -> value v_verdict { + if (v_verdict != pass) { setverdict(fail, "Invalid PTC verdict"); } + } + } + } + + control { + execute(TC_Sem_210307_done_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_001.ttcn new file mode 100644 index 0000000..9ee77ed --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_001.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Ensure that killed operator is only valid for ptcs. + ** @verdict pass reject + *****************************************************************/ +// killed operator is not allowed for mtc check. + +module NegSem_210308_killed_operation_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_NegSem_210308_killed_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + + mtc.kill; + + alt { + [] any component killed {setverdict(pass);} // not allowed. killed only allowed for ptcs. + } + } + + control { + execute(TC_NegSem_210308_killed_operation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_002.ttcn new file mode 100644 index 0000000..47233e6 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_002.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when any from killed is applied to single component + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction b +// The ComponentArrayRef shall be a reference to a component array variable identifier. +module NegSem_210308_killed_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210308_killed_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.kill; + alt + { + [] any from v_ptc.killed { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_003.ttcn new file mode 100644 index 0000000..1161001 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_003.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when any from killed 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_210308_killed_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210308_killed_operation_003() runs on GeneralComp system GeneralComp { + 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 + } + alt + { + [] any from v_ptc.killed -> @index value v_index + { + if(v_index[0] == 1){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_004.ttcn new file mode 100644 index 0000000..bc12136 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_004.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when any from killed is applied to 1D array and index target has wrong type + ** @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_210308_killed_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210308_killed_operation_004() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + 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].kill; } // kill components on even indices + else { v_ptc[i].start(f());} // activate v_ptc + } + alt + { + [] any from v_ptc.killed -> @index value v_index + { + if(v_index == 1.0){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_005.ttcn new file mode 100644 index 0000000..14864e1 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_005.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210308_killed_operation_005 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210308_killed_operation_005() runs on GeneralComp system GeneralComp { + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[1]; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + alt + { + [] any from v_ptc.killed -> @index value v_index + { + if(v_index[0] == 1 and v_index[1] == 0){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_006.ttcn new file mode 100644 index 0000000..f8be21e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_006.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e: +// 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_210308_killed_operation_006 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_NegSem_210308_killed_operation_006() runs on GeneralComp system GeneralComp { + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index; + 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].kill; } // kill components on even i or odd j + else { v_ptc[i][j].start(f());} // activate v_ptc + } + } + alt + { + [] any from v_ptc.killed -> @index value v_index + { + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Invalid index value"); + } + setverdict(pass); + } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_007.ttcn new file mode 100644 index 0000000..56ab3af --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_007.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.8, variable of incorrect type used for storing verdict in killed operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable used in the (optional) value clause for storing the final local verdict +// of a PTC shall be of the type verdicttype. + +module NegSem_210308_killed_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210308_killed_operation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var boolean v_verdict; + v_ptc.start(f()); + alt { + [] v_ptc.killed -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_008.ttcn new file mode 100644 index 0000000..1f4cc8b --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_008.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.8, storing verdict in any component.killed operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The (optional) value clause for storing the final local verdict of a PTC shall not be used +// in combination with all component or any component. + +module NegSem_210308_killed_operation_008 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210308_killed_operation_008() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] any component.killed -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_009.ttcn new file mode 100644 index 0000000..be9b883 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_009.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.8, storing verdict in all component.killed operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The (optional) value clause for storing the final local verdict of a PTC shall not be used +// in combination with all component or any component. + +module NegSem_210308_killed_operation_009 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210308_killed_operation_009() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] all component.killed -> value v_verdict { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210308_killed_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_010.ttcn new file mode 100644 index 0000000..a660d8f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSem_210308_killed_operation_010.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.7, partially initialized array in any from ComponentArrayRef.killed + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The ComponentArrayRef shall be a reference to a completely initialized component array. + +module NegSem_210307_done_operation_010 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_NegSem_210307_done_operation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[2]; + var verdicttype v_verdict; + v_ptcs[0] := GeneralComp.create; + v_ptcs[0].start(f()); + alt { + [] any from v_ptcs.killed { + setverdict(pass); + } + } + } + + control { + execute(TC_NegSem_210307_done_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_001.ttcn new file mode 100644 index 0000000..88c6e73 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when using index redirection in component.killed operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210308_killed_operation_001 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210308_killed_operation_001() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] v_ptc.killed -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSyn_210308_killed_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_002.ttcn new file mode 100644 index 0000000..1327d47 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when using index redirection in any component.killed operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210308_killed_operation_002 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210308_killed_operation_002() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] any component.killed -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSyn_210308_killed_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_003.ttcn new file mode 100644 index 0000000..212bf0f --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_003.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when using index redirection in all component.killed operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210308_killed_operation_003 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_NegSyn_210308_killed_operation_003() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + v_ptc.start(f()); + alt + { + [] all component.killed -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSyn_210308_killed_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_004.ttcn new file mode 100644 index 0000000..b39e8e8 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/NegSyn_210308_killed_operation_004.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that error occurs when using index redirection in function instance.killed operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction c +// The index redirection shall only be used when the operation is used on an any from +// component array construct. +module NegSyn_210308_killed_operation_004 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + function f_getComp(GeneralComp p_ptc) return GeneralComp { + return p_ptc; + } + + testcase TC_NegSyn_210308_killed_operation_004() runs on GeneralComp system GeneralComp { + var integer v_index; + var GeneralComp v_ptc := GeneralComp.create; + alt + { + [] any from f_getComp(v_ptc).killed -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't find killed components"); } + } + } + + control { + execute(TC_NegSyn_210308_killed_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_001.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_001.ttcn new file mode 100644 index 0000000..c2fce0e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Ensure that all component kill can be checked with killed operator + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// all components are killed, than check the status with killed operator + +module Sem_210308_killed_operation_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210308_killed_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + + all component.kill; + + alt { + [] all component.killed {setverdict(pass);} + } + + + } + + control { + execute(TC_Sem_210308_killed_operation_001()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_002.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_002.ttcn new file mode 100644 index 0000000..e68026a --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.8, check that any component and killed operator can check that at least one test component is running or not + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// Check that at least one test component is still running or not +module Sem_210308_killed_operation_002 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210308_killed_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create alive; + + ptc.start(f1()); + ptc2.start(f1()); + + ptc.kill; + + alt { + [] any component.killed {setverdict(pass);} + } + + + } + + control { + execute(TC_Sem_210308_killed_operation_002()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_003.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_003.ttcn new file mode 100644 index 0000000..3b96434 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_003.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Ensure that the alive keyword is properly evaluated + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_210308_killed_operation_003 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_210308_killed_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp ptc; + var GeneralComp ptc2; + ptc:=GeneralComp.create alive; + ptc2:=GeneralComp.create; + + ptc.start(f1()); + ptc2.start(f1()); + + ptc.stop; + ptc2.stop; + + alt { + [] all component.killed {setverdict(fail);} //ptc is alive only kill stops it + [] ptc2.killed {setverdict(pass);} + } + + + } + + control { + execute(TC_Sem_210308_killed_operation_003()); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_004.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_004.ttcn new file mode 100644 index 0000000..a20be56 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_004.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed is not triggered if no component has been started + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being killed from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// killed causes the killed operation to succeed. +module Sem_210308_killed_operation_004 { + + type component GeneralComp {} + + testcase TC_Sem_210308_killed_operation_004() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + } + alt + { + [] any from v_ptc.killed { setverdict(fail, "The any from killed operation found killed component"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_005.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_005.ttcn new file mode 100644 index 0000000..1901498 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_005.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed matches if at least one component is stopped or killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being killed from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// killed causes the killed operation to succeed. +module Sem_210308_killed_operation_005 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_005() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; + if (i == 3) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed { setverdict(pass); } + [else] { setverdict(fail, "The any from killed operation didn't found killed component"); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_006.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_006.ttcn new file mode 100644 index 0000000..5d4a936 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_006.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed doesn't assign index when no component has been killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210308_killed_operation_006 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_006() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create alive; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.killed -> @index value v_index { setverdict(fail, "The any from killed operation didn't found killed component"); } + [else] { setverdict(pass); } + } + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210308_killed_operation_006(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_007.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_007.ttcn new file mode 100644 index 0000000..5a8f517 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_007.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed doesn't change index variable when no component has been killed + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210308_killed_operation_007 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_007() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index := 99; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create alive; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.killed -> @index value v_index { setverdict(fail, "The any from killed operation didn't found killed component"); } + [else] { setverdict(pass); } + } + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_210308_killed_operation_007(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_008.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_008.ttcn new file mode 100644 index 0000000..de24056 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_008.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The index of the matched component can optionally be assigned to an integer variable +// for single-dimensional component arrays... +module Sem_210308_killed_operation_008 { + + type component GeneralComp {} + + function f(float f_time) runs on GeneralComp { + timer t := f_time; + t.start; + t.timeout; + kill; + } + + testcase TC_Sem_210308_killed_operation_008() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create alive; + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed -> @index value v_index { + if(v_index == 2){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from killed operation didn't found killed component"); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_009.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_009.ttcn new file mode 100644 index 0000000..e20f3ca --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_009.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed is not triggered if all components are executing function + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being killed from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// killed causes the killed operation to succeed. +module Sem_210308_killed_operation_009 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 100.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_009() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create alive; + v_ptc[i].start(f()); + } + alt + { + [] any from v_ptc.killed { setverdict(fail, "The any from killed operation found killed component"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_010.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_010.ttcn new file mode 100644 index 0000000..4e84f86 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_010.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction d: +// 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 Sem_210308_killed_operation_010 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + kill; + } + + testcase TC_Sem_210308_killed_operation_010() runs on GeneralComp system GeneralComp { + var boolean v_isRunning; + const integer c_size := 3; + var GeneralComp v_ptc[c_size][c_size]; + var integer v_index[2]; + timer t := 2.0; + 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 alive; // created components are inactive + if (i == 2 and j == 1) { v_ptc[i][j].start(f(1.0)); } + else { v_ptc[i][j].start(f(100.0));} // activate v_ptc + } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed -> @index value v_index { + if(v_index[0] == 2 and v_index[1] == 1){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from killed operation didn't found killed component"); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_011.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_011.ttcn new file mode 100644 index 0000000..ca4bdb2 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_011.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify any from killed index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the killed operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// killed operation. +module Sem_210308_killed_operation_011 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_011() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @lazy integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed -> @index value v_index { + v_ptc[0].kill; // component at position 0 is killed after the redirect assignment + if(v_index == 2){ // no killed call during evaluation, v_index remains equal to 2 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from killed operation didn't found killed component"); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_012.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_012.ttcn new file mode 100644 index 0000000..776cc4e --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_012.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify any from killed index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the killed operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// killed operation. +module Sem_210308_killed_operation_012 { + + type component GeneralComp {} + + function f(float p_time) runs on GeneralComp { + timer t := p_time; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_012() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + var @fuzzy integer v_index; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create; // created components are inactive + if (i == 2) { v_ptc[i].start(f(1.0)); } + else { v_ptc[i].start(f(100.0)); } + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed -> @index value v_index { + v_ptc[0].kill; // component at position 0 is killed after the redirect assignment + if(v_index == 2){ // no killed call during evaluation, v_index remains equal to 2 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from killed operation didn't found killed component"); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_013.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_013.ttcn new file mode 100644 index 0000000..798a5a8 --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_013.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:21.3.8, Verify that any from killed is not triggered if when alive component has stopped execution + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// When the any from component array notation is used, the components from the referenced array +// are iterated over and individually checked for being killed from innermost to outermost +// dimension from lowest to highest index for each dimension. The first component to be found +// killed causes the killed operation to succeed. +module Sem_210308_killed_operation_013 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + timer t := 1.0; + t.start; + t.timeout; + } + + testcase TC_Sem_210308_killed_operation_013() runs on GeneralComp system GeneralComp { + const integer c_size := 4; + var GeneralComp v_ptc[c_size]; + timer t := 2.0; + for (var integer i := 0; i < c_size; i := i + 1) { + v_ptc[i] := GeneralComp.create alive; + v_ptc[i].start(f()); + } + t.start; + t.timeout; + alt + { + [] any from v_ptc.killed { setverdict(fail, "The any from killed operation found killed component"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_210308_killed_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_014.ttcn b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_014.ttcn new file mode 100644 index 0000000..fc0bc8c --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210308_killed_operation/Sem_210308_killed_operation_014.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:21.3.8, storing verdict in killed operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When the killed operation is applied to a PTC and matches, the final local verdict of the PTC +// can be retrieved and stored in variable of the type verdicttype. This is denoted by the +// symbol '->' the keyword value followed by the name of the variable into which the verdict +// is stored. + +module Sem_210308_killed_operation_014 { + + type component GeneralComp {} + + function f() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_210308_killed_operation_014() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var verdicttype v_verdict; + v_ptc.start(f()); + alt { + [] v_ptc.killed -> value v_verdict { + if (v_verdict != pass) { setverdict(fail, "Invalid PTC verdict"); } + } + } + } + + control { + execute(TC_Sem_210308_killed_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/21_configuration_operations/2103_test_component_operations/210309_any_and_all_components/NOTES b/core_language/21_configuration_operations/2103_test_component_operations/210309_any_and_all_components/NOTES new file mode 100644 index 0000000..0dd0cba --- /dev/null +++ b/core_language/21_configuration_operations/2103_test_component_operations/210309_any_and_all_components/NOTES @@ -0,0 +1 @@ +Test cases using all and any keywords are already present in preceding subsections of 21.03. \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_001.ttcn new file mode 100644 index 0000000..f622948 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_001.ttcn @@ -0,0 +1,104 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass reject + ***************************************************/ + +module NegSem_220201_SendOperation_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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_220201_SendOperation_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} + } + + template MessageType mw_sendingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=*,b:=2,c:=true}, + field7 := {a:=1,b:=*,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(mw_sendingTemplate); //can only send specific values + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_220201_SendOperation_001()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_002.ttcn new file mode 100644 index 0000000..d698d32 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_002.ttcn @@ -0,0 +1,104 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass reject + ***************************************************/ + +module NegSem_220201_SendOperation_002 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_220201_SendOperation_002() 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} + } + + template MessageType mw_sendingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=?,b:=2,c:=true}, + field7 := {a:=1,b:=?,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(mw_sendingTemplate); //can only send specific values + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_220201_SendOperation_002()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_003.ttcn new file mode 100644 index 0000000..2f0d989 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass reject + ***************************************************/ + +module NegSem_220201_SendOperation_003 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_220201_SendOperation_003() runs on GeneralComp { + + + messagePort.send(float:2.0); //sent type does not match port specification + + alt { + [] messagePort.receive(2) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_220201_SendOperation_003()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_004.ttcn new file mode 100644 index 0000000..fcd3159 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_004.ttcn @@ -0,0 +1,63 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220201_SendOperation_004 { + +signature p_NegSem_220201_SendOperation_004(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + +template p_NegSem_220201_SendOperation_004 s_baseTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := ? +} + +template p_NegSem_220201_SendOperation_004 s_returnTemplate modifies s_baseTemplate := { + p_par3 := 5 +} + +template p_NegSem_220201_SendOperation_004 s_wrongTemplate modifies s_baseTemplate := { + p_par3 := 3 +} + +template p_NegSem_220201_SendOperation_004 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 +} + + type port remotePort procedure { + out p_NegSem_220201_SendOperation_004; + } + +type component GeneralComp { + port remotePort PCO; +} + +testcase NegSem_220201_SendOperation_004() runs on GeneralComp { + + PCO.send(p_NegSem_220201_SendOperation_004:s_callTemplate, 5.0) { //cannot use send operation on a procedure based port + + [] PCO.getreply(p_NegSem_220201_SendOperation_004:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220201_SendOperation_004:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220201_SendOperation_004:s_returnTemplate value 1) { + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } +} + +control{ + execute(NegSem_220201_SendOperation_004()); +} + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_005.ttcn new file mode 100644 index 0000000..420c5a2 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_005.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, missing to clause in case of one-to-many connections + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Unicast, multicast and broadcast communication can be determined by the optional to clause +// in the send operation. A to clause can be omitted in case of a one-to-one connection where +// unicast communication is used and the message receiver is uniquely determined by the test +// system structure. +// A to clause shall be present in case of one-to-many connections. + +module NegSem_220201_SendOperation_005 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + alt { + [] p.receive(p_expected) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } + + const integer c_ptcCount := 2; + + testcase TC_NegSem_220201_SendOperation_005() 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(0)); + } + p.send(0); + all component.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_006.ttcn new file mode 100644 index 0000000..8396482 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_006.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, partially initialized template + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The TemplateInstance (and all parts of it) shall have a specific value i.e. the use +// of matching mechanisms such as AnyValue is not allowed. + +module NegSem_220201_SendOperation_006 { + + type record of integer RoI; + + type port P message { + inout RoI; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_006() runs on GeneralComp { + var template RoI vm_msg := {1, -, 2}; + p.send(vm_msg); + p.receive; + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_007.ttcn new file mode 100644 index 0000000..c4ef3a4 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_007.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, no type prefix in inline template + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When defining the message in-line, the optional type part shall be used if there is +// ambiguity of the type of the message being sent. + + +module NegSem_220201_SendOperation_007 { + + type record R1 + { + integer field1, + integer field2 + } + + type record of integer RoI; + + type port P message { + inout R1, RoI; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_007() runs on GeneralComp { + p.send({1, 2}); + p.receive; + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn new file mode 100644 index 0000000..e1a5f4a --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_008.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.1, incompatible address value in send operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// 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 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_008() runs on GeneralComp { + p.send(1) to "127.0.0.1"; + p.receive(integer:?); + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn new file mode 100644 index 0000000..31206dc --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_009.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.1, null address in the to clause of send 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_220201_SendOperation_009 { + + type port P message { + inout integer; + } + + type integer address; + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_009() runs on GeneralComp { + var address v_addr := null; + p.send(1) to v_addr; + p.receive(integer:?); + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn new file mode 100644 index 0000000..9505d4d --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_010.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.1, null component in the to clause of send 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_220201_SendOperation_010 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_010() runs on GeneralComp system GeneralComp { + var GeneralComp v_comp := null; + connect(self:p, self:p); + p.send(0) to v_comp; + p.receive(integer:?); + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_011.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_011.ttcn new file mode 100644 index 0000000..c77ab7f --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/NegSem_220201_SendOperation_011.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, send operation on disconnected and unmapped ports + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Applying a send operation to an unmapped or disconnected port shall cause a test case +// error. + +module NegSem_220201_SendOperation_011 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220201_SendOperation_011() runs on GeneralComp system GeneralComp { + p.send(0); + setverdict(pass); + } + + control { + execute(TC_NegSem_220201_SendOperation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_001.ttcn new file mode 100644 index 0000000..ba852bb --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_001.ttcn @@ -0,0 +1,104 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220201_SendOperation_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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220201_SendOperation_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} + } + + template MessageType mw_sendingTemplate:= + { + 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} + } + + messagePort.send(mw_sendingTemplate); //can send also template with specific values + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220201_SendOperation_001()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_002.ttcn new file mode 100644 index 0000000..a43b157 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_002.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220201_SendOperation_002 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220201_SendOperation_002() runs on GeneralComp { + + + messagePort.send(2); //can send also in-line template + + alt { + [] messagePort.receive(2) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220201_SendOperation_002()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_003.ttcn new file mode 100644 index 0000000..aec6545 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_003.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220201_SendOperation_003 { + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type set SetType { + integer a optional, + integer b optional, + boolean c + } + + type port loopbackPort message { + inout RecordType, SetType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220201_SendOperation_003() runs on GeneralComp { + + + messagePort.send(RecordType:{1,2,true}); //can send also in-line template + + alt { + [] messagePort.receive(RecordType:{1,2,true}) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220201_SendOperation_003()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_004.ttcn new file mode 100644 index 0000000..a9009ee --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.1, Ensure that the IUT correctly handles message sending operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220201_SendOperation_004 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220201_SendOperation_004() runs on GeneralComp { + var integer v_1:=2, v_2:=3; + + messagePort.send(v_1*v_2+1); //can send also the results of operations + + alt { + [] messagePort.receive(7) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220201_SendOperation_004()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_005.ttcn new file mode 100644 index 0000000..283484b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_005.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, unicast send operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Unicast communication is specified, if the to clause addresses one communication partner +// only. + +module Sem_220201_SendOperation_005 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + alt { + [] p.receive(p_expected) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } + + const integer c_ptcCount := 2; + + testcase TC_Sem_220201_SendOperation_005() 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(i)); + } + p.send(0) to v_ptcs[0]; + p.send(1) to v_ptcs[1]; + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220201_SendOperation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_006.ttcn new file mode 100644 index 0000000..ea4ad24 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_006.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, multicast send operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Multicast communication is used, if the to clause includes a list of communication +// partners. + +module Sem_220201_SendOperation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + alt { + [] p.receive(p_expected) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } + + const integer c_ptcCount := 4; + + testcase TC_Sem_220201_SendOperation_006() 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(i mod 2)); + } + p.send(0) to (v_ptcs[0], v_ptcs[2]); + p.send(1) to (v_ptcs[1], v_ptcs[3]); + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220201_SendOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_007.ttcn new file mode 100644 index 0000000..68516e2 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220201_send_operation/Sem_220201_SendOperation_007.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.1, broadcast send operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Broadcast is defined by using the to clause with all component keyword. + +module Sem_220201_SendOperation_007 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + alt { + [] p.receive(p_expected) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220201_SendOperation_007() 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(0)); + } + p.send(0) to all component; + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220201_SendOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_001.ttcn new file mode 100644 index 0000000..02e0bb8 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_001.ttcn @@ -0,0 +1,63 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220202_ReceiveOperation_001 { + +signature p_NegSem_220202_ReceiveOperation_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + +template p_NegSem_220202_ReceiveOperation_001 s_baseTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := ? +} + +template p_NegSem_220202_ReceiveOperation_001 s_returnTemplate modifies s_baseTemplate := { + p_par3 := 5 +} + +template p_NegSem_220202_ReceiveOperation_001 s_wrongTemplate modifies s_baseTemplate := { + p_par3 := 3 +} + +template p_NegSem_220202_ReceiveOperation_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 +} + + type port remotePort procedure { + out p_NegSem_220202_ReceiveOperation_001; + } + +type component GeneralComp { + port remotePort PCO; +} + +testcase NegSem_220202_ReceiveOperation_001() runs on GeneralComp { + + PCO.call(p_NegSem_220202_ReceiveOperation_001:s_callTemplate, 5.0) { + + [] PCO.receive(p_NegSem_220202_ReceiveOperation_001:s_wrongTemplate value 1) { //cannot receive from procedure based port + setverdict(fail); + } + [] PCO.receive(p_NegSem_220202_ReceiveOperation_001:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.receive(p_NegSem_220202_ReceiveOperation_001:s_returnTemplate value 1) { + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } +} + +control{ + execute(NegSem_220202_ReceiveOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_002.ttcn new file mode 100644 index 0000000..7115159 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_002.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, no type prefix in ambiguous inline template + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// An optional type field in the matching criteria to the receive operation shall +// be used to avoid any ambiguity of the type of the value being received. + +module NegSem_220202_ReceiveOperation_002 { + + type record of integer RoI; + type record R { + integer field1, + integer field2 + } + + type port P message { + inout R, RoI; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_002() runs on GeneralComp { + p.send(R:{1, 2}); + alt { + [] p.receive({?, 2}) { setverdict(pass); } // error (ambiguous type) + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_003.ttcn new file mode 100644 index 0000000..3fbb084 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_003.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, type mismatch in redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable or formal parameter shall be type compatible with the received message. + +module NegSem_220202_ReceiveOperation_003 { + + type port P message { + inout integer, charstring; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_003() runs on GeneralComp { + var charstring v_str; + p.send(1); + alt { + [] p.receive(integer:?) -> value v_str { setverdict(pass); } // error (type mismatch in redirect assignment) + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_004.ttcn new file mode 100644 index 0000000..c87c3c6 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_004.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, type mismatch in redirect assignment of message fields + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The variable or formal parameter shall be type compatible with the type on the +// right hand side of the assignment symbol. + +module NegSem_220202_ReceiveOperation_004 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_004() runs on GeneralComp { + var integer v_int; + var bitstring v_str; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.receive(R:?) -> value ( v_int := field1[1], v_str := field2) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn new file mode 100644 index 0000000..6462d09 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.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_220202_ReceiveOperation_005 { + type record R + { + integer id, + record of integer payload (0..255) + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_005() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + p.send(R:{ id := 1, payload := {0, 0, 0, 0} }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_006.ttcn new file mode 100644 index 0000000..f6ed296 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_006.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.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_220202_ReceiveOperation_006 { + type record R + { + integer id, + charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_006() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src) & "abcdefgij"; + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_007.ttcn new file mode 100644 index 0000000..1644a1b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_007.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.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_220202_ReceiveOperation_007 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_007() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded("proprietary") payload) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_008.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_008.ttcn new file mode 100644 index 0000000..bc84fea --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_008.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.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_220202_ReceiveOperation_008 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_008() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded(v_src) payload) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_009.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_009.ttcn new file mode 100644 index 0000000..06d6287 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_009.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.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_220202_ReceiveOperation_009 { + type record R + { + integer id, + octetstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_009() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_os }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded("UTF-8") payload) { + setverdict (pass); + } + [] p.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_010.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_010.ttcn new file mode 100644 index 0000000..f1bdfb1 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_010.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, attempting to store component name in redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When the message is received on a connected port, only the component reference is +// stored in the following the sender keyword, but the test system shall internally +// store the component name too, if any (to be used in logging). + +module NegSem_220202_ReceiveOperation_010 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_010() runs on GeneralComp system GeneralComp { + var charstring v_name; + connect(self:p, self:p); + p.send(10); + p.receive(integer:?) -> sender v_name; + if (v_name == "MTC") { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_011.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_011.ttcn new file mode 100644 index 0000000..697f7d1 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_011.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, attempting to receive a type missing from the port list + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The receive operation shall only be used on message-based ports and the type of the +// value to be received shall be included in the list of incoming types of the port type +// definition. + + +module NegSem_220202_ReceiveOperation_011 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_011() runs on GeneralComp { + var integer v_index; + p.send(10); + alt { + [] p.receive(charstring:?) { setverdict(pass); } + [] any port.receive { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_012.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_012.ttcn new file mode 100644 index 0000000..492eea7 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_012.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, value redirect assignment in receive any message statement + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// AddressRef for retrieving the sending entity 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 receive operation. + +module NegSem_220202_ReceiveOperation_012 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_012() runs on GeneralComp { + var integer v_val; + p.send(10); + p.receive -> value v_val; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_013.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_013.ttcn new file mode 100644 index 0000000..88bde2a --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_013.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, trying to store address when receiving on connected port + ** @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_220202_ReceiveOperation_013 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_013() runs on GeneralComp system GeneralComp { + var P.address v_addr; + connect(self:p, self:p); + p.send(10); + p.receive -> sender v_addr; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_014.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_014.ttcn new file mode 100644 index 0000000..3ccd259 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_014.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, type mismatch in sender redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// AddressRef for retrieving the sending entity 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 receive operation. + + +module NegSem_220202_ReceiveOperation_014 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_014() runs on GeneralComp { + var charstring v_addr; + p.send(10); + p.receive -> sender v_addr; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_015.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_015.ttcn new file mode 100644 index 0000000..dc496be --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_015.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, null component reference in from clause of receive operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_220202_ReceiveOperation_015 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_015() runs on GeneralComp system GeneralComp { + var GeneralComp v_comp := null; + connect(self:p, self:p); + p.send(10); + alt { + [] p.receive from v_comp {} + [] p.receive {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_016.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_016.ttcn new file mode 100644 index 0000000..b46db28 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_016.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, null address reference in from clause of receive operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_220202_ReceiveOperation_016 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_016() runs on GeneralComp { + var P.address v_addr1 := 1, v_addr2 := 2, v_addr3 := null; + p.send(10); + alt { + [] p.receive from (v_addr1, v_addr2, v_addr3) {} + [] p.receive {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_017.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_017.ttcn new file mode 100644 index 0000000..fc3d254 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_017.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, index redirection in standard port.receive + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The index redirection shall only be used when the operation is used on an any from port +// array construct. + +module NegSem_220202_ReceiveOperation_017 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_017() runs on GeneralComp { + var integer v_int; + p.send(10); + p.receive(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_018.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_018.ttcn new file mode 100644 index 0000000..967e85e --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_018.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, index redirection in any port.receive + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The index redirection shall only be used when the operation is used on an any from port +// array construct. + +module NegSem_220202_ReceiveOperation_018 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_018() runs on GeneralComp { + var integer v_int; + p.send(10); + any port.receive(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_019.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_019.ttcn new file mode 100644 index 0000000..70243f5 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_019.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, insufficient value range of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// 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_220202_ReceiveOperation_019 { + type integer RestrInt(0..2); + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[10]; + } + + testcase TC_NegSem_220202_ReceiveOperation_019() runs on GeneralComp { + var RestrInt v_int; + p[5].send(100); + any from p.receive(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_020.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_020.ttcn new file mode 100644 index 0000000..5ea46da --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_020.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, insufficient array dimension of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the index redirection is used for multi-dimensional port 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_220202_ReceiveOperation_020 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[3][2][3]; + } + + testcase TC_NegSem_220202_ReceiveOperation_020() runs on GeneralComp { + var integer v_indices[2]; + p[0][1][2].send(100); + any from p.receive(integer:?) -> @index value v_indices; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_021.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_021.ttcn new file mode 100644 index 0000000..7551b76 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_021.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, insufficient element value range of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the index redirection is used for multi-dimensional port 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_220202_ReceiveOperation_021 { + type integer RestrInt(0..2); + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[4][2][3]; + } + + testcase TC_NegSem_220202_ReceiveOperation_021() runs on GeneralComp { + var RestrInt v_indices[3]; + p[3][1][2].send(100); + any from p.receive(integer:?) -> @index value v_indices; + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_022.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_022.ttcn new file mode 100644 index 0000000..24e074e --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_022.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, incompatible from and sender clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the receive 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_220202_ReceiveOperation_022 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_022() runs on GeneralComp { + var address v_addr; + p.send(100); + alt { + [] p.receive(integer:?) from GeneralComp:? -> sender v_addr { } + [] p.receive {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn new file mode 100644 index 0000000..2655cf5 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, incompatible decmatch and @decoded value redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded message fields (by using the @decoded modifier) in +// cases where the value or template to be matched uses the MatchDecodedContent (decmatch) +// matching for the field to be stored, the type of the template in the MatchDecodedContent +// matching shall be type-compatible to the type of the variable the decoded field is stored into. + +module NegSem_220202_ReceiveOperation_023 { + + type record R { + integer id, + octetstring payload + } + + type record Wrapped { + integer num + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220202_ReceiveOperation_023() runs on GeneralComp { + var Wrapped v_res; + var R v_rec := { id := 0, payload := bit2oct(encvalue(5)) }; + p.send(v_rec); + alt { + [] p.receive(R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) {} + [] p.receive {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_023(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_024.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_024.ttcn new file mode 100644 index 0000000..a6f532b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_024.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:22.2.2, trying to store an incompatible component value in the sender clause of a receive 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_220202_ReceiveOperation_024 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + type component CustomComp { + var integer vc_int; + } + + testcase TC_NegSem_220202_ReceiveOperation_024() runs on GeneralComp system GeneralComp { + var CustomComp v_sender; + connect(self:p, self:p); + p.send(10); + alt { + // this alternative shall be selected, but the assignment shall generate an error + [] p.receive(integer:?) -> sender v_sender { } + [] p.receive {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220202_ReceiveOperation_024(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_001.ttcn new file mode 100644 index 0000000..2df5fd3 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_001.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220202_ReceiveOperation_001 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220202_ReceiveOperation_001() runs on GeneralComp { + + messagePort.send(2); + + alt { + [] messagePort.receive(1) { //must not remove message from queue + setverdict(fail); + } + [] messagePort.receive(2) { //this alt is only selected if message not removed from the queue + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220202_ReceiveOperation_001()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_002.ttcn new file mode 100644 index 0000000..37d63ac --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_002.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220202_ReceiveOperation_002 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220202_ReceiveOperation_002() runs on GeneralComp { + + messagePort.send(2); + + alt { + [] messagePort.receive { //must remove message from queue + setverdict(pass); + } + [] messagePort.receive { //this alt is only selected if message not removed from the queue + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220202_ReceiveOperation_002()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_003.ttcn new file mode 100644 index 0000000..6e98d7b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_003.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220202_ReceiveOperation_003 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220202_ReceiveOperation_003() runs on GeneralComp { + var integer v_received:=0; + + messagePort.send(2); + + alt { + [] messagePort.receive(integer:?) -> value v_received { + if(v_received==2) { //check that correct value has been stored + setverdict(pass); + } + else { + setverdict(fail); + } + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220202_ReceiveOperation_003()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_004.ttcn new file mode 100644 index 0000000..901afb5 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_004.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220202_ReceiveOperation_004 { + + type charstring address; + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + const address c_address := "Tester"; + + testcase TC_Sem_220202_ReceiveOperation_004() runs on GeneralComp { + var address v_sender; + + messagePort.send(2) to c_address; + + alt { + [] messagePort.receive(2) -> sender v_sender { + messagePort.send(5) to v_sender; + alt { + [] messagePort.receive(5) from v_sender { //check that correct sender address has been assigned + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_Sem_220202_ReceiveOperation_004()); + } + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_005.ttcn new file mode 100644 index 0000000..5faaec7 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_005.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.2, Ensure that the IUT correctly handles message receiving operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220202_ReceiveOperation_005 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220202_ReceiveOperation_005() runs on GeneralComp { + + messagePort.send(2); + + alt { + [] any port.receive(2) { //checks receiving from ny port + setverdict(pass); + } + [] messagePort.receive { //this alt is only selected if message was not removed from the queue + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220202_ReceiveOperation_005()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_006.ttcn new file mode 100644 index 0000000..7327461 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_006.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, receive with a from clause (single item) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In the case of one-to-many connections the receive operation may be restricted +// to a certain communication partner. This restriction shall be denoted using the +// from keyword. + +module Sem_220202_ReceiveOperation_006 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.send(1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220202_ReceiveOperation_006() 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.receive(integer:?) from v_ptcs[0] { setverdict(pass); } // expected 1 from match + [] p.receive(integer:?) { v_receiveCounter := v_receiveCounter + 1; } // expected 2 other received messages + } + } + if (v_receiveCounter != c_ptcCount - 1) { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_007.ttcn new file mode 100644 index 0000000..5167d24 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_007.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, receive with a from clause (multiple items) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In the case of one-to-many connections the receive operation may be restricted +// to a certain communication partner. This restriction shall be denoted using the +// from keyword. + +module Sem_220202_ReceiveOperation_007 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.send(1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220202_ReceiveOperation_007() 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.receive(integer:?) from (v_ptcs[0], v_ptcs[1]) { v_fromCounter := v_fromCounter + 1; } + [] p.receive(integer:?) { v_noFromCounter := v_noFromCounter + 1; } + } + } + if (v_fromCounter == 2 and v_noFromCounter == 1) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_008.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_008.ttcn new file mode 100644 index 0000000..f1ed8a9 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_008.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, receive with a from clause (any component) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In the case of one-to-many connections the receive operation may be restricted +// to a certain communication partner. This restriction shall be denoted using the +// from keyword. + +module Sem_220202_ReceiveOperation_008 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.send(1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220202_ReceiveOperation_008() 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.receive(integer:?) from any component { setverdict(pass); } + [] p.receive(integer:?) { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_009.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_009.ttcn new file mode 100644 index 0000000..4f73e63 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_009.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, redirect assignment of message fields + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When the keyword value is followed by an assignment list enframed by a pair of +// parentheses, the whole received message and/or one or more parts of it can be +// stored. In a single assignment within the list, on the right hand side of the +// assignment symbol (":=") a field of the template type shall be referenced, on +// the left hand side the name of the variable or a formal parameter, in which +// the value shall be stored. + +module Sem_220202_ReceiveOperation_009 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_009() runs on GeneralComp { + var integer v_int; + var charstring v_str; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.receive(R:?) -> value ( v_int := field1[1], v_str := field2) { + if (v_int == 2 and v_str == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_010.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_010.ttcn new file mode 100644 index 0000000..2f39192 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_010.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, redirect assignment of message fields + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// As a special case the field reference can be absent to indicate that the whole +// message shall be stored in a variable. + +module Sem_220202_ReceiveOperation_010 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_010() runs on GeneralComp { + var integer v_int; + var charstring v_str; + var R v_rec; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.receive(R:?) -> value ( v_int := field1[1], v_rec, v_str := field2) { + if (v_int == 2 and v_str == "abc" and v_rec == { field1 := { 1, 2 }, field2 := "abc" }) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_011.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_011.ttcn new file mode 100644 index 0000000..fdc2946 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_011.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, @decoded redirect assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// 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 Sem_220202_ReceiveOperation_011 { + type record R + { + integer id, + bitstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_011() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var bitstring v_bs := encvalue(v_src); + p.send(R:{ id := 1, payload := v_bs }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_012.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_012.ttcn new file mode 100644 index 0000000..d1e5fc1 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_012.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, @decoded redirect assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// 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 Sem_220202_ReceiveOperation_012 { + type record R + { + integer id, + hexstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_012() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var hexstring v_hs := bit2hex(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_hs }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_013.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_013.ttcn new file mode 100644 index 0000000..a29e37f --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_013.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, @decoded redirect assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// 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 Sem_220202_ReceiveOperation_013 { + type record R + { + integer id, + octetstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_013() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_os }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_014.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_014.ttcn new file mode 100644 index 0000000..7a1d027 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_014.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, @decoded redirect assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// 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 Sem_220202_ReceiveOperation_014 { + type record R + { + integer id, + charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_014() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_015.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_015.ttcn new file mode 100644 index 0000000..6754a82 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_015.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, @decoded redirect assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// 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 Sem_220202_ReceiveOperation_015 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_015() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_016.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_016.ttcn new file mode 100644 index 0000000..04c70d8 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_016.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.2, @decoded redirect assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220202_ReceiveOperation_016 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_016() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { variant "32 bit" }; + var universal charstring v_str := encvalue_unichar(v_src, "UTF-16LE"); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.receive(R:?) -> value (v_res := @decoded("UTF-16LE") payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_017.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_017.ttcn new file mode 100644 index 0000000..2b70482 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_017.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, redirect assignment storing a component + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to retrieve and store the component reference or address of +// the sender of a message. This is denoted by the keyword sender. + +module Sem_220202_ReceiveOperation_017 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_017() runs on GeneralComp system GeneralComp { + var GeneralComp v_tc := null; + connect(self:p, self:p); + p.send(10); + p.receive(integer:?) -> sender v_tc; + if (v_tc == self) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_018.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_018.ttcn new file mode 100644 index 0000000..e4be760 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_018.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, redirect assignment storing an address + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to retrieve and store the component reference or address of +// the sender of a message. This is denoted by the keyword sender. + +module Sem_220202_ReceiveOperation_018 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_018() runs on GeneralComp { + var P.address v_addr := null; + p.send(10) to 5; + p.receive(integer:?) -> sender v_addr; + if (v_addr == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_019.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_019.ttcn new file mode 100644 index 0000000..1ff2990 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_019.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, any from port.receive statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// To receive a message on any port from a specific port array, use the any from +// PortArrayRef syntax where PortArrayRef shall be a reference to a port array +// identifier. + +module Sem_220202_ReceiveOperation_019 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [3]; + } + + testcase TC_Sem_220202_ReceiveOperation_019() runs on GeneralComp { + p[2].send(10); + alt { + [] any from p.receive(integer:?) { setverdict(pass); } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_020.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_020.ttcn new file mode 100644 index 0000000..f9d2fd5 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_020.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, single dimensional index redirect in any from port.receive statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array +// at which the operation was successful to a variable of type integer or, in case of +// multi-dimensional port arrays the index of the successful port to an integer array +// or record of integer variable. When checking the port array for matching messages, +// the port indices to be checked are iterated from lowest to highest. If the port +// array is multi-dimensional, then the ports are iterated over from innermost to +// outermost array dimension from lowest to highest index for each dimension, e.g. +// [0][0], [0][1], [1][0], [1][1]. The first port which matches all the criteria will +// cause the operation to be successful even if other ports in the array would also +// meet the criteria. + +module Sem_220202_ReceiveOperation_020 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [3]; + } + + testcase TC_Sem_220202_ReceiveOperation_020() runs on GeneralComp { + var integer v_index; + p[2].send(10); + alt { + [] any from p.receive(integer:?) -> @index value v_index { + if (v_index == 2) { setverdict(pass); } + else { setverdict(fail); } + } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_021.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_021.ttcn new file mode 100644 index 0000000..db91e72 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_021.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, multidimensional index redirect in any from port.receive statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array +// at which the operation was successful to a variable of type integer or, in case of +// multi-dimensional port arrays the index of the successful port to an integer array +// or record of integer variable. When checking the port array for matching messages, +// the port indices to be checked are iterated from lowest to highest. If the port +// array is multi-dimensional, then the ports are iterated over from innermost to +// outermost array dimension from lowest to highest index for each dimension, e.g. +// [0][0], [0][1], [1][0], [1][1]. The first port which matches all the criteria will +// cause the operation to be successful even if other ports in the array would also +// meet the criteria. + +module Sem_220202_ReceiveOperation_021 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [2][3]; + } + + type record of integer RoI; + + testcase TC_Sem_220202_ReceiveOperation_021() runs on GeneralComp { + var RoI v_index; + p[0][2].send(10); + alt { + [] any from p.receive(integer:?) -> @index value v_index { + if (v_index == { 0, 2 }) { setverdict(pass); } + else { setverdict(fail, "v_index: ", v_index); } + } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_022.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_022.ttcn new file mode 100644 index 0000000..117ac3c --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_022.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, standalone receive as a shorthand for alt statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The receive operation can be used as a stand-alone statement in a behaviour description. +// In this latter case the receive operation is considered to be shorthand for an alt +// statement with the receive operation as the only alternative. + +module Sem_220202_ReceiveOperation_022 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive(10) { setverdict(pass); } + } + + testcase TC_Sem_220202_ReceiveOperation_022() runs on GeneralComp { + activate(a()); // defaults should be processed as a part of alt + p.send(10); + p.receive(0); // no match here, but because the statement is actually an alt statement, + // the default shall be automatically exectuted and accept the message + } + + control { + execute(TC_Sem_220202_ReceiveOperation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_023.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_023.ttcn new file mode 100644 index 0000000..5643dd9 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_023.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, single dimensional index redirect in any from port.receive statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// No binding of the incoming values to the terms of the expression or to the template +// shall occur. + +module Sem_220202_ReceiveOperation_023 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_023() runs on GeneralComp { + var template integer v_expectedValue := ?; + p.send(10); + p.receive(v_expectedValue); + // make sure the template variable hasn't changed: + if (istemplatekind(v_expectedValue, "AnyValue")) {setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_023(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_024.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_024.ttcn new file mode 100644 index 0000000..fc180d4 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_024.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, lazy variable in value redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_024 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_024() runs on GeneralComp { + var @lazy integer v_int; + p.send(1); + p.send(2); + p.send(3); + p.receive(integer:?) -> value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_024(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_025.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_025.ttcn new file mode 100644 index 0000000..3e89263 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_025.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, lazy variable in sender redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_025 { + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_025() runs on GeneralComp { + var @lazy address v_addr; + p.send(1) to 1; + p.send(2) to 2; + p.send(3) to 3; + p.receive(integer:?) -> sender v_addr; + if (v_addr == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_025(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_026.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_026.ttcn new file mode 100644 index 0000000..2303e22 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_026.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, lazy variable in index redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_026 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[2]; + } + + testcase TC_Sem_220202_ReceiveOperation_026() runs on GeneralComp { + var @lazy integer v_int; + p[1].send(1); + p[1].send(2); + p[1].send(3); + any from p.receive(integer:?) -> @index value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p[1].receive(integer:2) { setverdict(pass); } + [] any from p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_026(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn new file mode 100644 index 0000000..c1c6be5 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_027.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, fuzzy variable in value redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_027 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_027() runs on GeneralComp { + var @fuzzy integer v_int; + p.send(1); + p.send(2); + p.send(3); + p.receive(integer:?) -> value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_027(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn new file mode 100644 index 0000000..0cd1f63 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_028.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, fuzzy variable in sender redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_028 { + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_028() runs on GeneralComp { + var @fuzzy address v_addr; + p.send(1) to 1; + p.send(2) to 2; + p.send(3) to 3; + p.receive(integer:?) -> sender v_addr; + if (v_addr == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_028(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn new file mode 100644 index 0000000..06ab6b3 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_029.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.2, fuzzy variable in @index redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the receive operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the receive operation. + +module Sem_220202_ReceiveOperation_029 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[2]; + } + + testcase TC_Sem_220202_ReceiveOperation_029() runs on GeneralComp { + var @fuzzy integer v_int; + p[1].send(1); + p[1].send(2); + p[1].send(3); + any from p.receive(integer:?) -> @index value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p[1].receive(integer:2) { setverdict(pass); } + [] any from p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220202_ReceiveOperation_029(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn new file mode 100644 index 0000000..a0f3224 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220202_receive_operation/Sem_220202_ReceiveOperation_030.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + type integer UInt8 (0..255); + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220202_ReceiveOperation_030() runs on GeneralComp { + var UInt8 v_int; + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn new file mode 100644 index 0000000..0df4ae9 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_001.ttcn @@ -0,0 +1,63 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220203_TriggerOperation_001 { + +signature p_NegSem_220203_TriggerOperation_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + +template p_NegSem_220203_TriggerOperation_001 s_baseTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := ? +} + +template p_NegSem_220203_TriggerOperation_001 s_returnTemplate modifies s_baseTemplate := { + p_par3 := 5 +} + +template p_NegSem_220203_TriggerOperation_001 s_wrongTemplate modifies s_baseTemplate := { + p_par3 := 3 +} + +template p_NegSem_220203_TriggerOperation_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 +} + + type port remotePort procedure { + out p_NegSem_220203_TriggerOperation_001; + } + +type component GeneralComp { + port remotePort PCO; +} + +testcase NegSem_220203_TriggerOperation_001() runs on GeneralComp { + + PCO.call(p_NegSem_220203_TriggerOperation_001:s_callTemplate, 5.0) { + + [] PCO.trigger(p_NegSem_220203_TriggerOperation_001:s_wrongTemplate value 1) { //cannot trigger from procedure based port + setverdict(fail); + } + [] PCO.trigger(p_NegSem_220203_TriggerOperation_001:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.trigger(p_NegSem_220203_TriggerOperation_001:s_returnTemplate value 1) { + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail); + } + } +} + +control{ + execute(NegSem_220203_TriggerOperation_001()); +} + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn new file mode 100644 index 0000000..4b4f313 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_002.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, no type prefix in ambiguous inline template + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The matching criteria as defined in clause 22.2.2 apply also to the trigger operation. +// An optional type field in the matching criteria to the [trigger] operation shall +// be used to avoid any ambiguity of the type of the value being received. + +module NegSem_220203_TriggerOperation_002 { + + type record of integer RoI; + type record R { + integer field1, + integer field2 + } + + type port P message { + inout R, RoI; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_002() runs on GeneralComp { + p.send(R:{1, 2}); + alt { + [] p.trigger({?, 2}) { setverdict(pass); } // error (ambiguous type) + [else] { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn new file mode 100644 index 0000000..2494d3c --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_003.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, type mismatch in redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// The variable or formal parameter shall be type compatible with the received message. + +module NegSem_220203_TriggerOperation_003 { + + type port P message { + inout integer, charstring; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_003() runs on GeneralComp { + var charstring v_str; + p.send(1); + alt { + [] p.trigger(integer:?) -> value v_str { setverdict(pass); } // error (type mismatch in redirect assignment) + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_004.ttcn new file mode 100644 index 0000000..b6daa06 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_004.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, type mismatch in redirect assignment of message fields + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// The variable or formal parameter shall be type compatible with the type on the +// right hand side of the assignment symbol. + +module NegSem_220203_TriggerOperation_004 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_004() runs on GeneralComp { + var integer v_int; + var bitstring v_str; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.trigger(R:?) -> value ( v_int := field1[1], v_str := field2) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn new file mode 100644 index 0000000..492fc87 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, applying @decoded to a forbidden field + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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_220203_TriggerOperation_005 { + type record R + { + integer id, + record of integer payload (0..255) + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_005() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + p.send(R:{ id := 1, payload := {0, 0, 0, 0} }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_006.ttcn new file mode 100644 index 0000000..3b15f39 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_006.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, decoding error in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// Failure of this decoding shall cause a test case error. + +module NegSem_220203_TriggerOperation_006 { + type record R + { + integer id, + charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_006() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src) & "abcdefgij"; + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_007.ttcn new file mode 100644 index 0000000..0258d55 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_007.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, invalid format value in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// Any other value shall cause an error. + +module NegSem_220203_TriggerOperation_007 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_007() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded("proprietary") payload) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_008.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_008.ttcn new file mode 100644 index 0000000..80f25f0 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_008.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, value of wrong type in @decoded redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// Any other value shall cause an error. + +module NegSem_220203_TriggerOperation_008 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_008() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded(v_src) payload) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_009.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_009.ttcn new file mode 100644 index 0000000..ef3ad80 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_009.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, encoding parameter of @decoded redirect assignment applied to incorrect type + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// In case the referenced field is not a universal charstring, the optional +// parameter shall not be present. + +module NegSem_220203_TriggerOperation_009 { + type record R + { + integer id, + octetstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_009() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_os }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded("UTF-8") payload) { + setverdict (pass); + } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_010.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_010.ttcn new file mode 100644 index 0000000..2297844 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_010.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, attempting to store component name in redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// When the message is received on a connected port, only the component reference is +// stored in the following the sender keyword, but the test system shall internally +// store the component name too, if any (to be used in logging). + +module NegSem_220203_TriggerOperation_010 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_010() runs on GeneralComp system GeneralComp { + var charstring v_name; + connect(self:p, self:p); + p.send(10); + p.trigger(integer:?) -> sender v_name; + if (v_name == "MTC") { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_011.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_011.ttcn new file mode 100644 index 0000000..6c805bf --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_011.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, attempting to receive a type missing from the port list + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The trigger operation shall only be used on message-based ports and the type of the +// value to be received shall be included in the list of incoming types of the port type +// definition. + + +module NegSem_220203_TriggerOperation_011 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_011() runs on GeneralComp { + var integer v_index; + p.send(10); + alt { + [] p.trigger(charstring:?) { setverdict(pass); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220203_TriggerOperation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_012.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_012.ttcn new file mode 100644 index 0000000..96f09a0 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_012.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, value redirect assignment in receive any message statement + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// AddressRef for retrieving the sending entity 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 receive operation. + +module NegSem_220203_TriggerOperation_012 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_012() runs on GeneralComp { + var integer v_val; + p.send(10); + p.trigger -> value v_val; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_013.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_013.ttcn new file mode 100644 index 0000000..e67ec6b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_013.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, trying to store address with trigger operation on connected port + ** @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_013 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_013() runs on GeneralComp system GeneralComp { + var P.address v_addr; + connect(self:p, self:p); + p.send(10); + p.trigger -> sender v_addr; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_014.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_014.ttcn new file mode 100644 index 0000000..c0f9e36 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_014.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, type mismatch in sender redirect assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// AddressRef for retrieving the sending entity 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 receive operation. + + +module NegSem_220203_TriggerOperation_014 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_014() runs on GeneralComp { + var charstring v_addr; + p.send(10); + p.trigger -> sender v_addr; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_015.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_015.ttcn new file mode 100644 index 0000000..48ff56f --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_015.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, null component reference in from clause of trigger operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_220203_TriggerOperation_015 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_015() runs on GeneralComp system GeneralComp { + var GeneralComp v_comp := null; + connect(self:p, self:p); + p.send(10); + alt { + [] p.trigger from v_comp {} + [else] {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_016.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_016.ttcn new file mode 100644 index 0000000..48b06a9 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_016.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, null address reference in from clause of receive operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_220203_TriggerOperation_016 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_016() runs on GeneralComp { + var P.address v_addr1 := 1, v_addr2 := 2, v_addr3 := null; + p.send(10); + alt { + [] p.trigger from (v_addr1, v_addr2, v_addr3) {} + [else] {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_017.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_017.ttcn new file mode 100644 index 0000000..7896b70 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_017.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, index redirection in standard port.trigger + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The index redirection shall only be used when the operation is used on an any from port +// array construct. + +module NegSem_220203_TriggerOperation_017 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_017() runs on GeneralComp { + var integer v_int; + p.send(10); + p.trigger(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_018.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_018.ttcn new file mode 100644 index 0000000..7ae3de3 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_018.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, index redirection in any port.receive + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// The index redirection shall only be used when the operation is used on an any from port +// array construct. + +module NegSem_220203_TriggerOperation_018 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_018() runs on GeneralComp { + var integer v_int; + p.send(10); + any port.trigger(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_019.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_019.ttcn new file mode 100644 index 0000000..86830b8 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_019.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, insufficient value range of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// 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_220203_TriggerOperation_019 { + type integer RestrInt(0..2); + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[10]; + } + + testcase TC_NegSem_220203_TriggerOperation_019() runs on GeneralComp { + var RestrInt v_int; + p[5].send(100); + any from p.trigger(integer:?) -> @index value v_int; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_020.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_020.ttcn new file mode 100644 index 0000000..74ca15a --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_020.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, insufficient array dimension of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the index redirection is used for multi-dimensional port 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_220203_TriggerOperation_020 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[3][2][3]; + } + + testcase TC_NegSem_220203_TriggerOperation_020() runs on GeneralComp { + var integer v_indices[2]; + p[0][1][2].send(100); + any from p.trigger(integer:?) -> @index value v_indices; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_021.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_021.ttcn new file mode 100644 index 0000000..e326b69 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_021.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, insufficient element value range of variable in index redirection + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the index redirection is used for multi-dimensional port 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_220203_TriggerOperation_021 { + type integer RestrInt(0..2); + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[4][2][3]; + } + + testcase TC_NegSem_220203_TriggerOperation_021() runs on GeneralComp { + var RestrInt v_indices[3]; + p[3][1][2].send(100); + any from p.trigger(integer:?) -> @index value v_indices; + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_022.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_022.ttcn new file mode 100644 index 0000000..8176bd1 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_022.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, incompatible from and sender clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the trigger 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_220203_TriggerOperation_022 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_022() runs on GeneralComp { + var address v_addr; + p.send(100); + alt { + [] p.trigger(integer:?) from GeneralComp:? -> sender v_addr { } + [else] {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn new file mode 100644 index 0000000..ec45920 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.3, incompatible decmatch and @decoded value redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded message fields (by using the @decoded modifier) in +// cases where the value or template to be matched uses the MatchDecodedContent (decmatch) +// matching for the field to be stored, the type of the template in the MatchDecodedContent +// matching shall be type-compatible to the type of the variable the decoded field is stored into. + +module NegSem_220203_TriggerOperation_023 { + + type record R { + integer id, + octetstring payload + } + + type record Wrapped { + integer num + } + + type port P message { + inout R; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_220203_TriggerOperation_023() runs on GeneralComp { + var Wrapped v_res; + var R v_rec := { id := 0, payload := bit2oct(encvalue(5)) }; + timer t_tmr := 1.0; + t_tmr.start; + p.send(v_rec); + alt { + [] p.trigger(R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) {} + [] t_tmr.timeout {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220203_TriggerOperation_023(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn new file mode 100644 index 0000000..d42ab7c --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_024.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_001.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_001.ttcn new file mode 100644 index 0000000..58f3ad0 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_001.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220203_TriggerOperation_001 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220203_TriggerOperation_001() runs on GeneralComp { + + timer t_timeout := 1.0; + t_timeout.start; + + messagePort.send(2); + + alt { + [] messagePort.trigger(1) { //must remove message from queue + setverdict(fail); + } + [] messagePort.trigger(2) { //this alt is only selected if message not removed from the queue + setverdict(fail); + } + [] messagePort.trigger { + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_220203_TriggerOperation_001()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_002.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_002.ttcn new file mode 100644 index 0000000..c6b75c8 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_002.ttcn @@ -0,0 +1,43 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220203_TriggerOperation_002 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220203_TriggerOperation_002() runs on GeneralComp { + timer t_timeout:=5.0; + + messagePort.send(2); + t_timeout.start; + + alt { + [] messagePort.trigger { //must remove message from queue + setverdict(pass); + } + [] messagePort.trigger { //this alt is only selected if message not removed from the queue + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_220203_TriggerOperation_002()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_003.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_003.ttcn new file mode 100644 index 0000000..2c0f93b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_003.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220203_TriggerOperation_003 { + + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220203_TriggerOperation_003() runs on GeneralComp { + var integer v_received:=0; + timer t_timeout:=5.0; + + messagePort.send(2); + t_timeout.start; + + alt { + [] messagePort.trigger(integer:?) -> value v_received { + if(v_received==2) { //check that correct value has been stored + setverdict(pass); + } + else { + setverdict(fail); + } + } + [] messagePort.receive { + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_220203_TriggerOperation_003()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_004.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_004.ttcn new file mode 100644 index 0000000..3cbdbc6 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_004.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220203_TriggerOperation_004 { + + type charstring address; + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + + const address c_address := "Tester"; + +testcase TC_Sem_220203_TriggerOperation_004() runs on GeneralComp { + var address v_sender; + timer t_timeout:=5.0; + + + messagePort.send(2) to c_address; + t_timeout.start; + + alt { + [] messagePort.trigger(2) -> sender v_sender { + messagePort.send(5) to v_sender; + alt { + [] messagePort.trigger(5) from v_sender { //check that correct sender address has been assigned + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(fail); + } + } + } + [] messagePort.trigger { + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220203_TriggerOperation_004()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_005.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_005.ttcn new file mode 100644 index 0000000..0d80d5a --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_005.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.2.3, Ensure that the IUT correctly handles message trigger operations + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_220203_TriggerOperation_005 { + + + type port loopbackPort message { + inout integer + } + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_220203_TriggerOperation_005() runs on GeneralComp { + timer t_timeout:=5.0; + + messagePort.send(2); + t_timeout.start; + + alt { + [] any port.trigger(2) { //checks trigger from any port + setverdict(pass); + } + [] messagePort.trigger { //this alt is only selected if message was not removed from the queue + setverdict(fail); + } + [] t_timeout.timeout { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_220203_TriggerOperation_005()); +} + +} diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn new file mode 100644 index 0000000..2f6c8fa --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_006.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.3, trigger with a from clause (single item) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// 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 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 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer i) runs on GeneralComp + { + p.send(i); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220203_TriggerOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_int; + 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(i)); + } + + alt { + [] p.trigger(integer:?) from v_ptcs[c_ptcCount - 1] -> value v_int { + if (v_int == c_ptcCount - 1) { setverdict(pass); } + else { setverdict(fail) }; + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn new file mode 100644 index 0000000..794dcc3 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_007.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.3, trigger with a from clause (multiple items) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// 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 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 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f(integer i) runs on GeneralComp + { + p.send(i); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220203_TriggerOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[c_ptcCount]; + var integer v_int; + 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(i)); + } + + alt { + [] p.trigger(integer:?) from (v_ptcs[c_ptcCount - 2], v_ptcs[c_ptcCount - 1]) -> value v_int { + if (v_int == c_ptcCount - 2 or v_int == c_ptcCount - 1) { setverdict(pass); } + else { setverdict(fail) }; + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn new file mode 100644 index 0000000..1ec26cb --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_008.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.3, trigger with a from clause (any component) + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// 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 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 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.send(1); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220203_TriggerOperation_008() 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.trigger(integer:?) from any component { setverdict(pass); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_009.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_009.ttcn new file mode 100644 index 0000000..aa627f2 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_009.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, redirect assignment of message fields + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// When the keyword value is followed by an assignment list enframed by a pair of +// parentheses, the whole received message and/or one or more parts of it can be +// stored. In a single assignment within the list, on the right hand side of the +// assignment symbol (":=") a field of the template type shall be referenced, on +// the left hand side the name of the variable or a formal parameter, in which +// the value shall be stored. + +module Sem_220203_TriggerOperation_009 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_009() runs on GeneralComp { + var integer v_int; + var charstring v_str; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.trigger(R:?) -> value ( v_int := field1[1], v_str := field2) { + if (v_int == 2 and v_str == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_010.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_010.ttcn new file mode 100644 index 0000000..268b057 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_010.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, redirect assignment of message fields + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// As a special case the field reference can be absent to indicate that the whole +// message shall be stored in a variable. + +module Sem_220203_TriggerOperation_010 { + type record R + { + integer field1[2], + charstring field2 + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_010() runs on GeneralComp { + var integer v_int; + var charstring v_str; + var R v_rec; + p.send(R:{ field1 := { 1, 2 }, field2 := "abc" }); + alt { + [] p.trigger(R:?) -> value ( v_int := field1[1], v_rec, v_str := field2) { + if (v_int == 2 and v_str == "abc" and v_rec == { field1 := { 1, 2 }, field2 := "abc" }) { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_011.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_011.ttcn new file mode 100644 index 0000000..4e3f3a6 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_011.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, @decoded redirect assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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 Sem_220203_TriggerOperation_011 { + type record R + { + integer id, + bitstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_011() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var bitstring v_bs := encvalue(v_src); + p.send(R:{ id := 1, payload := v_bs }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_012.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_012.ttcn new file mode 100644 index 0000000..3d99c73 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_012.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, @decoded redirect assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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 Sem_220203_TriggerOperation_012 { + type record R + { + integer id, + hexstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_012() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var hexstring v_hs := bit2hex(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_hs }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_013.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_013.ttcn new file mode 100644 index 0000000..96eeeac --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_013.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, @decoded redirect assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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 Sem_220203_TriggerOperation_013 { + type record R + { + integer id, + octetstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_013() runs on GeneralComp { + var charstring v_src := "abc", v_res; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.send(R:{ id := 1, payload := v_os }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_014.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_014.ttcn new file mode 100644 index 0000000..706b33b --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_014.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, @decoded redirect assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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 Sem_220203_TriggerOperation_014 { + type record R + { + integer id, + charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_014() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_015.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_015.ttcn new file mode 100644 index 0000000..d1b2c59 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_015.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, @decoded redirect assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// 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 Sem_220203_TriggerOperation_015 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_015() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_016.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_016.ttcn new file mode 100644 index 0000000..1798c7f --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_016.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.2.3, @decoded redirect assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220203_TriggerOperation_016 { + type record R + { + integer id, + universal charstring payload + } + + type port P message { + inout R; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_016() runs on GeneralComp { + var integer v_src := 1953719668, v_res with { variant "32 bit" }; + var universal charstring v_str := encvalue_unichar(v_src, "UTF-16LE"); + p.send(R:{ id := 1, payload := v_str }); + alt { + [] p.trigger(R:?) -> value (v_res := @decoded("UTF-16LE") payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_017.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_017.ttcn new file mode 100644 index 0000000..2aaca6d --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_017.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, redirect assignment storing a component + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Rules in clause 22.2.2 shall apply. +// It is also possible to retrieve and store the component reference or address of +// the sender of a message. This is denoted by the keyword sender. + +module Sem_220203_TriggerOperation_017 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_017() runs on GeneralComp system GeneralComp { + var GeneralComp v_tc := null; + connect(self:p, self:p); + p.send(10); + p.trigger(integer:?) -> sender v_tc; + if (v_tc == self) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220203_TriggerOperation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_018.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_018.ttcn new file mode 100644 index 0000000..d32df61 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_018.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, redirect assignment storing an address + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to retrieve and store the component reference or address of +// the sender of a message. This is denoted by the keyword sender. + +module Sem_220203_TriggerOperation_018 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_018() runs on GeneralComp { + var P.address v_addr := null; + p.send(10) to 5; + p.trigger(integer:?) -> sender v_addr; + if (v_addr == 5) { setverdict(pass); } + else { setverdict(fail); } + } + + control { + execute(TC_Sem_220203_TriggerOperation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_019.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_019.ttcn new file mode 100644 index 0000000..acc0b56 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_019.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, any from port.trigger statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// To trigger on a message at any port from a specific port array, use the any from +// PortArrayRef syntax where PortArrayRef shall be a reference to a port array +// identifier. + +module Sem_220203_TriggerOperation_019 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [3]; + port P altP; + } + + testcase TC_Sem_220203_TriggerOperation_019() runs on GeneralComp { + p[2].send(10); + altP.send(1); + alt { + [] any from p.trigger(integer:?) { setverdict(pass); } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_020.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_020.ttcn new file mode 100644 index 0000000..348520a --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_020.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, single dimensional index redirect in any from port.trigger statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array +// at which the operation was successful to a variable of type integer or, in case of +// multi-dimensional port arrays the index of the successful port to an integer array +// or record of integer variable. When checking the port array for matching messages, +// the port indices to be checked are iterated from lowest to highest. If the port +// array is multi-dimensional, then the ports are iterated over from innermost to +// outermost array dimension from lowest to highest index for each dimension, e.g. +// [0][0], [0][1], [1][0], [1][1]. The first port which matches all the criteria will +// cause the operation to be successful even if other ports in the array would also +// meet the criteria. + +module Sem_220203_TriggerOperation_020 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [3]; + port P altP; + } + + testcase TC_Sem_220203_TriggerOperation_020() runs on GeneralComp { + var integer v_index; + p[2].send(10); + altP.send(1); + alt { + [] any from p.trigger(integer:?) -> @index value v_index { + if (v_index == 2) { setverdict(pass); } + else { setverdict(fail); } + } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_021.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_021.ttcn new file mode 100644 index 0000000..54db62c --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_021.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, multidimensional index redirect in any from port.trigger statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array +// at which the operation was successful to a variable of type integer or, in case of +// multi-dimensional port arrays the index of the successful port to an integer array +// or record of integer variable. When checking the port array for matching messages, +// the port indices to be checked are iterated from lowest to highest. If the port +// array is multi-dimensional, then the ports are iterated over from innermost to +// outermost array dimension from lowest to highest index for each dimension, e.g. +// [0][0], [0][1], [1][0], [1][1]. The first port which matches all the criteria will +// cause the operation to be successful even if other ports in the array would also +// meet the criteria. + +module Sem_220203_TriggerOperation_021 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p [2][3]; + port P altP; + } + + type record of integer RoI; + + testcase TC_Sem_220203_TriggerOperation_021() runs on GeneralComp { + var RoI v_index; + p[0][2].send(10); + altP.send(1); + alt { + [] any from p.trigger(integer:?) -> @index value v_index { + if (v_index == { 0, 2 }) { setverdict(pass); } + else { setverdict(fail, "v_index: ", v_index); } + } + [] any port.receive { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_022.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_022.ttcn new file mode 100644 index 0000000..a27f4d0 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_022.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, standalone trigger as a shorthand for alt statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// The trigger operation can be used as a stand-alone statement in a behaviour description. +// In this latter case the receive operation is considered to be shorthand for an alt +// statement with two alternatives (one alternative expecting the message and another +// alternative consuming all other messages and repeating the alt statement, see +// ES 201 873 4 [1]). + +module Sem_220203_TriggerOperation_022 { + + type port P message { + inout integer; + } + + type component GeneralComp + { + port P p1, p2; + } + + altstep a() runs on GeneralComp { + [] p2.receive(integer:?) { setverdict(pass); } + } + + testcase TC_Sem_220203_TriggerOperation_022() runs on GeneralComp { + activate(a()); // defaults should be processed as a part of alt + p1.send(1); + p2.send(2); + p1.trigger(integer:(10..20)); // no match here, but because the statement is actually an alt statement, + // the default shall be automatically exectuted and accept the message + } + + control { + execute(TC_Sem_220203_TriggerOperation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_023.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_023.ttcn new file mode 100644 index 0000000..a9f906d --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_023.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, lazy variable in value redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_023 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_023() runs on GeneralComp { + var @lazy integer v_int; + p.send(1); + p.send(2); + p.send(3); + p.trigger(integer:?) -> value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_023(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_024.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_024.ttcn new file mode 100644 index 0000000..d3f0bcf --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_024.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, lazy variable in sender redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_024 { + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_024() runs on GeneralComp { + var @lazy address v_addr; + p.send(1) to 1; + p.send(2) to 2; + p.send(3) to 3; + p.trigger(integer:?) -> sender v_addr; + if (v_addr == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_024(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_025.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_025.ttcn new file mode 100644 index 0000000..de1c450 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_025.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, lazy variable in index redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_025 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[2]; + } + + testcase TC_Sem_220203_TriggerOperation_025() runs on GeneralComp { + var @lazy integer v_int; + p[1].send(1); + p[1].send(2); + p[1].send(3); + any from p.trigger(integer:?) -> @index value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p[1].receive(integer:2) { setverdict(pass); } + [] any from p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_025(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_026.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_026.ttcn new file mode 100644 index 0000000..b18acb6 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_026.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, fuzzy variable in value redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_026 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_026() runs on GeneralComp { + var @fuzzy integer v_int; + p.send(1); + p.send(2); + p.send(3); + p.trigger(integer:?) -> value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_026(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_027.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_027.ttcn new file mode 100644 index 0000000..cb50197 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_027.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, fuzzy variable in sender redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_027 { + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_220203_TriggerOperation_027() runs on GeneralComp { + var @fuzzy address v_addr; + p.send(1) to 1; + p.send(2) to 2; + p.send(3) to 3; + p.trigger(integer:?) -> sender v_addr; + if (v_addr == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p.receive(integer:2) { setverdict(pass); } + [] p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_027(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_028.ttcn b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_028.ttcn new file mode 100644 index 0000000..83fef61 --- /dev/null +++ b/core_language/22_communication_operations/2202_message_based_communication/220203_trigger_operation/Sem_220203_TriggerOperation_028.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.2.3, fuzzy variable in @index redirect + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// If a variable referenced in the value, sender or @index clause is a lazy or fuzzy +// variable, the expression assigned to this variable is equal to the result produced +// by the trigger operation i.e. later evaluation of the lazy or fuzzy variable does not +// lead to repeated invocation of the trigger operation. + +module Sem_220203_TriggerOperation_028 { + type port P message { + inout integer; + } + + type component GeneralComp { + port P p[2]; + } + + testcase TC_Sem_220203_TriggerOperation_028() runs on GeneralComp { + var @fuzzy integer v_int; + p[1].send(1); + p[1].send(2); + p[1].send(3); + any from p.trigger(integer:?) -> @index value v_int; + if (v_int == 1) { // evaluation of @lazy (receive shall not be called again) + alt { + [] p[1].receive(integer:2) { setverdict(pass); } + [] any from p.receive { setverdict(fail); } + } + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_220203_TriggerOperation_028(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_001.ttcn new file mode 100644 index 0000000..445188e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles procedure call operations + ** @verdict pass reject + ***************************************************/ + +module NegSem_220301_CallOperation_001 { + + + type port loopbackPort message { + inout integer + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_220301_CallOperation_001() runs on GeneralComp { + + messagePort.call(2); //cannot use call on a message based port + + alt { + [] messagePort.receive { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control{ + execute(TC_NegSem_220301_CallOperation_001()); + } + +} diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn new file mode 100644 index 0000000..3484e4a --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_002.ttcn @@ -0,0 +1,121 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly procedure calls + ** @verdict pass reject + *****************************************************************/ + +module NegSem_220301_CallOperation_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_220301_CallOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_NegSem_220301_CallOperation_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_NegSem_220301_CallOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_NegSem_220301_CallOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_NegSem_220301_CallOperation_002; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_zero:=0; + var integer v_one:=1; + + //nowait cannot be used in this construct with timeout checking + PCO.call(p_NegSem_220301_CallOperation_002:s_callTemplate, nowait) { + + [] PCO.getreply(p_NegSem_220301_CallOperation_002:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220301_CallOperation_002:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_NegSem_220301_CallOperation_002:s_returnTemplate value 1) { + 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_220301_CallOperation_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_NegSem_220301_CallOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_NegSem_220301_CallOperation_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_NegSem_220301_CallOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_NegSem_220301_CallOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn new file mode 100644 index 0000000..3c0675e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_003.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.1, null component in the to clause of the call 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_220301_CallOperation_003 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + + testcase TC_NegSem_220301_CallOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"), v_compRef := null; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait) to v_compRef; + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_003(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn new file mode 100644 index 0000000..ab2ed86 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_004.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.1, null component in the multicast list of the to clause of the call 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_220301_CallOperation_004 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + + testcase TC_NegSem_220301_CallOperation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create("PTC"), v_compRef := null; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait) to (v_ptc, v_compRef); + setverdict(pass); + } + + control{ + execute(TC_NegSem_220301_CallOperation_004(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn new file mode 100644 index 0000000..3ca7862 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_005.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn new file mode 100644 index 0000000..21faf54 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_006.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn new file mode 100644 index 0000000..6d8f8fb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_007.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn new file mode 100644 index 0000000..3147dc6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_008.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn new file mode 100644 index 0000000..6c5a9b6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_009.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn new file mode 100644 index 0000000..bbcb2ac --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_010.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn new file mode 100644 index 0000000..3857a86 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_011.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn new file mode 100644 index 0000000..c965829 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_012.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn new file mode 100644 index 0000000..09abc90 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_013.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn new file mode 100644 index 0000000..5ca44d3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_014.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn new file mode 100644 index 0000000..fdc5ff4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_015.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn new file mode 100644 index 0000000..baed616 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_016.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn new file mode 100644 index 0000000..17deb7b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_017.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn new file mode 100644 index 0000000..0aff73e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_018.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn new file mode 100644 index 0000000..f840f2e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_019.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn new file mode 100644 index 0000000..e71b2d7 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSem_220301_CallOperation_020.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn new file mode 100644 index 0000000..1948897 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_001.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 521 + ** @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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn new file mode 100644 index 0000000..90fcac8 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/NegSyn_220301_CallOperation_002.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn new file mode 100644 index 0000000..067827b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_001.ttcn @@ -0,0 +1,120 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles procedure call operations + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220301_CallOperation_001 { + + /** + * @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_220301_CallOperation_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_001 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_001 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_001; + } + + 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_Sem_220301_CallOperation_001:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220301_CallOperation_001:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_001:s_returnTemplate value 2) { + setverdict(fail); + } + [v_one>v_zero] PCO.getreply(p_Sem_220301_CallOperation_001: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_Sem_220301_CallOperation_001 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_001:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_001:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220301_CallOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_001()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn new file mode 100644 index 0000000..b0940b0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_002.ttcn @@ -0,0 +1,120 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles procedure call operations + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220301_CallOperation_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_Sem_220301_CallOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_002; + } + + 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_Sem_220301_CallOperation_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220301_CallOperation_002:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_002:s_returnTemplate value 2) { + setverdict(fail); + } + [v_one param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220301_CallOperation_002() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn new file mode 100644 index 0000000..0077552 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_003.ttcn @@ -0,0 +1,124 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles non-blocking procedure call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220301_CallOperation_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_Sem_220301_CallOperation_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_003 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_003 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_003 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_003; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_zero:=0; + var integer v_one:=1; + timer t_timer:=5.0; + + PCO.call(p_Sem_220301_CallOperation_003:s_callTemplate, nowait); //check non-blocking call + t_timer.start; + + alt { + + [] PCO.getreply(p_Sem_220301_CallOperation_003:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_003:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_003:s_returnTemplate value 1) { + setverdict(pass); + } + [] t_timer.timeout { + setverdict(fail); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + + template p_Sem_220301_CallOperation_003 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_003:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_003:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220301_CallOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_003()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_004.ttcn new file mode 100644 index 0000000..ad08836 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_004.ttcn @@ -0,0 +1,120 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles multiple client calls to the same server + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220301_CallOperation_004 { + + /** + * @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_220301_CallOperation_004(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + + template p_Sem_220301_CallOperation_004 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_004 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_004 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_004; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_zero:=0; + var integer v_one:=1; + var boolean first:=true; + + PCO.call(p_Sem_220301_CallOperation_004:s_callTemplate, 5.0) { + + [first] PCO.getreply(p_Sem_220301_CallOperation_004:s_returnTemplate value 1) { + first:=false; + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail, "Component did not receive a response"); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + var GeneralComp v_clientAddress; + var integer v_par1; + var integer v_par3; + timer t_timeout:=2.0; + + template p_Sem_220301_CallOperation_004 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_004:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_clientAddress { + PCO.reply(p_Sem_220301_CallOperation_004:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + testcase TC_Sem_220301_CallOperation_004() 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:PCO, client:PCO); + connect(server:PCO, client2:PCO); + + server.start(f_ServerResponses()); + + client.start(f_ClientQuery()); + client2.start(f_ClientQuery()); + + interleave { + [] client.done {} + [] client2.done {} + } + server.stop; + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_004(), 30.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn new file mode 100644 index 0000000..9e3f066 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_005.ttcn @@ -0,0 +1,123 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.1, blocking broadcast call with no response and exception handling part + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Like for the send operation, TTCN-3 also supports unicast, multicast and broadcast calls +// of procedures. This can be done in the same manner as described in clause 22.2.1, i.e. +// the argument of the to clause of a call operation is for unicast calls the address of +// one receiving entity (or can be omitted in case of one-to-one connections), for multicast +// calls a list of addresses of a set of receivers and for broadcast calls the all component +// keyword. + +module Sem_220301_CallOperation_005 { + + /** + * @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_220301_CallOperation_005(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_005 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_005 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_005 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_005; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + var integer v_counter := 0; + + // validate broadcast calling + PCO.call(p_Sem_220301_CallOperation_005:s_callTemplate, nowait) to all component; + + alt { + // check that we get a reply from both servers + [] PCO.getreply(p_Sem_220301_CallOperation_005:s_returnTemplate value 1) { + v_counter := v_counter + 1; + if (v_counter == 2) { + setverdict(pass, "Server1 reply received"); + } else { + repeat; + } + } + } + } + + template p_Sem_220301_CallOperation_005 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + function f_ServerResponses() runs on GeneralComp { + var integer v_par1; + var integer v_par3; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_005:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_005:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); + repeat; + } + } + } + + testcase TC_Sem_220301_CallOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service") alive; + var GeneralComp server2 := GeneralComp.create("RemoteProcedure Service2") alive; + var GeneralComp client := GeneralComp.create("RemoteProcedure Client") alive; + // map the PTCs to the system port + connect(server:PCO, client:PCO); + connect(server2:PCO, client:PCO); + + // set server address and start operation + server.start(f_ServerResponses()); + server2.start(f_ServerResponses()); + + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + server2.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + disconnect(server2:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_005(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn new file mode 100644 index 0000000..fe994bf --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_006.ttcn @@ -0,0 +1,118 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.1, blocking multicast call with no response and exception handling part + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// Like for the send operation, TTCN-3 also supports unicast, multicast and broadcast calls +// of procedures. This can be done in the same manner as described in clause 22.2.1, i.e. +// the argument of the to clause of a call operation is for unicast calls the address of +// one receiving entity (or can be omitted in case of one-to-one connections), for multicast +// calls a list of addresses of a set of receivers and for broadcast calls the all component +// keyword. + +module Sem_220301_CallOperation_006 { + + /** + * @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_220301_CallOperation_006(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_006 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_006 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_006 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_006; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery(GeneralComp server1, GeneralComp server2) runs on GeneralComp { + // validate multicast calling + PCO.call(p_Sem_220301_CallOperation_006:s_callTemplate, nowait) to (server1, server2); + interleave { + //check that we get a reply from first server + [] PCO.getreply(p_Sem_220301_CallOperation_006:s_returnTemplate value 1) from server1 { + setverdict(pass, "Reply from server 1"); + } + [] PCO.getreply(p_Sem_220301_CallOperation_006:s_returnTemplate value 1) from server2 { + setverdict(pass, "Reply from server 2"); + } + } + } + + template p_Sem_220301_CallOperation_006 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + function f_ServerResponses() runs on GeneralComp { + var integer v_par1; + var integer v_par3; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_006:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_006:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); + repeat; + } + } + + } + + testcase TC_Sem_220301_CallOperation_006() runs on GeneralComp system GeneralComp { + var GeneralComp server1 := GeneralComp.create("RemoteProcedure Service") alive; + var GeneralComp server2 := GeneralComp.create("RemoteProcedure Service2") alive; + var GeneralComp client := GeneralComp.create("RemoteProcedure Client") alive; + // map the PTCs to the system port + connect(server1:PCO, client:PCO); + connect(server2:PCO, client:PCO); + + // set server address and start operation + server1.start(f_ServerResponses()); + server2.start(f_ServerResponses()); + + client.start(f_ClientQuery(server1, server2)); + + alt { + [] client.done { + server1.stop; + server2.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server1:PCO); + disconnect(server2:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_006(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn new file mode 100644 index 0000000..86c06f4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_007.ttcn @@ -0,0 +1,120 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.1, Ensure that the IUT correctly handles blocking procedure call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220301_CallOperation_007 { + + /** + * @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_220301_CallOperation_007(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220301_CallOperation_007 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220301_CallOperation_007 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220301_CallOperation_007 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220301_CallOperation_007; + } + + 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_Sem_220301_CallOperation_007:s_callTemplate,5.0) { //blocking version of procedure call + + [] PCO.getreply(p_Sem_220301_CallOperation_007:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_007:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220301_CallOperation_007:s_returnTemplate value 1) { + 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_Sem_220301_CallOperation_007 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220301_CallOperation_007:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220301_CallOperation_007:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220301_CallOperation_007() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220301_CallOperation_007()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn new file mode 100644 index 0000000..a4c26cd --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_008.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 521 + ** @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_008 { + + signature S(); + + type port P procedure { + inout S; + } + + 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_008() 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_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn new file mode 100644 index 0000000..570ef21 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_009.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 521 + ** @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_009 { + + 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_Sem_220301_CallOperation_009() 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_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn new file mode 100644 index 0000000..edf7be3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_010.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 521 + ** @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_010 { + + 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_Sem_220301_CallOperation_010() 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_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn new file mode 100644 index 0000000..1ae203e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_011.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn new file mode 100644 index 0000000..3b850be --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_012.ttcn @@ -0,0 +1,65 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn new file mode 100644 index 0000000..22e5c71 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_013.ttcn @@ -0,0 +1,63 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn new file mode 100644 index 0000000..a5c7027 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_014.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 521 + ** @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_014 { + + 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_Sem_220301_CallOperation_014() 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.getreply(S:?) { + v_counter := v_counter + 1; + if (v_counter < 2) { + repeat; + } else { + setverdict(pass, "Both replies received"); // both replies received + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn new file mode 100644 index 0000000..7ceb651 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_015.ttcn @@ -0,0 +1,62 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:22.3.1, non-blocking multicast 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; + + 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_Sem_220301_CallOperation_015() 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.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"); // success + } + } else { + setverdict(fail, "Wrong component"); + } + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn new file mode 100644 index 0000000..36a964d --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_016.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @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_016 { + + 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_Sem_220301_CallOperation_016() 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.getreply(S:?) { + setverdict(pass, "Reply received"); // success: reply received + } + } + } + + control { + execute(TC_Sem_220301_CallOperation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn new file mode 100644 index 0000000..6eba392 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_017.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 521 + ** @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_017 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := - }; + + testcase TC_Sem_220301_CallOperation_017() 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_017(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn new file mode 100644 index 0000000..8676b4e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_018.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 521 + ** @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_022 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + template S s_signature1 := { p_par := ? }; + + testcase TC_Sem_220301_CallOperation_022() 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_022(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn new file mode 100644 index 0000000..c940f59 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_019.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 521 + ** @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_019 { + + signature S1() noblock; + signature S2(); + + type port P procedure { + inout S1, S2; + } + + type component GeneralComp { + port P p; + } + + function f_called() runs on GeneralComp { + p.getcall(S1:?); + p.getcall(S2:?); + p.reply(S1:{}); + p.reply(S2:{}); + } + + testcase TC_Sem_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(S1:{}); // 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_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn new file mode 100644 index 0000000..8bf138d --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220301_call_operation/Sem_220301_CallOperation_020.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 521 + ** @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_020 { + + signature S1() noblock exception(integer); + signature S2() exception(charstring); + + type port P procedure { + inout S1, S2; + } + + 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_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:{}); // 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_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn new file mode 100644 index 0000000..bc313d3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn @@ -0,0 +1,38 @@ +/*************************************************** + ** @author STF 433 + ** @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 + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_220302_GetcallOperation_001() runs on GeneralComp { + + 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()); + } + +} diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn new file mode 100644 index 0000000..5abb4f4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn @@ -0,0 +1,123 @@ +/***************************************************************** + ** @author STF 433 + ** @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 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_NegSem_220302_GetcallOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_NegSem_220302_GetcallOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_NegSem_220302_GetcallOperation_002; + } + + 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; + + // 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); + } + + control{ + execute(TC_NegSem_220302_GetcallOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn new file mode 100644 index 0000000..6ba8e33 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn @@ -0,0 +1,122 @@ +/***************************************************************** + ** @author STF 433 + ** @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 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_NegSem_220302_GetcallOperation_003 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_NegSem_220302_GetcallOperation_003 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_NegSem_220302_GetcallOperation_003; + } + + 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); + } + + control{ + execute(TC_NegSem_220302_GetcallOperation_003()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn new file mode 100644 index 0000000..df1bbb3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_004 { + + signature S(); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn new file mode 100644 index 0000000..93f9f33 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_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_getcall_operation_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_getcall_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn new file mode 100644 index 0000000..c257afc --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_006 { + + 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 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_getcall_operation_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_getcall_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn new file mode 100644 index 0000000..1cc78c7 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_007 { + + signature S(integer p_par); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn new file mode 100644 index 0000000..c14c82f --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_008 { + + signature S(integer p_par); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn new file mode 100644 index 0000000..fb7d191 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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_getcall_operation_009 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + var GeneralComp v_compRef := null; + alt { + [] p.getcall(S:{}) from v_compRef {} // error expected + [] p.getcall(S:{}) {} + } + } + + testcase TC_NegSem_220302_getcall_operation_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_getcall_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn new file mode 100644 index 0000000..2666a3c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.2, null component in the multicast list of 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_getcall_operation_010 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + var GeneralComp v_compRef := null; + alt { + [] p.getcall(S:{}) from (mtc, v_compRef) {} // error expected + } + } + + testcase TC_NegSem_220302_getcall_operation_010() 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_getcall_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn new file mode 100644 index 0000000..c460a7a --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @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_getcall_operation_011 { + type record of integer RoI (0..255); + + signature S(RoI p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_NegSem_220302_getcall_operation_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_getcall_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn new file mode 100644 index 0000000..d4ea8f3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @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_getcall_operation_012 { + signature S(charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_getcall_operation_012() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var charstring v_str := encvalue_unichar(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_getcall_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn new file mode 100644 index 0000000..d0a7e30 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @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_getcall_operation_013 { + signature S(universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded("proprietary") p_par) { + setverdict(pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_getcall_operation_013() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + 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_getcall_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn new file mode 100644 index 0000000..3dbfac1 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @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_getcall_operation_014 { + signature S(universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res, v_enc := 32 with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded(v_enc) p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_getcall_operation_014() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + 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_getcall_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn new file mode 100644 index 0000000..22d15e4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @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_220202_ReceiveOperation_009 { + signature S(octetstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_res; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded("UTF-8") p_par) { + setverdict(pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_getcall_operation_015() runs on GeneralComp system GeneralComp { + var charstring 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_getcall_operation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn new file mode 100644 index 0000000..71b0270 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, incompatible from and sender clause in getreply 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_getcall_operation_016 { + + signature S(); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn new file mode 100644 index 0000000..0a17523 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.2, incompatible decmatch and @decoded value redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded parameters (by using the @decoded modifier) +// in cases where the value or template to be matched uses the MatchDecodedContent +// (decmatch) matching for the parameter to be stored, the type of the template in +// the MatchDecodedContent matching shall be type-compatible to the type of the +// variable the decoded field is stored into. + +module NegSem_220302_getcall_operation_017 { + signature S(bitstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type record Wrapped { + integer num + } + + function f_server() runs on GeneralComp { + var Wrapped v_res; + alt { + [] p.getcall(S:{ p_par := decmatch integer:? }) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getcall { setverdict(pass); } + } + } + + testcase TC_NegSem_220302_getcall_operation_017() runs on GeneralComp system GeneralComp { + var integer v_src := 5; + var bitstring v_bs := 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_bs }, nowait); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_getcall_operation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_018.ttcn new file mode 100644 index 0000000..b821ed4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_018.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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_getcall_operation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + testcase TC_NegSem_220302_getcall_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()); + alt { + [] p.getcall(S:?) from v_addr {} // error expected + [] p.getcall {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220302_getcall_operation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_019.ttcn new file mode 100644 index 0000000..3880efb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_019.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 521 + ** @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_getcall_operation_019 { + + signature S(); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn new file mode 100644 index 0000000..2c820b9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @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_getcall_operation_001 { + signature S(); + + type port P procedure { + inout S; + } + + 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_getcall_operation_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_getcall_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn new file mode 100644 index 0000000..eb84601 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that error occurs when using index redirection in any 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_getcall_operation_002 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + var integer v_index; + alt + { + [] any port.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_getcall_operation_002() 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_getcall_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn new file mode 100644 index 0000000..c6f21d0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn @@ -0,0 +1,126 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall operations remove only matching procedure from the queue + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220302_GetcallOperation_001 { + + /** + * @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_220302_GetcallOperation_001(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220302_GetcallOperation_001 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220302_GetcallOperation_001 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220302_GetcallOperation_001 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220302_GetcallOperation_001; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_220302_GetcallOperation_001:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220302_GetcallOperation_001:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220302_GetcallOperation_001:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220302_GetcallOperation_001: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_Sem_220302_GetcallOperation_001 s_noacceptTemplate := { + p_par1 := 8, + p_par2 := 8, + p_par3 := 8 + }; + + template p_Sem_220302_GetcallOperation_001 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220302_GetcallOperation_001:s_noacceptTemplate) { //should not remove incoming procedure + repeat; + } + [] PCO.getcall(p_Sem_220302_GetcallOperation_001:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220302_GetcallOperation_001:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220302_GetcallOperation_001() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220302_GetcallOperation_001()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn new file mode 100644 index 0000000..9b5be95 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn @@ -0,0 +1,132 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall operations remove the matching procedure from the queue + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_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_Sem_220302_GetcallOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220302_GetcallOperation_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220302_GetcallOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220302_GetcallOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220302_GetcallOperation_002; + } + + 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_Sem_220302_GetcallOperation_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220302_GetcallOperation_002:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220302_GetcallOperation_002:s_returnTemplate value 2) { + setverdict(fail); + } + [v_one>v_zero] PCO.getreply(p_Sem_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; + timer t_timeout:=30.0; + + template p_Sem_220302_GetcallOperation_002 s_noacceptTemplate := { + p_par1 := 8, + p_par2 := 8, + p_par3 := 8 + }; + + template p_Sem_220302_GetcallOperation_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220302_GetcallOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) { + PCO.reply(p_Sem_220302_GetcallOperation_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); //procedure return values are sent + repeat; + } + [] PCO.getcall { //this part is not matched if procedure is removed from queue + setverdict(fail); + } + [] t_timeout.timeout { + } + } + + } + + + testcase TC_Sem_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; + + // 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; + t_wait.timeout; //this gives a chance for server to still test for second getcall match + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220302_GetcallOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn new file mode 100644 index 0000000..4f5af04 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn @@ -0,0 +1,134 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that the getcall operation can be correctly restricted to a certain client + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_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_Sem_220302_GetcallOperation_003(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + + template p_Sem_220302_GetcallOperation_003 s_returnTemplate1 := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220302_GetcallOperation_003 s_returnTemplate2 := { + p_par1 := -, + p_par2 := 5, + p_par3 := 6 + } + + template p_Sem_220302_GetcallOperation_003 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220302_GetcallOperation_003 s_callTemplate(in integer i) := { + p_par1 := i, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220302_GetcallOperation_003; + } + + type component GeneralComp { + var GeneralComp v_clientAddress; + port remotePort PCO; + } + + function f_ClientQuery(in integer p_i) runs on GeneralComp { + var boolean first:=true; + + PCO.call(p_Sem_220302_GetcallOperation_003:s_callTemplate(p_i), 5.0) { + + [first] PCO.getreply(s_returnTemplate1) { + first:=false; + } + [first] PCO.getreply(s_returnTemplate2) { + first:=false; + } + [] PCO.catch (timeout) { + // done + } + } + } + + function f_ServerResponses(in GeneralComp p_client) runs on GeneralComp { + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + var boolean client1_received := false; + var boolean client2_received := false; + + template p_Sem_220302_GetcallOperation_003 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + + alt { + [not client1_received] PCO.getcall(p_Sem_220302_GetcallOperation_003:s_acceptTemplate) from p_client -> param(v_par1, - , v_par3) sender v_clientAddress { + PCO.reply(p_Sem_220302_GetcallOperation_003:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; //procedure return values are sent + setverdict(pass, "p_client got a message"); + client1_received := true; + if (not client2_received) { + repeat; + } + } + [not client2_received] PCO.getcall(p_Sem_220302_GetcallOperation_003:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_clientAddress { + PCO.reply(p_Sem_220302_GetcallOperation_003:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; //procedure return values are sent + // response for other clients + client2_received := true; + if (not client1_received) { + repeat; + } + } + [] t_timeout.timeout { + setverdict(fail, "server received not enough messages: client 1 message received ",client1_received, " client 2 message received ",client2_received); + } + } + + } + + testcase TC_Sem_220302_GetcallOperation_003() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client 1"); + var GeneralComp client2 := GeneralComp.create("RemoteProcedure Client 2"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + connect(server:PCO, client2:PCO); + + server.start(f_ServerResponses(client)); + client.start(f_ClientQuery(1)); + client2.start(f_ClientQuery(2)); + + client.done; + client2.done; + server.stop; + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220302_GetcallOperation_003(), 5.0); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_004.ttcn new file mode 100644 index 0000000..6f635b0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_004.ttcn @@ -0,0 +1,128 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that the getcall operation can be correctly restricted to a certain client + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220302_GetcallOperation_004 { + + type charstring address; + const address c_client1Addr := "client1Addr"; + const address c_client2Addr := "client2Addr"; + + /** + * @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_220302_GetcallOperation_004(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + + template p_Sem_220302_GetcallOperation_004 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220302_GetcallOperation_004 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220302_GetcallOperation_004 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220302_GetcallOperation_004; + } + + type component GeneralComp { + port remotePort PCO; + var GeneralComp v_myAddress; + } + + function f_ClientQuery(GeneralComp p_myAddress) 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_220302_GetcallOperation_004:s_callTemplate, 3.0) { + + [first] PCO.getreply(p_Sem_220302_GetcallOperation_004:s_returnTemplate value 1) { + first:=false; + setverdict(fail); //receiving a reply is not expected for client2 query + } + [] PCO.catch (timeout) { + setverdict(pass); + } + } + } + + function f_ServerResponses(GeneralComp p_clientAddress) runs on GeneralComp { + var GeneralComp v_clientAddress; + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + + template p_Sem_220302_GetcallOperation_004 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] PCO.getcall(p_Sem_220302_GetcallOperation_004:s_acceptTemplate) from p_clientAddress -> param(v_par1, - , v_par3) sender v_clientAddress { + PCO.reply(p_Sem_220302_GetcallOperation_004:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; //procedure return values are sent + repeat; + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + function f_setAddress(GeneralComp p_myAddress) runs on GeneralComp { + v_myAddress := p_myAddress; + } + + testcase TC_Sem_220302_GetcallOperation_004() 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:PCO, client:PCO); + connect(server:PCO, client2:PCO); + + server.start(f_ServerResponses(client)); + client.start(f_setAddress(client)); + client2.start(f_ClientQuery(client)); + + interleave { + [] client.done {} + [] client2.done {} + } + server.stop; + + all component.done; + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220302_GetcallOperation_004()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_005.ttcn new file mode 100644 index 0000000..a85b4ba --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_005.ttcn @@ -0,0 +1,117 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Ensure that getcall operations work with any port attribute + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220302_GetcallOperation_005 { + + /** + * @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_220302_GetcallOperation_005(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + template p_Sem_220302_GetcallOperation_005 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220302_GetcallOperation_005 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220302_GetcallOperation_005 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220302_GetcallOperation_005; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_220302_GetcallOperation_005:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220302_GetcallOperation_005:s_wrongTemplate value 1) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220302_GetcallOperation_005:s_returnTemplate value 2) { + setverdict(fail); + } + [] PCO.getreply(p_Sem_220302_GetcallOperation_005: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_Sem_220302_GetcallOperation_005 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [] any port.getcall(p_Sem_220302_GetcallOperation_005:s_acceptTemplate) -> param(v_par1, - , v_par3) { //validates getcall on any port + PCO.reply(p_Sem_220302_GetcallOperation_005:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1); + } + [] t_timeout.timeout { + setverdict(fail); + } + } + + } + + + testcase TC_Sem_220302_GetcallOperation_005() runs on GeneralComp system GeneralComp { + var GeneralComp server := GeneralComp.create("RemoteProcedure Service"); + var GeneralComp client := GeneralComp.create("RemoteProcedure Client"); + // map the PTCs to the system port + connect(server:PCO, client:PCO); + + server.start(f_ServerResponses()); + client.start(f_ClientQuery()); + + alt { + [] client.done { + server.stop; + } + } + + alt { + [] all component.done {} + } + + disconnect(server:PCO); + } + + control{ + execute(TC_Sem_220302_GetcallOperation_005()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_006.ttcn new file mode 100644 index 0000000..638d506 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_006.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall is not triggered if there hasn't been any call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To getcall on any port from a specific port array, use the any from PortArrayRef syntax where +// PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220302_getcall_operation_006 { + 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 + { + alt + { + [] any from p.getcall { setverdict(fail, "The any from getcall operation produced incorrect match"); } + [else] { setverdict(pass); } + } + } + + testcase TC_Sem_220302_getcall_operation_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]); + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_007.ttcn new file mode 100644 index 0000000..e8060f9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_007.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall matches if at least one port contains enqueued call + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To getcall on any port from a specific port array, use the any from PortArrayRef syntax where +// PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220302_getcall_operation_007 { + 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 + { + alt + { + [] any from p.getcall { setverdict(pass); } + [else] { setverdict(fail, "The any from getcall operation didn't match for some reason"); } + } + } + + testcase TC_Sem_220302_getcall_operation_007() 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]); + } + p[1].call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_008.ttcn new file mode 100644 index 0000000..7fbbf83 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_008.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall doesn't assign index when there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220302_getcall_operation_008 { + + signature S(integer p_par); + + 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; + alt + { + [] any from p.getcall(S:{p_par := (1..10)}) -> @index value v_index { + setverdict(fail, "The any from getcall operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + testcase TC_Sem_220302_getcall_operation_008() 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:{ p_par := i + 100 }, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_008(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_009.ttcn new file mode 100644 index 0000000..e20ed30 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_009.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall doesn't change index variable when no there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220302_getcall_operation_009 { + + signature S(integer p_par); + + 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 := 99; + var GeneralComp v_src; + alt + { + [] any from p.getcall(S:{p_par := (1..10)}) -> sender v_src @index value v_index { + setverdict(fail, "The any from getcall operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + testcase TC_Sem_220302_getcall_operation_009() 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:{ p_par := i + 100 }, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_009(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_010.ttcn new file mode 100644 index 0000000..494e556 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_010.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from done assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +// When checking the port array for matching calls, the port indices to be checked are iterated +// from lowest to highest. +module Sem_220302_getcall_operation_010 { + + signature S(integer p_par); + + 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, v_parValue; + alt + { + [] any from p.getcall(S:{p_par := (0..c_portCount)}) -> param (v_parValue := p_par) @index value v_index { + if(v_index == 1 and v_parValue == v_index + 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_Sem_220302_getcall_operation_010() 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:{ p_par := i + 1 }, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_011.ttcn new file mode 100644 index 0000000..dfe8d89 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_011.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify that any from getcall index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// 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 Sem_220302_getcall_operation_011 { + + signature S(integer p_par); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + var integer v_index[2], 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[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_Sem_220302_getcall_operation_011() 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_Sem_220302_getcall_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_012.ttcn new file mode 100644 index 0000000..c9c8404 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_012.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify any from getcall index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction k +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the getcall operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// getcall operation. +module Sem_220302_getcall_operation_012 { + + signature S(integer p_par); + + 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 @lazy integer v_index; + alt + { + [] any from p.getcall -> @index value v_index { + if(v_index == 1){ // no getcall call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall didn't match for some reason"); } + } + } + testcase TC_Sem_220302_getcall_operation_012() 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:{ p_par := i + 100 }, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_013.ttcn new file mode 100644 index 0000000..654b722 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_013.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.2, Verify any from getcall index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction k +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the getcall operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// getcall operation. +module Sem_220302_getcall_operation_013 { + + signature S(integer p_par); + + 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 @fuzzy integer v_index; + alt + { + [] any from p.getcall -> @index value v_index { + if(v_index == 1){ // no getcall call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getcall didn't match for some reason"); } + } + } + testcase TC_Sem_220302_getcall_operation_013() 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:{ p_par := i + 100 }, nowait); } + } + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_220302_getcall_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_014.ttcn new file mode 100644 index 0000000..5a2385d --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_014.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, @decoded redirect assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a call, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220302_getcall_operation_014 { + signature S(bitstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_res; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_014() runs on GeneralComp system GeneralComp { + var charstring v_src := "abc"; + var bitstring v_bs := 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_bs }, nowait); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220302_getcall_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_015.ttcn new file mode 100644 index 0000000..1fc9fd2 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_015.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, @decoded redirect assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a call, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220302_getcall_operation_015 { + signature S(hexstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_res; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_015() runs on GeneralComp system GeneralComp { + var charstring v_src := "abc"; + var hexstring v_hs := bit2hex(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_hs }, nowait); + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220302_getcall_operation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_016.ttcn new file mode 100644 index 0000000..ce15286 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_016.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, @decoded redirect assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a call, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220302_getcall_operation_016 { + signature S(octetstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_res; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_016() runs on GeneralComp system GeneralComp { + var charstring 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_Sem_220302_getcall_operation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_017.ttcn new file mode 100644 index 0000000..e1fa0c1 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_017.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, @decoded redirect assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a call, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220302_getcall_operation_017 { + signature S(charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_017() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var 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_Sem_220302_getcall_operation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_018.ttcn new file mode 100644 index 0000000..ce7bdd0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_018.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.2, @decoded redirect assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a call, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220302_getcall_operation_018 { + signature S(universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { encode "32bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_018() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + 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_Sem_220302_getcall_operation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_019.ttcn new file mode 100644 index 0000000..70f6f29 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_019.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.2, @decoded redirect assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220302_getcall_operation_019 { + signature S(universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_res with { variant "32 bit" }; + alt { + [] p.getcall(S:?) -> param (v_res := @decoded("UTF-16LE") p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getcall { setverdict(fail); } + } + } + + testcase TC_Sem_220302_getcall_operation_019() runs on GeneralComp system GeneralComp { + var integer v_src := 1953719668 with { variant "32 bit" }; + var universal charstring v_str := encvalue_unichar(v_src, "UTF-16LE"); + 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_Sem_220302_getcall_operation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_020.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_020.ttcn new file mode 100644 index 0000000..457a067 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_020.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 521 + ** @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_getcall_operation_020 { + + signature S() return integer; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_getcall_operation_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_getcall_operation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_021.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_021.ttcn new file mode 100644 index 0000000..134d125 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_021.ttcn @@ -0,0 +1,54 @@ +/***************************************************************** + ** @author STF 521 + ** @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_getcall_operation_021 { + + signature S() return integer; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_getcall_operation_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_getcall_operation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_022.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_022.ttcn new file mode 100644 index 0000000..18d31ad --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_getcall_operation_022.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 521 + ** @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_getcall_operation_022 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.call(S:{}, nowait); + } + + const integer c_ptcCount := 3; + + testcase TC_Sem_220302_getcall_operation_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_getcall_operation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn new file mode 100644 index 0000000..a7b3c53 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_001.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_220303_ReplyOperation_001() runs on GeneralComp { + + 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()); +} + +} diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn new file mode 100644 index 0000000..a59b6d7 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_002.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var GeneralComp v_compRef := null; + 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); + } + +} diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn new file mode 100644 index 0000000..2fc03b8 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_003.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.3, null component in the multicast list of 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_003 { + + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var GeneralComp v_compRef := null; + p.getcall(S:?); + p.reply(S:{}) to (mtc, v_compRef); + } + + testcase TC_NegSem_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:{}, 1.0) { + [] p.getreply(S:{}) { } + [] p.catch(timeout) { } + } + setverdict(pass); + } + + control{ + execute(TC_NegSem_220303_ReplyOperation_003(), 5.0); + } + +} diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn new file mode 100644 index 0000000..7571f17 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_004.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn new file mode 100644 index 0000000..b82be80 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_005.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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: +// No AddressRef in the to clause shall contain the special value null at the time +// of the operation. + +module NegSem_220303_ReplyOperation_005 { + + signature S(); + signature SNotListed(); + + type port P procedure { + inout S; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn new file mode 100644 index 0000000..8708fd6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_006.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn new file mode 100644 index 0000000..a27baa5 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_007.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn new file mode 100644 index 0000000..3279855 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_008.ttcn @@ -0,0 +1,78 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn new file mode 100644 index 0000000..d76fc0c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_009.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn new file mode 100644 index 0000000..d41452c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/NegSem_220303_ReplyOperation_010.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + p.getcall(S:?); + disconnect(self: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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn new file mode 100644 index 0000000..81f6967 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_001.ttcn @@ -0,0 +1,116 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.3, Ensure that the IUT correctly handles reply to multiple clients on the same server + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220303_ReplyOperation_001 { + + /** + * @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_220303_ReplyOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + + template p_Sem_220303_ReplyOperation_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220303_ReplyOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220303_ReplyOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220303_ReplyOperation_002; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_220303_ReplyOperation_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220303_ReplyOperation_002:s_returnTemplate value 1) { + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail, "Component did not receive a response"); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + var GeneralComp v_client1 := null, v_client2 := null; + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + + template p_Sem_220303_ReplyOperation_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + t_timeout.start; + + alt { + [v_client1 == null] PCO.getcall(p_Sem_220303_ReplyOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_client1 { + if (v_client2 == null) { repeat; } + } + [v_client2 == null] PCO.getcall(p_Sem_220303_ReplyOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_client2 { + if (v_client1 == null) { repeat; } + } + [] t_timeout.timeout { + setverdict(fail); + } + } + PCO.reply(p_Sem_220303_ReplyOperation_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to all component; //sent to both connected clients + + } + + testcase TC_Sem_220303_ReplyOperation_001() 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:PCO, client:PCO); + connect(server:PCO, client2:PCO); + + 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_Sem_220303_ReplyOperation_001()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn new file mode 100644 index 0000000..ff70b14 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_002.ttcn @@ -0,0 +1,118 @@ +/***************************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.3, Ensure that the IUT correctly handles reply to multiple clients on the same server + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_220303_ReplyOperation_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_Sem_220303_ReplyOperation_002(in integer p_par1, out integer p_par2, inout integer p_par3) return integer; + + + template p_Sem_220303_ReplyOperation_002 s_returnTemplate := { + p_par1 := -, + p_par2 := 4, + p_par3 := 5 + } + + template p_Sem_220303_ReplyOperation_002 s_wrongTemplate := { + p_par1 := -, + p_par2 := 2, + p_par3 := 3 + } + + template p_Sem_220303_ReplyOperation_002 s_callTemplate := { + p_par1 := 1, + p_par2 := -, + p_par3 := 3 + } + + type port remotePort procedure { + inout p_Sem_220303_ReplyOperation_002; + } + + type component GeneralComp { + port remotePort PCO; + } + + function f_ClientQuery() runs on GeneralComp { + + PCO.call(p_Sem_220303_ReplyOperation_002:s_callTemplate, 5.0) { + + [] PCO.getreply(p_Sem_220303_ReplyOperation_002:s_returnTemplate value 1) { + setverdict(pass); + } + [] PCO.catch (timeout) { + setverdict(fail, "Component did not receive a response"); + } + } + } + + function f_ServerResponses() runs on GeneralComp { + var GeneralComp v_client1 := null, v_client2 := null; + var integer v_par1; + var integer v_par3; + timer t_timeout:=30.0; + + template p_Sem_220303_ReplyOperation_002 s_acceptTemplate := { + p_par1 := ?, + p_par2 := ?, + p_par3 := ? + }; + + + t_timeout.start; + + alt { + [v_client1 == null] PCO.getcall(p_Sem_220303_ReplyOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_client1 { + if (v_client2 == null) { repeat; } + } + [v_client2 == null] PCO.getcall(p_Sem_220303_ReplyOperation_002:s_acceptTemplate) -> param(v_par1, - , v_par3) sender v_client2 { + if (v_client1 == null) { repeat; } + } + [] t_timeout.timeout { + setverdict(fail); + } + } + PCO.reply(p_Sem_220303_ReplyOperation_002:{p_par1 := -, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to (v_client1, v_client2); //sent to both connected clients + + } + + + testcase TC_Sem_220303_ReplyOperation_002() 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:PCO, client:PCO); + connect(server:PCO, client2:PCO); + + 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_Sem_220303_ReplyOperation_002()); + } + +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn new file mode 100644 index 0000000..a2193f9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_003.ttcn @@ -0,0 +1,49 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn new file mode 100644 index 0000000..1ab949f --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_004.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn new file mode 100644 index 0000000..f486027 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220303_reply_operation/Sem_220303_ReplyOperation_005.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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_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/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn new file mode 100644 index 0000000..8ffbcf3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that error occurs when any from getreply is applied to single port + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction e +// The PortArrayRef shall be a reference to a port array variable identifier. +module NegSem_220304_getreply_operation_001 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_NegSem_220304_getreply_operation_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 + { + [] any from p.getreply { setverdict(pass); } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn new file mode 100644 index 0000000..bf2f405 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_002.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that error occurs when any from getreply is applied to 1D array and index target is array + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction g +// 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_220304_getreply_operation_002 { + + 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 + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{}) }; + } + } + + testcase TC_NegSem_220304_getreply_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index[1]; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(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 getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn new file mode 100644 index 0000000..44f3152 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_003.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that error occurs when any from getreply is applied to 1D array and index target has wrong type + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction g +// 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_220304_getreply_operation_003 { + + 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 + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{}) }; + } + } + + testcase TC_NegSem_220304_getreply_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var float v_index; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(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 getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_004.ttcn new file mode 100644 index 0000000..fbb5a53 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_004.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply index redirection for multi-D arrays requires arrays of correct size + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction h: +// 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_220304_getreply_operation_004 { + + signature S(); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall(S:?); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].reply(S:{}); } + } + } + } + + + testcase TC_NegSem_220304_getreply_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index[1]; + 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]); + p[i][j].call(S:{}, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:{}) -> sender v_src @index value v_index { + if(v_index[0] == 1 and v_index[1] == 2){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } } + + control { + execute(TC_NegSem_220304_getreply_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_005.ttcn new file mode 100644 index 0000000..50aa040 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_005.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply index redirection for multi-D arrays requires arrays + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction h: +// 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_220304_getreply_operation_005 { + + signature S(); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall(S:?); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].reply(S:{}); } + } + } + } + + testcase TC_NegSem_220304_getreply_operation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index; + 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]); + p[i][j].call(S:{}, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:{}) -> @index value v_index { + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn new file mode 100644 index 0000000..9d4c63b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_006.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, null component in the from clause of the getreply 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_220304_getreply_operation_006 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220304_getreply_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp 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:{}) from v_compRef {} // error expected + [] p.getreply(S:{}) {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn new file mode 100644 index 0000000..a648ffb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_007.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, null component in the multicast list of the from clause of the getreply 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_220304_getreply_operation_007 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.reply(S:{}); + } + + testcase TC_NegSem_220304_getreply_operation_007() runs on GeneralComp system GeneralComp { + var GeneralComp 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:{}) from (mtc, v_compRef) {} // error expected + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_008.ttcn new file mode 100644 index 0000000..9e1007c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_008.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, applying @decoded to a forbidden parameter field + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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_220304_getreply_operation_008 { + type record of integer RoI (0..255); + + signature S(out RoI p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + p.getcall(S:?); + p.reply(S:{ p_par := { 0, 0, 0, 0 } }); + } + + testcase TC_NegSem_220304_getreply_operation_008() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + 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 } }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getreply { setverdict(fail); } + + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_009.ttcn new file mode 100644 index 0000000..6ad2ff2 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_009.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, decoding error in @decoded redirect parameter assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Failure of this decoding shall cause a test case error. + +module NegSem_220304_getreply_operation_009 { + signature S(out charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src) & "abcdefgij"; + p.getcall(S:?); + p.reply(S:{ p_par := v_str }); + } + + testcase TC_NegSem_220304_getreply_operation_009() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_010.ttcn new file mode 100644 index 0000000..b39fa11 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_010.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, invalid format value in @decoded redirect parameter assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220304_getreply_operation_010 { + signature S(out universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_str }); + } + + testcase TC_NegSem_220304_getreply_operation_010() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded("proprietary") p_par) { + setverdict(pass); + } + [] p.getreply { setverdict(pass); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_011.ttcn new file mode 100644 index 0000000..cdbaf50 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_011.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, value of wrong type in @decoded redirect parameter assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220304_getreply_operation_011 { + signature S(out universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_str }); + } + + testcase TC_NegSem_220304_getreply_operation_011() runs on GeneralComp system GeneralComp { + var integer v_res, v_enc := 32 with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded(v_enc) p_par) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220304_getreply_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_012.ttcn new file mode 100644 index 0000000..d11caa0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_012.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, encoding parameter of @decoded redirect parameter 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_220202_ReceiveOperation_012 { + signature S(out octetstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.getcall(S:?); + p.reply(S:{ p_par := v_os }); + } + + testcase TC_NegSem_220304_getreply_operation_012() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded("UTF-8") p_par) { + setverdict(pass); + } + [] p.getreply { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220304_getreply_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_013.ttcn new file mode 100644 index 0000000..a7d4ad9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_013.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, incompatible from and sender clause in getreply operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the getreply 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_220304_getreply_operation_013 { + + signature S(); + + type port P procedure { + inout S; + } + + 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_013() runs on GeneralComp system GeneralComp { + var GeneralComp 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:{}) from AltComp:? -> sender v_compRef { } // error expected + [] p.getreply(S:{}) { } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn new file mode 100644 index 0000000..1c3d931 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, incompatible decmatch and @decoded parameter redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded parameters (by using the @decoded modifier) +// in cases where the value or template to be matched uses the MatchDecodedContent +// (decmatch) matching for the parameter to be stored, the type of the template in +// the MatchDecodedContent matching shall be type-compatible to the type of the +// variable the decoded field is stored into. + +module NegSem_220304_getreply_operation_014 { + signature S(out bitstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type record Wrapped { + integer num + } + + function f_server() runs on GeneralComp { + var integer v_src := 5; + var bitstring v_bs := encvalue(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_bs }); + } + + testcase TC_NegSem_220304_getreply_operation_014() runs on GeneralComp system GeneralComp { + var Wrapped v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:{ p_par := decmatch integer:? }) -> param (v_res := @decoded p_par) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_015.ttcn new file mode 100644 index 0000000..27ad2be --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_015.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, applying @decoded to a forbidden parameter field + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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_220304_getreply_operation_015 { + type record R { + integer id, + record of integer payload(0..255) + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var R v_rec := { id := 6, payload := { 0, 0, 0, 0 }} + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_015() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.getreply { setverdict(fail); } + + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_016.ttcn new file mode 100644 index 0000000..135c822 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_016.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, decoding error in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Failure of this decoding shall cause a test case error. + +module NegSem_220304_getreply_operation_016 { + type record R { + integer id, + charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 4, payload := encvalue_unichar(v_src) & "abcdefgij" }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_016() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_017.ttcn new file mode 100644 index 0000000..b00594f --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_017.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, invalid format value in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220304_getreply_operation_017 { + type record R { + integer id, + universal charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_017() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded("proprietary") payload) { + setverdict(pass); + } + [] p.getreply { setverdict(pass); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220304_getreply_operation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn new file mode 100644 index 0000000..7557edc --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_018.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, value of wrong type in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220304_getreply_operation_018 { + type record R { + integer id, + universal charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_018() runs on GeneralComp system GeneralComp { + var integer v_res, v_enc := 32 with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded(v_enc) payload) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220304_getreply_operation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn new file mode 100644 index 0000000..5392eb4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_019.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, encoding parameter of @decoded redirect value 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_220202_ReceiveOperation_019 { + type record R { + integer id, + octetstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 3, payload := bit2oct(encvalue(v_src)) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_019() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded("UTF-8") payload) { + setverdict(pass); + } + [] p.getreply { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220304_getreply_operation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn new file mode 100644 index 0000000..9c63be9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, incompatible decmatch and @decoded value redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded parameters (by using the @decoded modifier) +// in cases where the value or template to be matched uses the MatchDecodedContent +// (decmatch) matching for the parameter to be stored, the type of the template in +// the MatchDecodedContent matching shall be type-compatible to the type of the +// variable the decoded field is stored into. + +module NegSem_220304_getreply_operation_020 { + type record R { + integer id, + bitstring payload + } + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type record Wrapped { + integer num + } + + function f_server() runs on GeneralComp { + var integer v_src := 5; + var R v_rec := { id := 1, payload := encvalue(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220304_getreply_operation_020() runs on GeneralComp system GeneralComp { + var Wrapped v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:{} value R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220304_getreply_operation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn new file mode 100644 index 0000000..f6732c5 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_021.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn new file mode 100644 index 0000000..ab228f3 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_022.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn new file mode 100644 index 0000000..e2b5f27 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_001.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that error occurs when using index redirection in port.getreply operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// The index redirection shall only be used when the operation is used on an any from +// port array construct. +module NegSyn_220304_getreply_operation_001 { + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_NegSyn_220304_getreply_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + alt + { + [] p.getreply -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSyn_220304_getreply_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn new file mode 100644 index 0000000..4c6f6f5 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSyn_220304_getreply_operation_002.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that error occurs when using index redirection in any port.getreply operation + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Restriction f +// The index redirection shall only be used when the operation is used on an any from +// port array construct. +module NegSyn_220304_getreply_operation_002 { + + signature S(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.reply(S:{}); + } + + testcase TC_NegSyn_220304_getreply_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any port.getreply -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSyn_220304_getreply_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn new file mode 100644 index 0000000..f22e37a --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_001.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply is not triggered if there hasn't been any reply + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To getreply on any port from a specific port array, use the any from PortArrayRef syntax where +// PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220304_getreply_operation_001 { + signature S(); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + testcase TC_Sem_220304_getreply_operation_001() 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]); + } + alt + { + [] any from p.getreply { setverdict(fail, "The any from getreply operation produced incorrect match"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_002.ttcn new file mode 100644 index 0000000..0327ae0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_002.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply matches if at least one port contains enqueued reply + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To getreply on any port from a specific port array, use the any from PortArrayRef syntax where +// PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220304_getreply_operation_002 { + 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 + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{}) }; + } + } + + testcase TC_Sem_220304_getreply_operation_002() 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply { setverdict(pass); } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_003.ttcn new file mode 100644 index 0000000..11e2576 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_003.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply doesn't assign index when there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220304_getreply_operation_003 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{ p_par := i + 100 }) }; + } + } + + testcase TC_Sem_220304_getreply_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{ p_par := - }, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:{p_par := (1..10)}) -> @index value v_index { + setverdict(fail, "The any from getreply operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_220304_getreply_operation_003(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_004.ttcn new file mode 100644 index 0000000..cba3905 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_004.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply doesn't change index variable when no there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220304_getreply_operation_004 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{ p_par := i + 100 }) }; + } + } + + testcase TC_Sem_220304_getreply_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index := 99; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{ p_par := - }, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:{p_par := (1..10)}) -> @index value v_index { + setverdict(fail, "The any from getreply operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_220304_getreply_operation_004(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_005.ttcn new file mode 100644 index 0000000..ea3580c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_005.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from done assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +// When checking the port array for matching replies, the port indices to be checked are iterated +// from lowest to highest. +module Sem_220304_getreply_operation_005 { + + signature S() return integer; + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{} value i + 1) }; + } + } + + testcase TC_Sem_220304_getreply_operation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index, v_res; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:? value (0..c_portCount)) -> value v_res @index value v_index { + if(v_index == 1 and v_res == v_index + 1){ + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_006.ttcn new file mode 100644 index 0000000..53eabfb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_006.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify that any from getreply index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction h: +// 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 Sem_220304_getreply_operation_006 { + + signature S(out integer p_par); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall; + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].reply(S:{ p_par := i + 1 }); } + } + } + } + + testcase TC_Sem_220304_getreply_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index[2], v_parValue; + 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]); + p[i][j].call(S:{ p_par := i + 1 }, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:{p_par := (0..c_portCount)}) -> param (v_parValue := p_par) 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 getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_007.ttcn new file mode 100644 index 0000000..5ee39c9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_007.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify any from getreply index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction i +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the getreply operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// getreply operation. +module Sem_220304_getreply_operation_007 { + + 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 + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{}) }; + } + } + testcase TC_Sem_220304_getreply_operation_007() runs on GeneralComp system GeneralComp { + var @lazy integer v_index; + 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:?) -> @index value v_index { + if(v_index == 1){ // no getreply call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_008.ttcn new file mode 100644 index 0000000..635208b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_008.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.4, Verify any from getreply index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction i +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the getreply operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// getreply operation. +module Sem_220304_getreply_operation_008 { + + 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 + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].reply(S:{}) }; + } + } + testcase TC_Sem_220304_getreply_operation_008() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_index; + 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.getreply(S:?) -> @index value v_index { + if(v_index == 1){ // no getreply call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from getreply operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_009.ttcn new file mode 100644 index 0000000..754347e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_009.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_009 { + signature S(out bitstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var bitstring v_bs := encvalue(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_bs }); + } + + testcase TC_Sem_220304_getreply_operation_009() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_010.ttcn new file mode 100644 index 0000000..054d929 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_010.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_010 { + signature S(out hexstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var hexstring v_hs := bit2hex(encvalue(v_src)); + p.getcall(S:?); + p.reply(S:{ p_par := v_hs }); + } + + testcase TC_Sem_220304_getreply_operation_010() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_011.ttcn new file mode 100644 index 0000000..d6579f7 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_011.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_011 { + signature S(out octetstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var octetstring v_os := bit2oct(encvalue(v_src)); + p.getcall(S:?); + p.reply(S:{ p_par := v_os }); + } + + testcase TC_Sem_220304_getreply_operation_011() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + + } + } + + control { + execute(TC_Sem_220304_getreply_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_012.ttcn new file mode 100644 index 0000000..9937b0f --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_012.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_012 { + signature S(out charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var charstring v_str := encvalue_unichar(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_str }) + } + + testcase TC_Sem_220304_getreply_operation_012() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_013.ttcn new file mode 100644 index 0000000..dd98d71 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_013.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_013 { + signature S(out universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var universal charstring v_str := encvalue_unichar(v_src); + p.getcall(S:?); + p.reply(S:{ p_par := v_str }); + } + + testcase TC_Sem_220304_getreply_operation_013() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220304_getreply_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn new file mode 100644 index 0000000..b190a98 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, @decoded redirect parameter assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220304_getreply_operation_014 { + signature S(out universal charstring p_par); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { variant "32 bit" }; + var universal charstring v_str := encvalue_unichar(v_src, "UTF-16LE"); + p.getcall(S:?); + p.reply(S:{ p_par := v_str }); + } + + testcase TC_Sem_220304_getreply_operation_014() runs on GeneralComp system GeneralComp { + var integer v_res with { variant "32 bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ p_par := - }) { + [] p.getreply(S:?) -> param (v_res := @decoded("UTF-16LE") p_par) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + }; + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220304_getreply_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_015.ttcn new file mode 100644 index 0000000..9791678 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_015.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect value assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_015 { + type record R { + integer id, + bitstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 1, payload := encvalue(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + log("dada"); + } + + testcase TC_Sem_220304_getreply_operation_015() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_016.ttcn new file mode 100644 index 0000000..f7e044c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_016.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect value assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_016 { + type record R { + integer id, + hexstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 2, payload := bit2hex(encvalue(v_src)) }; + p.getcall(S:?); + p.reply(S:{ } value v_rec); + } + + testcase TC_Sem_220304_getreply_operation_016() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ }) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_017.ttcn new file mode 100644 index 0000000..5f994b7 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_017.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect value assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_017 { + type record R { + integer id, + octetstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 3, payload := bit2oct(encvalue(v_src)) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_Sem_220304_getreply_operation_017() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + + } + } + + control { + execute(TC_Sem_220304_getreply_operation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn new file mode 100644 index 0000000..ff52451 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_018.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect value assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_018 { + type record R { + integer id, + charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 4, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec) + } + + testcase TC_Sem_220304_getreply_operation_018() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220304_getreply_operation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn new file mode 100644 index 0000000..07564c0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_019.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.4, @decoded redirect value assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of a reply, encoded parameters can be decoded +// prior to assignment using the @decoded modifier. In this case, the referenced +// parameter 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 Sem_220304_getreply_operation_019 { + type record R { + integer id, + universal charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_Sem_220304_getreply_operation_019() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220304_getreply_operation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn new file mode 100644 index 0000000..b7df35a --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_020.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.4, @decoded redirect value assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220304_getreply_operation_020 { + type record R { + integer id, + universal charstring payload + } + + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { variant "32 bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src, "UTF-16LE") }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_Sem_220304_getreply_operation_020() runs on GeneralComp system GeneralComp { + var integer v_res with { variant "32 bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:?) -> value (v_res := @decoded("UTF-16LE") payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.getreply { setverdict(fail); } + }; + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220304_getreply_operation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn new file mode 100644 index 0000000..922defc --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_021.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn new file mode 100644 index 0000000..70aac33 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_022.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn new file mode 100644 index 0000000..845dae4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_023.ttcn @@ -0,0 +1,53 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn new file mode 100644 index 0000000..1aeabe9 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.5, raised exception type not in the list of available exceptions + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Exceptions are specified as types. Therefore the exception value may either be derived +// 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); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_001() 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_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn new file mode 100644 index 0000000..f6353a2 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_002.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.5, exception raised for a signature with no exception list + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Exceptions are specified as types. Therefore the exception value may either be derived +// 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(); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_002() 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_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn new file mode 100644 index 0000000..498e319 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_003.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.5, raised exception type is ambiguous + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Exceptions are specified as types. Therefore the exception value may either be derived +// 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); + type integer MyInt2 (1..20); + + signature S() exception(MyInt1, MyInt2); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_003() 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_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_004.ttcn new file mode 100644 index 0000000..4a2bc09 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_004.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, missing to clause in case of 1 to n connection + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// 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 NegSem_220305_raise_operation_004 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + p.call(S:{}) { + [] p.catch(S, p_expected) { setverdict(pass); } + [] p.catch { setverdict(fail); } + } + } + + testcase TC_NegSem_220305_raise_operation_004() 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(1)); + v_ptc2.start(f(1)); + p.getcall(S:?); + p.getcall(S:?); // call from both components expected + p.raise(S, 1); // missing to clause: error expected + all component.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220305_raise_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_005.ttcn new file mode 100644 index 0000000..7d36ecb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_005.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, exception on a message port + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// An exception shall only be raised at a procedure-based port. An exception is a reaction +// to an accepted procedure call the result of which leads to an exceptional event. + +module NegSem_220305_raise_operation_005 { + signature S() exception(integer); + + type port PSig procedure { + inout S; + } + + type port PMsg message { + inout integer; + } + + type component GeneralComp + { + port PSig p1; + port PMsg p2; + } + + function f() runs on GeneralComp + { + p1.getcall(S:?); + p2.raise(S, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + v_ptc.start(f()); + p1.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_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_006.ttcn new file mode 100644 index 0000000..4c6e525 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_006.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, exception procedure signature not in the port list + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// The type definition of the port shall include in its list of accepted procedure calls the +// name of the procedure to which the exception belongs. + +module NegSem_220305_raise_operation_006 { + signature S1() exception(integer); + signature S2() exception(integer); + + type port P procedure { + inout S1; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S1:?); + p.raise(S2, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + v_ptc.start(f()); + p.call(S1:{}, nowait); // no processing of the exception to avoid possible errors in the catch operation + v_ptc.done; + } + + control { + execute(TC_NegSem_220305_raise_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn new file mode 100644 index 0000000..35c7a67 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_007.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @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: +// 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); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + const charstring c_ptcName := "PTC"; + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 1) to c_ptcName; + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_007() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create(c_ptcName); + 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_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn new file mode 100644 index 0000000..1280805 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_008.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.5, null in the to clause of the raise 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_220305_raise_operation_008 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + var GeneralComp v_compRef := null; + p.getcall(S:?); + p.raise(S, 1) to v_compRef; + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_008() 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_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn new file mode 100644 index 0000000..a67dc09 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_009.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, raise operation on disconnected and unmapped ports + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// Applying a raise operation to an unmapped or disconnected port shall cause a test case +// error. + +module NegSem_220305_raise_operation_009 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + disconnect(self:p); + p.raise(S, 1); + setverdict(pass); + } + + testcase TC_NegSem_220305_raise_operation_009() 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_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn new file mode 100644 index 0000000..9128077 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/NegSem_220305_raise_operation_010.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn new file mode 100644 index 0000000..d4b11f4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_001.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, simple raise operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// The value part of the raise operation consists of the signature reference followed by the +// exception value. + +module Sem_220305_raise_operation_001 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 1); + setverdict(pass); + } + + testcase TC_Sem_220305_raise_operation_001() 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_Sem_220305_raise_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn new file mode 100644 index 0000000..e6a4c74 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_002.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, unicast raise operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Exceptions 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 raise operation is for +// unicast exceptions the address of one receiving entity, for multicast exceptions a list of +// addresses of a set of receivers and for broadcast exceptions the all component keywords. + + +module Sem_220305_raise_operation_002 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + p.call(S:{}) { + [] p.catch(S, p_expected) { setverdict(pass); } + [] p.catch { setverdict(fail); } + } + } + + testcase TC_Sem_220305_raise_operation_002() 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(1)); + v_ptc2.start(f(2)); + p.getcall(S:?); + p.getcall(S:?); // call from both components expected + p.raise(S, 1) to v_ptc1; + p.raise(S, 2) to v_ptc2; + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220305_raise_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn new file mode 100644 index 0000000..4c70ebd --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_003.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, broadcast raise operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Exceptions 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 raise operation is for +// unicast exceptions the address of one receiving entity, for multicast exceptions a list of +// addresses of a set of receivers and for broadcast exceptions the all component keywords. + +module Sem_220305_raise_operation_003 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.call(S:{}) { + []p.catch { setverdict(pass); } + } + } + + testcase TC_Sem_220305_raise_operation_003() 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()); + v_ptc2.start(f()); + p.getcall(S:?); + p.getcall(S:?); // call from both components expected + p.raise(S, 1) to all component; + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220305_raise_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_004.ttcn new file mode 100644 index 0000000..5cc2d54 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220305_raise_operation/Sem_220305_raise_operation_004.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.5, multicast raise operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// Exceptions 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 raise operation is for +// unicast exceptions the address of one receiving entity, for multicast exceptions a list of +// addresses of a set of receivers and for broadcast exceptions the all component keywords. + + +module Sem_220305_raise_operation_004 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f(integer p_expected) runs on GeneralComp + { + p.call(S:{}) { + [] p.catch(S, p_expected) { setverdict(pass); } + [] p.catch { setverdict(fail); } + } + } + + const integer c_ptcCount := 4; + + testcase TC_Sem_220305_raise_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptcs[4]; + for (var integer i := 0; i < c_ptcCount; i := i + 1) { + v_ptcs[i] := GeneralComp.create; + connect(self:p, v_ptcs[i]:p); + if (i mod 2 == 0) { v_ptcs[i].start(f(1)); } + else { v_ptcs[i].start(f(2)); } + p.getcall(S:?); + } + p.raise(S, 1) to (v_ptcs[0], v_ptcs[2] ); + p.raise(S, 2) to (v_ptcs[1], v_ptcs[3] ); + all component.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220305_raise_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_001.ttcn new file mode 100644 index 0000000..e789d87 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when any from catch 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_220306_catch_operation_001 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 10); + } + + testcase TC_NegSem_220306_catch_operation_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 + { + [] any from p.catch { setverdict(pass); } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_002.ttcn new file mode 100644 index 0000000..82bb26d --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_002.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when any from catch 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_220306_catch_operation_002 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, 10) }; + } + } + + testcase TC_NegSem_220306_catch_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index[1]; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> @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 catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_003.ttcn new file mode 100644 index 0000000..a2e2ec6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_003.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when any from catch 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_220306_catch_operation_003 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, 10) }; + } + } + + testcase TC_NegSem_220306_catch_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var float v_index; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> @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 catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_004.ttcn new file mode 100644 index 0000000..a6fa19c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_004.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch 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_220306_catch_operation_004 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall(S:?); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].raise(S, 10); } + } + } + } + + + testcase TC_NegSem_220306_catch_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index[1]; + 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]); + p[i][j].call(S:{}, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> sender v_src @index value v_index { + if(v_index[0] == 1 and v_index[1] == 2){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } } + + control { + execute(TC_NegSem_220306_catch_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_005.ttcn new file mode 100644 index 0000000..8fcf422 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_005.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch 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_220306_catch_operation_005 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall(S:?); + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].raise(S, 10); } + } + } + } + + testcase TC_NegSem_220306_catch_operation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index; + 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]); + p[i][j].call(S:{}, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> @index value v_index { + if(v_index == 1){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn new file mode 100644 index 0000000..3218a32 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_006.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.6, null component in the from clause of the catch 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_220306_catch_operation_006 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + testcase TC_NegSem_220306_catch_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp 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:?) from v_compRef {} // error expected + [] p.catch {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn new file mode 100644 index 0000000..48c0223 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_007.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.6, null component in the multicast list of the from clause of the catch 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_220306_catch_operation_007 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:{}); + p.raise(S, "exc"); + } + + testcase TC_NegSem_220306_catch_operation_007() runs on GeneralComp system GeneralComp { + var GeneralComp 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:?) from (mtc, v_compRef) {} // error expected + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_008.ttcn new file mode 100644 index 0000000..4a153a6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_008.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, applying @decoded to a forbidden exception field + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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_220306_catch_operation_008 { + type record R { + integer id, + record of integer payload(0..255) + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var R v_rec := { id := 6, payload := { 0, 0, 0, 0 }} + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_NegSem_220306_catch_operation_008() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.catch { setverdict(pass); } + + } + } + + control { + execute(TC_NegSem_220306_catch_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_009.ttcn new file mode 100644 index 0000000..9a498eb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_009.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, decoding error in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Failure of this decoding shall cause a test case error. + +module NegSem_220306_catch_operation_009 { + type record R { + integer id, + charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 4, payload := encvalue_unichar(v_src) & "abcdefgij" }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220306_catch_operation_009() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.catch { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_010.ttcn new file mode 100644 index 0000000..782ef9e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_010.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, invalid format value in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220306_catch_operation_010 { + type record R { + integer id, + universal charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_NegSem_220306_catch_operation_010() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded("proprietary") payload) { + setverdict(pass); + } + [] p.catch { setverdict(pass); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_011.ttcn new file mode 100644 index 0000000..a7a9a0e --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_011.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, value of wrong type in @decoded redirect value assignment + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// Any other value shall cause an error. + +module NegSem_220306_catch_operation_011 { + type record R { + integer id, + universal charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_NegSem_220306_catch_operation_011() runs on GeneralComp system GeneralComp { + var integer v_res, v_enc := 32 with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded(v_enc) payload) { + setverdict (pass); + } + [] p.catch { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220306_catch_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn new file mode 100644 index 0000000..8c955fb --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_012.ttcn @@ -0,0 +1,52 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, encoding parameter of @decoded redirect value 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_220202_ReceiveOperation_012 { + type record R { + integer id, + octetstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 3, payload := bit2oct(encvalue(v_src)) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_NegSem_220306_catch_operation_012() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded("UTF-8") payload) { + setverdict(pass); + } + [] p.catch { setverdict(pass); } + } + + } + + control { + execute(TC_NegSem_220306_catch_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn new file mode 100644 index 0000000..0022806 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_013.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.6, incompatible from and sender clause in catch operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the catch 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_220306_catch_operation_013 { + + signature S() exception (charstring); + + type port P procedure { + inout S; + } + + 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_013() runs on GeneralComp system GeneralComp { + var GeneralComp 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:?) from AltComp:? -> sender v_compRef { } // error expected + [] p.catch { } + } + setverdict(pass); + } + + control { + execute(TC_NegSem_220306_catch_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn new file mode 100644 index 0000000..821c71f --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.6, incompatible decmatch and @decoded value redirect + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// When assigning implicitly decoded exception fields (by using the @decoded modifier) +// in cases where the value or template to be matched uses the MatchDecodedContent +// (decmatch) matching for the parameter to be stored, the type of the template in +// the MatchDecodedContent matching shall be type-compatible to the type of the +// variable the decoded field is stored into. + +module NegSem_220306_catch_operation_014 { + type record R { + integer id, + bitstring payload + } + signature S() return R; + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + type record Wrapped { + integer num + } + + function f_server() runs on GeneralComp { + var integer v_src := 5; + var R v_rec := { id := 1, payload := encvalue(v_src) }; + p.getcall(S:?); + p.reply(S:{} value v_rec); + } + + testcase TC_NegSem_220306_catch_operation_014() runs on GeneralComp system GeneralComp { + var Wrapped v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.getreply(S:{} value R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) { + setverdict (pass); + } + [] p.getreply { setverdict(pass); } + } + } + + control { + execute(TC_NegSem_220306_catch_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn new file mode 100644 index 0000000..8dd20e4 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_015.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 521 + ** @version 0.0.2 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn new file mode 100644 index 0000000..21c6285 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_016.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn new file mode 100644 index 0000000..ff99aa6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_001.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when using index redirection in port.catch 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_220306_catch_operation_001 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 20); + } + + testcase TC_NegSyn_220306_catch_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + alt + { + [] p.catch -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSyn_220306_catch_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn new file mode 100644 index 0000000..8150bc6 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_002.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when using index redirection in any port.catch 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_220306_catch_operation_002 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + type component GeneralComp + { + port P p; + } + + function f() runs on GeneralComp + { + p.getcall(S:?); + p.raise(S, 10); + } + + testcase TC_NegSyn_220306_catch_operation_002() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any port.catch -> @index value v_index { setverdict(pass); } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_NegSyn_220306_catch_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn new file mode 100644 index 0000000..8e1f532 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSyn_220306_catch_operation_003.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that error occurs when any from catch is applied to 1D array and index target has wrong type + ** @verdict pass reject + *****************************************************************/ +// The following requirements are tested: +// The catch on any port from a port array operation can not be used to catch a call timeout. +module NegSyn_220306_catch_operation_003 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, 10) }; + } + } + + testcase TC_NegSyn_220306_catch_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var float v_index; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, 1.0) { + []any from p.catch(timeout) { setverdict(pass); } + } + } + + } + + control { + execute(TC_NegSyn_220306_catch_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_001.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_001.ttcn new file mode 100644 index 0000000..a59b44b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_001.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch is not triggered if there hasn't been any exception + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To catch an exception on any port from a specific port array, use the any from PortArrayRef syntax +// where PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220306_catch_operation_001 { + signature S() exception (integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + testcase TC_Sem_220306_catch_operation_001() 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]); + } + alt + { + [] any from p.catch { setverdict(fail, "The any from catch operation produced incorrect match"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_002.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_002.ttcn new file mode 100644 index 0000000..7371303 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_002.ttcn @@ -0,0 +1,51 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch matches if at least one port contains enqueued reply + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// To catch an exception on any port from a specific port array, use the any from PortArrayRef syntax +// where PortArrayRef shall be a reference to a port array identifier. +// The first port which matches all the criteria will cause the operation to be successful even if +// other ports in the array would also meet the criteria. +module Sem_220306_catch_operation_002 { + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, 1) }; + } + } + + testcase TC_Sem_220306_catch_operation_002() 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch { setverdict(pass); } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_003.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_003.ttcn new file mode 100644 index 0000000..39f51ae --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_003.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch doesn't assign index when there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220306_catch_operation_003 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, i + 100) }; + } + } + + testcase TC_Sem_220306_catch_operation_003() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:(1..10)) -> @index value v_index { + setverdict(fail, "The any from catch operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(not isbound(v_index)){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_220306_catch_operation_003(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_004.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_004.ttcn new file mode 100644 index 0000000..d9f2515 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_004.ttcn @@ -0,0 +1,59 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch doesn't change index variable when no there's no suitable match + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +module Sem_220306_catch_operation_004 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, i + 100) }; + } + } + + testcase TC_Sem_220306_catch_operation_004() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index := 99; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:(1..10)) -> @index value v_index { + setverdict(fail, "The any from catch operation produced incorrect match"); + } + [else] { setverdict(pass); } + } + if(v_index == 99){ + setverdict(pass); + } else { + setverdict(fail, "Index incorrectly assigned"); + } + } + + control { + execute(TC_Sem_220306_catch_operation_004(), 5000.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_005.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_005.ttcn new file mode 100644 index 0000000..13bb4a5 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_005.ttcn @@ -0,0 +1,60 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from done assigns index + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// It is also possible to store the index of a port in a single-dimensional port array at which +// the operation was successful to a variable of type integer or, in case of multi-dimensional +// port arrays the index of the successful port to an integer array or record of integer variable. +// When checking the port array for matching exceptions, the port indices to be checked are iterated +// from lowest to highest. +module Sem_220306_catch_operation_005 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, i + 1); }; + } + } + + testcase TC_Sem_220306_catch_operation_005() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create; + var integer v_index, v_res; + for(var integer i := 0; i < c_portCount; i := i + 1) { + connect(self:p[i], v_ptc:p[i]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:(0..c_portCount)) -> value v_res @index value v_index { + if(v_index == 1 and v_res == v_index + 1){ + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_006.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_006.ttcn new file mode 100644 index 0000000..787e017 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_006.ttcn @@ -0,0 +1,64 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify that any from catch index redirection works for multidimensional arrays + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// 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 Sem_220306_catch_operation_006 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 3; + type component GeneralComp + { + port P p[c_portCount][c_portCount]; + } + + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + for(var integer j := 0; j < c_portCount; j := j + 1) { + p[i][j].getcall; + if (i == 1 and j == 2 or i == 2 and j == 1) { p[i][j].raise(S, i + 1 ); } + } + } + } + + testcase TC_Sem_220306_catch_operation_006() runs on GeneralComp system GeneralComp { + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_index[2], v_parValue; + 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]); + p[i][j].call(S:{}, nowait); + } + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> sender v_src @index value v_index { + if(v_index[0] == 1 and v_index[1] == 2){ + setverdict(pass); + } else { + setverdict(fail, "Indices or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_007.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_007.ttcn new file mode 100644 index 0000000..23351f2 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_007.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify any from catch index redirection to lazy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction k +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the catch operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// catch operation. +module Sem_220306_catch_operation_007 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, i + 1) }; + } + } + testcase TC_Sem_220306_catch_operation_007() runs on GeneralComp system GeneralComp { + var @lazy integer v_index; + 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> @index value v_index { + if(v_index == 1){ // no catch call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_008.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_008.ttcn new file mode 100644 index 0000000..90adf4a --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_008.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.3.6, Verify any from catch index redirection to fuzzy variable + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The following requirements are tested: +// Restriction k +// If a variable referenced in the @index clause is a lazy or fuzzy variable, the expression +// assigned to this variable is equal to the result produced by the catch operation. Later +// evaluation of the lazy or fuzzy variable does not lead to repeated invocation of the +// catch operation. +module Sem_220306_catch_operation_008 { + + signature S() exception(integer); + + type port P procedure { + inout S; + } + + const integer c_portCount := 4; + type component GeneralComp + { + port P p[c_portCount]; + } + function f() runs on GeneralComp + { + for(var integer i := 0; i < c_portCount; i := i + 1) { + p[i].getcall; + if (i mod 2 == 1) { p[i].raise(S, i + 1) }; + } + } + testcase TC_Sem_220306_catch_operation_008() runs on GeneralComp system GeneralComp { + var @fuzzy integer v_index; + 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]); + p[i].call(S:{}, nowait); + } + v_ptc.start(f()); + v_ptc.done; + alt + { + [] any from p.catch(S, integer:?) -> @index value v_index { + if(v_index == 1){ // no catch call during evaluation, v_index remains equal to 1 + setverdict(pass); + } else { + setverdict(fail, "Index or parameter value incorrectly assigned"); + } + } + [else] { setverdict(fail, "The any from catch operation didn't match for some reason"); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_009.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_009.ttcn new file mode 100644 index 0000000..351b9a5 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_009.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, @decoded redirect value assignment of a bitstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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 Sem_220306_catch_operation_009 { + type record R { + integer id, + bitstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 1, payload := encvalue(v_src) }; + p.getcall(S:?); + p.raise(S, v_rec); + log("dada"); + } + + testcase TC_Sem_220306_catch_operation_009() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_010.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_010.ttcn new file mode 100644 index 0000000..b4faffd --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_010.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, @decoded redirect value assignment of a hexstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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 Sem_220306_catch_operation_010 { + type record R { + integer id, + hexstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 2, payload := bit2hex(encvalue(v_src)) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_Sem_220306_catch_operation_010() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{ }) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_011.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_011.ttcn new file mode 100644 index 0000000..5803906 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_011.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, @decoded redirect value assignment of an octetstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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 Sem_220306_catch_operation_011 { + type record R { + integer id, + octetstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var charstring v_src := "abc"; + var R v_rec := { id := 3, payload := bit2oct(encvalue(v_src)) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_Sem_220306_catch_operation_011() runs on GeneralComp system GeneralComp { + var charstring v_res; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + if (v_res == "abc") { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + + } + } + + control { + execute(TC_Sem_220306_catch_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn new file mode 100644 index 0000000..107c69d --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_012.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, @decoded redirect value assignment of a charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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 Sem_220306_catch_operation_012 { + type record R { + integer id, + charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 4, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.raise(S, v_rec) + } + + testcase TC_Sem_220306_catch_operation_012() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + } + } + + control { + execute(TC_Sem_220306_catch_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn new file mode 100644 index 0000000..a197e4b --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_013.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.3.6, @decoded redirect value assignment of a universal charstring field + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// When assigning individual fields of an exception, 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 Sem_220306_catch_operation_013 { + type record R { + integer id, + universal charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { encode "32bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src) }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_Sem_220306_catch_operation_013() runs on GeneralComp system GeneralComp { + var integer v_res with { encode "32bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + } + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220306_catch_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn new file mode 100644 index 0000000..d5a177c --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_014.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:22.3.6, @decoded redirect value assignment with encoding parameter + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirements are tested: +// In case the referenced field is of the universal charstring type, the @decoded +// clause can contain an optional parameter defining the encoding format. The +// parameter shall be of the charstring type and it shall contain one of the +// strings allowed for the decvalue_unichar function (specified in clause C.5.4). + +module Sem_220306_catch_operation_014 { + type record R { + integer id, + universal charstring payload + } + + signature S() exception (R); + + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f_server() runs on GeneralComp { + var integer v_src := 1953719668 with { variant "32 bit" }; + var R v_rec := { id := 5, payload := encvalue_unichar(v_src, "UTF-16LE") }; + p.getcall(S:?); + p.raise(S, v_rec); + } + + testcase TC_Sem_220306_catch_operation_014() runs on GeneralComp system GeneralComp { + var integer v_res with { variant "32 bit" }; + var GeneralComp v_ptc := GeneralComp.create("PTC"); + connect(self:p, v_ptc:p); + v_ptc.start(f_server()); + p.call(S:{}) { + [] p.catch(S, R:?) -> value (v_res := @decoded("UTF-16LE") payload) { + if (v_res == 1953719668) { setverdict (pass); } + else { setverdict(fail); } + } + [] p.catch { setverdict(fail); } + }; + v_ptc.done; + setverdict(pass); + } + + control { + execute(TC_Sem_220306_catch_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn new file mode 100644 index 0000000..1b05262 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_015.ttcn @@ -0,0 +1,57 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn new file mode 100644 index 0000000..c997503 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_016.ttcn @@ -0,0 +1,58 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn new file mode 100644 index 0000000..cdf29c0 --- /dev/null +++ b/core_language/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/Sem_220306_catch_operation_017.ttcn @@ -0,0 +1,55 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn new file mode 100644 index 0000000..3e69633 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.4, null component reference in from clause of check operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_2204_the_check_operation_001 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_2204_the_check_operation_001() runs on GeneralComp system GeneralComp { + var GeneralComp v_comp := null; + connect(self:p, self:p); + p.send(10); + alt { + [] p.check (from v_comp) {} + [] p.check {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2204_the_check_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn new file mode 100644 index 0000000..ec08675 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.4, null address reference in from clause of check operation + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// No AddressRef shall contain the special value null at the time of the operation. + +module NegSem_2204_the_check_operation_002 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp + { + port P p; + } + + testcase TC_NegSem_2204_the_check_operation_002() runs on GeneralComp { + var P.address v_addr1 := 1, v_addr2 := 2, v_addr3 := null; + p.send(10); + alt { + [] p.check (from (v_addr1, v_addr2, v_addr3)) {} + [] p.check {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2204_the_check_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn new file mode 100644 index 0000000..d5a5157 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:22.4, incompatible from and sender clause + ** @verdict pass reject + *****************************************************************/ + +// The following requirements are tested: +// If the check 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_2204_the_check_operation_003 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_NegSem_2204_the_check_operation_003() runs on GeneralComp { + var address v_addr; + p.send(100); + alt { + [] p.check(from GeneralComp:? -> sender v_addr) { } + [] p.check {} + } + setverdict(pass); + } + + control { + execute(TC_NegSem_2204_the_check_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn new file mode 100644 index 0000000..e0c31be --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_004.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn new file mode 100644 index 0000000..f1b6fa3 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/NegSem_2204_the_check_operation_005.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 521 + ** @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; + } + + 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*/); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn new file mode 100644 index 0000000..1812bde --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_001.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(receive) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_001 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_001() runs on GeneralComp { + p.send(integer:1); + alt + { + [] p.check(receive) { setverdict(pass, "Check operation successful"); } + } + p.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_001(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn new file mode 100644 index 0000000..1c4a61b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(receive) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_002 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_002() runs on GeneralComp { + var integer v_addr; + p.send(integer:1) to 80; + alt + { + [] p.check(receive -> sender v_addr) { + if (v_addr == 80) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + } + } + p.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_002(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn new file mode 100644 index 0000000..88d9800 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_003.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(receive) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_003 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_003() runs on GeneralComp { + p.send(integer:1); + p.check(receive); + setverdict(pass, "Check operation successful"); + p.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_003(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_004.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_004.ttcn new file mode 100644 index 0000000..8a8a7d0 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_004.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(receive) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_004 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_004() runs on GeneralComp { + var integer v_addr; + p.send(integer:1) to 80; + p.check(receive -> sender v_addr); + if (v_addr == 80) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + p.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_004(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_005.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_005.ttcn new file mode 100644 index 0000000..80459b5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_005.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(receive) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_005 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_005() runs on GeneralComp { + p2.send(integer:1); + alt + { + [] any port.check(receive) { setverdict(pass, "Check operation successful"); } + } + any port.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_005(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_006.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_006.ttcn new file mode 100644 index 0000000..e697e88 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_006.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(receive) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_006 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_006() runs on GeneralComp { + var address v_addr; + p2.send(integer:1) to 80; + alt + { + [] any port.check(receive -> sender v_addr) { + if (v_addr == 80) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + } + } + any port.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_006(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_007.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_007.ttcn new file mode 100644 index 0000000..5d3fa61 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_007.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(receive) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_007 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_007() runs on GeneralComp { + p.send(integer:1); + any port.check(receive); + setverdict(pass, "Check operation successful"); + any port.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_007(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_008.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_008.ttcn new file mode 100644 index 0000000..7972a50 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_008.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(receive) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_008 { + + type integer address; + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_008() runs on GeneralComp { + var address v_addr; + p.send(integer:1) to 80; + any port.check(receive -> sender v_addr); + if (v_addr == 80) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + any port.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_008(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_009.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_009.ttcn new file mode 100644 index 0000000..9e7c558 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_009.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_009 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_009() runs on GeneralComp { + p.send(integer:1); + alt + { + [] p.check(receive(integer:(100..200))) { setverdict(fail, "Incorrect match"); } + [] p.receive { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_009(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_010.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_010.ttcn new file mode 100644 index 0000000..17f19bc --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_010.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_010 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_010() runs on GeneralComp { + var integer v_val; + p.send(integer:1) to 80; + alt + { + [] p.check(receive(integer:?) from P.address:(20..40) -> value v_val) { + setverdict(fail, "Incorrect match"); + } + [] p.receive { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_010(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_011.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_011.ttcn new file mode 100644 index 0000000..ffd0cfc --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_011.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify port.check(receive) behaviour in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_011 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.receive { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + testcase TC_Sem_2204_the_check_operation_011() runs on GeneralComp { + activate(a()); + p.send(integer:1); + p.check(receive(integer:(100..200))); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_011(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_012.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_012.ttcn new file mode 100644 index 0000000..c9bb7b4 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_012.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_012 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + var integer v_addr; + } + + altstep a() runs on GeneralComp { + [] p.receive { + if (not isbound(v_addr)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The address value should still be undefined at this point"); } + stop; + } + } + testcase TC_Sem_2204_the_check_operation_012() runs on GeneralComp { + activate(a()); + p.send(integer:1) to 80; + p.check(receive(integer:(100..200)) from P.address:(20..100) -> sender v_addr); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_012(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_013.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_013.ttcn new file mode 100644 index 0000000..7389cab --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_013.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify any port.check(receive) behaviour in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_013 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_013() runs on GeneralComp { + p2.send(integer:1); + alt + { + [] any port.check(receive(integer:(100..200))) { setverdict(fail, "Incorrect match"); } + [] any port.receive { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_013(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_014.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_014.ttcn new file mode 100644 index 0000000..879c0bd --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_014.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(receive) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_014 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_014() runs on GeneralComp { + var integer v_val; + p2.send(integer:1) to 80; + alt + { + [] any port.check(receive(integer:?) from address:(20..40) -> value v_val) { + setverdict(fail, "Incorrect match"); + } + [] any port.receive { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_014(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_015.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_015.ttcn new file mode 100644 index 0000000..93cb483 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_015.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify any port.check(receive) behaviour in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_015 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + altstep a() runs on GeneralComp { + [] any port.receive { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + testcase TC_Sem_2204_the_check_operation_015() runs on GeneralComp { + activate(a()); + p2.send(integer:1); + any port.check(receive(integer:(100..200))); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_015(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_016.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_016.ttcn new file mode 100644 index 0000000..4883a30 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_016.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(receive) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_016 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + var address v_addr; + } + + altstep a() runs on GeneralComp { + [] any port.receive { + if (not isbound(v_addr)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The address value should still be undefined at this point"); } + stop; + } + } + testcase TC_Sem_2204_the_check_operation_016() runs on GeneralComp { + activate(a()); + p2.send(integer:1) to 80; + any port.check(receive(integer:(100..200)) from address:(20..100) -> sender v_addr); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_016(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_017.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_017.ttcn new file mode 100644 index 0000000..0b2b95b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_017.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_017 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_017() runs on GeneralComp { + p.send(integer:1); + alt + { + [] p.check(receive(integer:?)) { setverdict(pass, "Check operation successful"); } + } + p.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_017(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_018.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_018.ttcn new file mode 100644 index 0000000..85b70e9 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_018.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behation of port.check(receive) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_018 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_018() runs on GeneralComp { + var integer v_val, v_addr; + p.send(integer:1) to 80; + alt + { + [] p.check(receive(integer:(0..10)) from P.address:(10..100) -> value v_val sender v_addr) { + if (match(v_val, 1) and match(v_addr, 80)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect message value or address"); } + } + } + p.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_018(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_019.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_019.ttcn new file mode 100644 index 0000000..e3a6a15 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_019.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_019 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_019() runs on GeneralComp { + p.send(integer:1); + p.check(receive(integer:?)); + setverdict(pass, "Check operation successful"); + p.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_019(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_020.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_020.ttcn new file mode 100644 index 0000000..56cd6bf --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_020.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(receive) with assignment in case of successful match works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_020 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_020() runs on GeneralComp { + var integer v_val; + p.send(integer:1); + p.check(receive(integer:(0..10)) -> value v_val); + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + p.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_020(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_021.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_021.ttcn new file mode 100644 index 0000000..32e40db --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_021.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(receive) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_021 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_021() runs on GeneralComp { + p2.send(integer:1); + alt + { + [] any port.check(receive(integer:?)) { setverdict(pass, "Check operation successful"); } + } + any port.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_021(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_022.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_022.ttcn new file mode 100644 index 0000000..797713e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_022.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behation of any port.check(receive) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_022 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_022() runs on GeneralComp { + var integer v_val, v_addr; + p2.send(integer:1) to 80; + alt + { + [] any port.check(receive(integer:(0..10)) from address:(10..100) -> value v_val sender v_addr) { + if (match(v_val, 1) and match(v_addr, 80)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect message value or address"); } + } + } + any port.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_022(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_023.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_023.ttcn new file mode 100644 index 0000000..a13b32d --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_023.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(receive) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_023 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_023() runs on GeneralComp { + p2.send(integer:1); + any port.check(receive(integer:?)); + setverdict(pass, "Check operation successful"); + any port.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_023(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_024.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_024.ttcn new file mode 100644 index 0000000..811cfe4 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_024.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(receive) with assignment in case of successful match works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_024 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_024() runs on GeneralComp { + var integer v_val; + p2.send(integer:1); + any port.check(receive(integer:(0..10)) -> value v_val); + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect address value"); } + any port.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_024(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_025.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_025.ttcn new file mode 100644 index 0000000..29bad17 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_025.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getcall) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_025 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + alt + { + [] p.check(getcall) { setverdict(pass, "Check operation successful"); } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_025() 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_Sem_2204_the_check_operation_025(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_026.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_026.ttcn new file mode 100644 index 0000000..9bc4f2d --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_026.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getcall) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_026 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] p.check(getcall -> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_026() 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_Sem_2204_the_check_operation_026(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_027.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_027.ttcn new file mode 100644 index 0000000..ae199d0 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_027.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getcall) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_027 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.check(getcall); + setverdict(pass, "Check operation successful"); + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_027() 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_Sem_2204_the_check_operation_027(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_028.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_028.ttcn new file mode 100644 index 0000000..71c7e6a --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_028.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getcall) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_028 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + p.check(getcall -> sender v_src); + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_028() 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_Sem_2204_the_check_operation_028(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_029.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_029.ttcn new file mode 100644 index 0000000..3424a92 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_029.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getcall) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_029 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + alt + { + [] any port.check(getcall) { setverdict(pass, "Check operation successful"); } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_029() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_029(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_030.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_030.ttcn new file mode 100644 index 0000000..000e0da --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_030.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getcall) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_030 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] any port.check(getcall -> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_030() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_030(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_031.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_031.ttcn new file mode 100644 index 0000000..d655ce6 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_031.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getcall) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_031 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + any port.check(getcall); + setverdict(pass, "Check operation successful"); + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_031() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_031(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_032.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_032.ttcn new file mode 100644 index 0000000..4fac08a --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_032.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getcall) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_032 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + any port.check(getcall -> sender v_src); + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_032() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_032(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_033.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_033.ttcn new file mode 100644 index 0000000..f4030b0 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_033.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_033 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + alt + { + [] p.check(getcall(S:{ p_par1 := (0, 2, 4, 6)})) { setverdict(fail, "Incorrect match"); } + [] p.getcall { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + testcase TC_Sem_2204_the_check_operation_033() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_033(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_034.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_034.ttcn new file mode 100644 index 0000000..ed810ac --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_034.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_034 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var integer v_val; + alt + { + [] p.check(getcall(S:{ p_par1 := (0, 2, 4, 6)}) -> param(v_val := p_par1)) { + setverdict(fail, "Incorrect match"); + } + [] p.getcall { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + } + } + } + + testcase TC_Sem_2204_the_check_operation_034() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_034(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_035.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_035.ttcn new file mode 100644 index 0000000..5af10e5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_035.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_035 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + altstep a() runs on GeneralComp { + [] p.getcall { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + function f() runs on GeneralComp { + activate(a()); + p.check(getcall(S:{ p_par1 := (0, 2, 4, 6)})); + setverdict(fail, "Incorrect match"); + } + + testcase TC_Sem_2204_the_check_operation_035() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_035(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_036.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_036.ttcn new file mode 100644 index 0000000..239f455 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_036.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_036 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + var integer v_val; + } + + altstep a() runs on GeneralComp { + [] p.getcall { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + stop; + } + } + + function f() runs on GeneralComp { + activate(a()); + p.check(getcall(S:{ p_par1 := (0..10)}) from self -> param(v_val := p_par1)); + setverdict(fail, "Incorrect match"); + } + + testcase TC_Sem_2204_the_check_operation_036() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_036(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_037.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_037.ttcn new file mode 100644 index 0000000..9d0e6a7 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_037.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_037 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + alt + { + [] any port.check(getcall(S:{ p_par1 := (0, 2, 4, 6)})) { setverdict(fail, "Incorrect match"); } + [] any port.getcall { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + testcase TC_Sem_2204_the_check_operation_037() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_037(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_038.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_038.ttcn new file mode 100644 index 0000000..998fe4f --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_038.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_038 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var integer v_val; + alt + { + [] any port.check(getcall(S:{ p_par1 := (0, 2, 4, 6)}) -> param(v_val := p_par1)) { + setverdict(fail, "Incorrect match"); + } + [] any port.getcall { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + } + } + } + + testcase TC_Sem_2204_the_check_operation_038() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_038(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_039.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_039.ttcn new file mode 100644 index 0000000..ef9b245 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_039.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_039 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + altstep a() runs on GeneralComp { + [] any port.getcall { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + function f() runs on GeneralComp { + activate(a()); + any port.check(getcall(S:{ p_par1 := (0, 2, 4, 6)})); + setverdict(fail, "Incorrect match"); + } + + testcase TC_Sem_2204_the_check_operation_039() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_039(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_040.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_040.ttcn new file mode 100644 index 0000000..9658c67 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_040.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_040 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + var integer v_val; + } + + altstep a() runs on GeneralComp { + [] any port.getcall { + if (not isbound(v_val)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The value should still be undefined at this point"); } + stop; + } + } + + function f() runs on GeneralComp { + activate(a()); + any port.check(getcall(S:{ p_par1 := (0..10)}) from self -> param(v_val := p_par1)); + setverdict(fail, "Incorrect match"); + } + + testcase TC_Sem_2204_the_check_operation_040() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_040(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_041.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_041.ttcn new file mode 100644 index 0000000..eab05ca --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_041.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_041 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + alt + { + [] p.check(getcall(S:{ p_par1 := (0..10)})) { setverdict(pass, "Check operation successful"); } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_041() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_041(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_042.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_042.ttcn new file mode 100644 index 0000000..f89f106 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_042.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_042 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var integer v_val; + var GeneralComp v_src; + alt + { + [] p.check(getcall(S:{ p_par1 := (0..10)}) from GeneralComp:? -> param (v_val) sender v_src) { + if (match(v_val, 1) and match(v_src, mtc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter value or sender"); } + } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_042() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_042(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_043.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_043.ttcn new file mode 100644 index 0000000..b92c282 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_043.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_043 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.check(getcall(S:{ p_par1 := (0..10)}) from mtc); + setverdict(pass, "Check operation successful"); + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_043() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_043(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_044.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_044.ttcn new file mode 100644 index 0000000..3446ca3 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_044.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getcall) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_044 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var integer v_val; + p.check(getcall(S:{ p_par1 := (0..10)}) -> param (v_val)); + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter value"); } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_044() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_044(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_045.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_045.ttcn new file mode 100644 index 0000000..f70b922 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_045.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_045 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + alt + { + [] any port.check(getcall(S:{ p_par1 := (0..10)})) { setverdict(pass, "Check operation successful"); } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_045() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_045(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_046.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_046.ttcn new file mode 100644 index 0000000..427e35e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_046.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_046 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var integer v_val; + var GeneralComp v_src; + alt + { + [] any port.check(getcall(S:{ p_par1 := (0..10)}) from GeneralComp:? -> param (v_val) sender v_src) { + if (match(v_val, 1) and match(v_src, mtc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter value or sender"); } + } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_046() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_046(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_047.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_047.ttcn new file mode 100644 index 0000000..0e7b5f1 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_047.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_047 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + any port.check(getcall(S:{ p_par1 := (0..10)}) from mtc); + setverdict(pass, "Check operation successful"); + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_047() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_047(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_048.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_048.ttcn new file mode 100644 index 0000000..7487d43 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_048.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getcall) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_048 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var integer v_val; + any port.check(getcall(S:{ p_par1 := (0..10)}) -> param (v_val)); + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter value"); } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_048() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_048(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_049.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_049.ttcn new file mode 100644 index 0000000..33dc6f5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_049.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getreply) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_049 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_049() 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()); + alt + { + [] p.check(getreply) { setverdict(pass, "Check operation successful"); } + } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_049(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_050.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_050.ttcn new file mode 100644 index 0000000..31e2548 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_050.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getreply) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_050 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_050() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + } + } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_050(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_051.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_051.ttcn new file mode 100644 index 0000000..287094a --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_051.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getreply) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_051 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_051() 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()); + p.check(getreply); + setverdict(pass, "Check operation successful"); + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_051(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_052.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_052.ttcn new file mode 100644 index 0000000..116d4c4 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_052.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(getreply) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_052 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_052() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(getreply -> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_052(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_053.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_053.ttcn new file mode 100644 index 0000000..95bd8ae --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_053.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getreply) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_053 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_053() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply) { setverdict(pass, "Check operation successful"); } + } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_053(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_054.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_054.ttcn new file mode 100644 index 0000000..478b81b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_054.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getreply) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_054 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_054() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + } + } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_054(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_055.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_055.ttcn new file mode 100644 index 0000000..f2f406d --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_055.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getreply) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_055 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_055() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(getreply); + setverdict(pass, "Check operation successful"); + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_055(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_056.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_056.ttcn new file mode 100644 index 0000000..f3fe0b5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_056.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(getreply) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_056 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_056() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(getreply -> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_056(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_057.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_057.ttcn new file mode 100644 index 0000000..7fa6f6b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_057.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_057 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_057() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply(S:{p_par1 := (100..200)} value ?)) { setverdict(fail, "Incorrect match"); } + [] p.getreply { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_057(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_058.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_058.ttcn new file mode 100644 index 0000000..7d36fb9 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_058.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_058 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_058() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply(S:{p_par1 := ?} value (100..200)) -> value v_val param (v_par := p_par1)) { + setverdict(fail, "Incorrect match"); + } + [] p.getreply { + if (not isbound(v_par) and not isbound(v_val)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_par and v_val variables should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_058(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_059.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_059.ttcn new file mode 100644 index 0000000..6bf7511 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_059.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_059 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] p.getreply { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_059() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + p.check(getreply(S:? value ?) from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_059(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_060.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_060.ttcn new file mode 100644 index 0000000..83f0599 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_060.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_060 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + var integer v_val; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] p.getreply { + if (not isbound(v_val) and not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val and v_src variables should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_060() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + p.check(getreply(S:{p_par1 := ?} value (100..200)) -> value v_val sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_060(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_061.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_061.ttcn new file mode 100644 index 0000000..1a2d082 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_061.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_061 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_061() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply(S:{p_par1 := (100..200)} value ?)) { setverdict(fail, "Incorrect match"); } + [] any port.getreply { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_061(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_062.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_062.ttcn new file mode 100644 index 0000000..970475f --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_062.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_062 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_062() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply(S:{p_par1 := ?} value (100..200)) -> value v_val param (v_par := p_par1)) { + setverdict(fail, "Incorrect match"); + } + [] any port.getreply { + if (not isbound(v_par) and not isbound(v_val)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_par and v_val variables should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_062(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_063.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_063.ttcn new file mode 100644 index 0000000..fa7d6ec --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_063.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_063 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] any port.getreply { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_063() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + any port.check(getreply(S:? value ?) from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_063(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_064.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_064.ttcn new file mode 100644 index 0000000..fbb0e1a --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_064.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_064 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + var integer v_val; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] any port.getreply { + if (not isbound(v_val) and not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val and v_src variables should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_064() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + any port.check(getreply(S:{p_par1 := ?} value (100..200)) -> value v_val sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_064(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_065.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_065.ttcn new file mode 100644 index 0000000..0382799 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_065.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_065 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_065() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply(S:{ p_par1 := ?} value integer:(0..10))) { + setverdict(pass, "Check operation successful"); + } + } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_065(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_066.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_066.ttcn new file mode 100644 index 0000000..a4c6b28 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_066.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_066 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_066() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply(S:{ p_par1 := ?} value integer:(0..10)) -> value v_val param (v_par := p_par1)) { + if ( match(v_par, 1) and match(v_val, 5)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter or return value"); } + } + } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_066(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_067.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_067.ttcn new file mode 100644 index 0000000..9f644db --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_067.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_067 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_067() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + p.check(getreply(S:{ p_par1 := ?} value integer:(0..10)) from v_ptc); + setverdict(pass, "Check operation successful"); + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_067(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_068.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_068.ttcn new file mode 100644 index 0000000..c60ead5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_068.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(getreply) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_068 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1 } value 5); + } + + testcase TC_Sem_2204_the_check_operation_068() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_val; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] p.check(getreply(S:{ p_par1 := complement(4, 5, 6) } value integer:?) -> value v_val sender v_src) { + if ( match(v_val, 5) and match(v_src, v_ptc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect return value or sender"); } + } + } + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_068(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_069.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_069.ttcn new file mode 100644 index 0000000..b3be753 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_069.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_069 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_069() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply(S:{ p_par1 := ?} value integer:(0..10))) { + setverdict(pass, "Check operation successful"); + } + } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_069(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_070.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_070.ttcn new file mode 100644 index 0000000..801b5f9 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_070.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_070 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_070() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply(S:{ p_par1 := ?} value integer:(0..10)) -> value v_val param (v_par := p_par1)) { + if (match(v_par, 1) and match(v_val, 5)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect parameter or return value"); } + } + } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_070(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_071.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_071.ttcn new file mode 100644 index 0000000..d450c9e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_071.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_071 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_071() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + any port.check(getreply(S:{ p_par1 := ?} value integer:(0..10)) from v_ptc); + setverdict(pass, "Check operation successful"); + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_071(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_072.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_072.ttcn new file mode 100644 index 0000000..51d0fb2 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_072.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(getreply) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_072 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1 } value 5); + } + + testcase TC_Sem_2204_the_check_operation_072() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(getreply(S:{ p_par1 := complement(4, 5, 6) } value integer:?) -> value v_val sender v_src) { + if (match(v_val, 5) and match(v_src, v_ptc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect return value or sender"); } + } + } + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_072(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_073.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_073.ttcn new file mode 100644 index 0000000..c22eab7 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_073.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(catch) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_073 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_073() 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()); + alt + { + [] p.check(catch) { setverdict(pass, "Check operation successful"); } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_073(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_074.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_074.ttcn new file mode 100644 index 0000000..3a79c77 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_074.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(catch) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_074 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_074() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(catch -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_074(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_075.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_075.ttcn new file mode 100644 index 0000000..3c34b35 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_075.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(catch) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_075 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_075() 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()); + p.check(catch); + setverdict(pass, "Check operation successful"); + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_075(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_076.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_076.ttcn new file mode 100644 index 0000000..c01d112 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_076.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check(catch) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_076 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_076() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(catch -> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_076(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_077.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_077.ttcn new file mode 100644 index 0000000..648c8f9 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_077.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(catch) works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_077 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_077() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch) { setverdict(pass, "Check operation successful"); } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_077(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_078.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_078.ttcn new file mode 100644 index 0000000..fde58a2 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_078.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(catch) with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_078 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_078() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_078(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_079.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_079.ttcn new file mode 100644 index 0000000..dc34b86 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_079.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(catch) works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_079 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_079() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(catch); + setverdict(pass, "Check operation successful"); + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_079(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_080.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_080.ttcn new file mode 100644 index 0000000..7226750 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_080.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(catch) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_080 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_080() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(catch -> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_080(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_081.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_081.ttcn new file mode 100644 index 0000000..20152df --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_081.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_081 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_081() 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()); + alt + { + [] p.check(catch(S, integer:(100..200))) { setverdict(fail, "Incorrect match"); } + [] p.catch { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_081(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_082.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_082.ttcn new file mode 100644 index 0000000..cc03b4b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_082.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_082 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_082() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_val; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(catch(S, integer:(100..200)) -> value v_val) { + setverdict(fail, "Incorrect match"); + } + [] p.catch { + if (not isbound(v_val)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val variable should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_082(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_083.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_083.ttcn new file mode 100644 index 0000000..a54039f --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_083.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_083 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] p.catch { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_083() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(catch(S, integer:?) from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_083(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_084.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_084.ttcn new file mode 100644 index 0000000..3bc1176 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_084.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_084 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + var integer v_val; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] p.catch { + if (not isbound(v_val) and not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val and v_src variables should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_084() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(catch(S, integer:(100..200)) -> value v_val sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_084(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_085.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_085.ttcn new file mode 100644 index 0000000..a3a5b82 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_085.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_085 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_085() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch(S, integer:(100..200))) { setverdict(fail, "Incorrect match"); } + [] any port.catch { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_085(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_086.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_086.ttcn new file mode 100644 index 0000000..6de061d --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_086.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_086 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_086() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch(S, integer:(100..200)) -> value v_val) { + setverdict(fail, "Incorrect match"); + } + [] any port.catch { + if (not isbound(v_val)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val variable should still be undefined at this point"); } + } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_086(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_087.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_087.ttcn new file mode 100644 index 0000000..bfa5159 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_087.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_087 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] any port.catch { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_087() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(catch(S, integer:?) from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_087(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_088.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_088.ttcn new file mode 100644 index 0000000..09c0949 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_088.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_088 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + var integer v_val; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] any port.catch { + if (not isbound(v_val) and not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_val and v_src variables should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_088() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(catch(S, integer:(100..200)) -> value v_val sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_088(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_089.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_089.ttcn new file mode 100644 index 0000000..ef03c55 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_089.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_089 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_089() 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()); + alt + { + [] p.check(catch(S, integer:(0..10))) { + setverdict(pass, "Check operation successful"); + } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_089(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_090.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_090.ttcn new file mode 100644 index 0000000..ce7050e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_090.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_090 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_090() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_par, v_val; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(catch(S, integer:(0..10)) -> value v_val) { + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect exception value"); } + } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_090(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_091.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_091.ttcn new file mode 100644 index 0000000..2158c0c --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_091.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_091 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_091() 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()); + p.check(catch(S, integer:?) from v_ptc); + setverdict(pass, "Check operation successful"); + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_091(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_092.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_092.ttcn new file mode 100644 index 0000000..78b0f52 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_092.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check(catch) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_092 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_092() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_val; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(catch(S, integer: complement(4, 5, 6)) -> value v_val sender v_src) { + if (match(v_val, 1) and match(v_src, v_ptc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect exception value or sender"); } + } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_092(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_093.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_093.ttcn new file mode 100644 index 0000000..1ee45de --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_093.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_093 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_093() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch(S, integer:(0..10))) { + setverdict(pass, "Check operation successful"); + } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_093(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_094.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_094.ttcn new file mode 100644 index 0000000..b44bc0f --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_094.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_094 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_094() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + var integer v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch(S, integer:(0..10)) -> value v_val) { + if (v_val == 1) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect exception value"); } + } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_094(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_095.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_095.ttcn new file mode 100644 index 0000000..c3fc008 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_095.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_095 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_095() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(catch(S, integer:?) from v_ptc); + setverdict(pass, "Check operation successful"); + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_095(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_096.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_096.ttcn new file mode 100644 index 0000000..5aea020 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_096.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check(catch) with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_096 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_096() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + var integer v_val; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(catch(S, integer:complement(4, 5, 6)) -> value v_val sender v_src) { + if (match(v_val, 1) and match(v_src, v_ptc)) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect exception value or sender"); } + } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_096(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_097.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_097.ttcn new file mode 100644 index 0000000..681555e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_097.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_097 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_097() runs on GeneralComp { + p.send(integer:1); + alt + { + [] p.check { setverdict(pass, "Check operation successful"); } + } + p.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_097(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_098.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_098.ttcn new file mode 100644 index 0000000..55059db --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_098.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_098 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] p.check(-> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_098() 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_Sem_2204_the_check_operation_098(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_099.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_099.ttcn new file mode 100644 index 0000000..d81cdff --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_099.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_099 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_099() 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()); + p.check; + setverdict(pass, "Check operation successful"); + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_099(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_100.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_100.ttcn new file mode 100644 index 0000000..bdf926e --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_100.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that port.check with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_100 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_100() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(-> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_100(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_101.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_101.ttcn new file mode 100644 index 0000000..54aa8a9 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_101.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_101 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_101() runs on GeneralComp { + p2.send(integer:1); + alt + { + [] any port.check { setverdict(pass, "Check operation successful"); } + } + any port.receive; + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_101(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_102.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_102.ttcn new file mode 100644 index 0000000..7a1747d --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_102.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check with assignment works correctly inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_102 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] any port.check(-> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Unexpected sender value"); } + } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_102() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_102(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_103.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_103.ttcn new file mode 100644 index 0000000..603009f --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_103.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_103 { + + signature S(); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{}); + } + + testcase TC_Sem_2204_the_check_operation_103() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check; + setverdict(pass, "Check operation successful"); + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_103(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_104.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_104.ttcn new file mode 100644 index 0000000..7320fdb --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_104.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify that any port.check(catch) with assignment works correctly as standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_104 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_104() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(-> sender v_src); + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Counterpart mismatch"); } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_104(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_105.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_105.ttcn new file mode 100644 index 0000000..41579e5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_105.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_105 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_105() runs on GeneralComp { + p.send(integer:1) to 80; + alt + { + [] p.check(from 8080) { setverdict(fail, "Incorrect match"); } + [] p.receive { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_105(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_106.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_106.ttcn new file mode 100644 index 0000000..d81ab62 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_106.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_106 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] p.check(from self -> sender v_src) { + setverdict(fail, "Incorrect match"); + } + [] p.getcall { + if (not isbound(v_src)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The v_src variable should still be undefined at this point"); } + } + } + } + + testcase TC_Sem_2204_the_check_operation_106() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_106(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_107.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_107.ttcn new file mode 100644 index 0000000..e9027a1 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_107.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_107 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] p.getreply { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_107() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + p.check(from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_107(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_108.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_108.ttcn new file mode 100644 index 0000000..27552f2 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_108.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_108 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] p.catch { + if (not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_src variable should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_108() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + p.check(from self -> sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_108(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_109.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_109.ttcn new file mode 100644 index 0000000..a2544d7 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_109.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify any port.check behaviour in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_109 { + + type integer address; + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_109() runs on GeneralComp { + p2.send(integer:1) to 80; + alt + { + [] any port.check(from 8080) { setverdict(fail, "Incorrect match"); } + [] any port.receive { setverdict(pass, "As expected, the check operation didn't match"); } + } + } + + control { + execute(TC_Sem_2204_the_check_operation_109(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_110.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_110.ttcn new file mode 100644 index 0000000..b630414 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_110.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check with assignment in case of unsuccessful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_110 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] any port.check(from self -> sender v_src) { + setverdict(fail, "Incorrect match"); + } + [] any port.getcall { + if (not isbound(v_src)) { setverdict(pass, "As expected, the check operation didn't match"); } + else { setverdict(fail, "The v_src variable should still be undefined at this point"); } + } + } + } + + testcase TC_Sem_2204_the_check_operation_110() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_110(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_111.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_111.ttcn new file mode 100644 index 0000000..261b37c --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_111.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_111 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + altstep a() runs on GeneralComp { + [] any port.getreply { + setverdict(pass, "As expected, the check operation didn't match"); + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_111() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := - }, nowait); + v_ptc.start(f()); + any port.check(from self); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_111(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_112.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_112.ttcn new file mode 100644 index 0000000..047ffaf --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_112.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check with assignment in case of unsuccessful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_112 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + var GeneralComp v_src; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + altstep a() runs on GeneralComp { + [] any port.catch { + if (not isbound(v_src)) { + setverdict(pass, "As expected, the check operation didn't match"); + } + else { setverdict(fail, "The v_src variable should still be undefined at this point"); } + stop; + } + } + + testcase TC_Sem_2204_the_check_operation_112() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + activate(a()); + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + any port.check(from self -> sender v_src); + setverdict(fail, "Incorrect match"); + } + + control { + execute(TC_Sem_2204_the_check_operation_112(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_113.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_113.ttcn new file mode 100644 index 0000000..65971f5 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_113.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_113 { + + type port P message { + inout integer; + address integer; + } + + type component GeneralComp { + port P p; + } + + testcase TC_Sem_2204_the_check_operation_113() runs on GeneralComp { + p.send(integer:1) to 80; + alt + { + [] p.check(from P.address:(80, 8080)) { setverdict(pass, "Check operation successful"); } + } + p.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_113(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_114.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_114.ttcn new file mode 100644 index 0000000..10e06a1 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_114.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_114 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] p.check(from GeneralComp:? -> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect sender"); } + } + } + p.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_114() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_114(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_115.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_115.ttcn new file mode 100644 index 0000000..76c65ba --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_115.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_115 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_115() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p, v_ptc:p); + p.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + p.check(from v_ptc); + setverdict(pass, "Check operation successful"); + p.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_115(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_116.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_116.ttcn new file mode 100644 index 0000000..48dedba --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_116.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of port.check with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_116 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p; + } + + function f() runs on GeneralComp { + p.getcall; + setverdict(pass, "Call received"); + p.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_116() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p, v_ptc:p); + p.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] p.check(from GeneralComp:? -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect sender"); } + } + } + p.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_116(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_117.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_117.ttcn new file mode 100644 index 0000000..7015a35 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_117.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_117 { + + type port P message { + inout integer; + } + + type component GeneralComp { + port P p1, p2; + } + + testcase TC_Sem_2204_the_check_operation_117() runs on GeneralComp { + p2.send(integer:1); + alt + { + [] any port.check { setverdict(pass, "Check operation successful"); } + } + any port.receive(integer:?); + setverdict(pass, "Message still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_117(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_118.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_118.ttcn new file mode 100644 index 0000000..c3068f1 --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_118.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check with assignment in case of successful match inside alt + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_118 { + + signature S(integer p_par1); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + var GeneralComp v_src; + alt + { + [] any port.check(from GeneralComp:? -> sender v_src) { + if (v_src == mtc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect sender"); } + } + } + any port.getcall; + setverdict(pass, "Call still on the top of the queue"); + } + + testcase TC_Sem_2204_the_check_operation_118() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := 1 }, nowait); + v_ptc.start(f()); + v_ptc.done; + } + + control { + execute(TC_Sem_2204_the_check_operation_118(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_119.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_119.ttcn new file mode 100644 index 0000000..592ba3b --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_119.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_119 { + + signature S(out integer p_par1) return integer; + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.reply(S:{ p_par1 := 1} value 5); + } + + testcase TC_Sem_2204_the_check_operation_119() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{ p_par1 := -}, nowait); + v_ptc.start(f()); + any port.check(from v_ptc); + setverdict(pass, "Check operation successful"); + any port.getreply; + setverdict(pass, "Reply still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_119(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_120.ttcn b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_120.ttcn new file mode 100644 index 0000000..7d53a0c --- /dev/null +++ b/core_language/22_communication_operations/2204_the_check_operation/Sem_2204_the_check_operation_120.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:22.4, Verify behaviour of any port.check with assignment in case of successful match in standalone statement + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +module Sem_2204_the_check_operation_120 { + + signature S() exception(integer); + type port P procedure { + inout S; + } + + type component GeneralComp { + port P p1, p2; + } + + function f() runs on GeneralComp { + p2.getcall; + setverdict(pass, "Call received"); + p2.raise(S, integer:1); + } + + testcase TC_Sem_2204_the_check_operation_120() runs on GeneralComp system GeneralComp{ + var GeneralComp v_ptc := GeneralComp.create, v_src; + connect(self:p1, v_ptc:p1); + connect(self:p2, v_ptc:p2); + p2.call(S:{}, nowait); + v_ptc.start(f()); + alt + { + [] any port.check(from GeneralComp:? -> sender v_src) { + if (v_src == v_ptc) { setverdict(pass, "Check operation successful"); } + else { setverdict(fail, "Incorrect exception value or sender"); } + } + } + any port.catch; + setverdict(pass, "Exception still on the top of the queue"); + } + + control { + execute(TC_Sem_2204_the_check_operation_120(), 5.0); + } +} \ No newline at end of file diff --git a/core_language/22_communication_operations/NOTES b/core_language/22_communication_operations/NOTES new file mode 100644 index 0000000..fbcdaf4 --- /dev/null +++ b/core_language/22_communication_operations/NOTES @@ -0,0 +1,5 @@ +Most aspects of message based communication have been tested in B_matching_incoming_values, +and most aspects of procedue based communication have been tested in +1502_declaring_signature_templates. This section contains test cases only for those +special aspects of communication operations, which have not been tested elsewhere. + diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_001.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_001.ttcn new file mode 100644 index 0000000..415cde8 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure infinity is not allowed + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Timer value is non-neg float + + +module NegSem_2302_timer_start_001 { + type component TComp{ + timer t_timer; + } + testcase TC_NegSem_2302_timer_start_001() runs on TComp{ + // Timer value shall be a non-negative numerical float number (i.e. the value shall be greater or equal 0.0, infinity and not_a_number are disallowed). + var float duration := infinity; + t_timer.start(duration); + } + control{ + + execute(TC_NegSem_2302_timer_start_001()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_002.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_002.ttcn new file mode 100644 index 0000000..5661dcc --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure not_a_number is not allowed + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Timer value is non-neg float + + +module NegSem_2302_timer_start_002 { + type component TComp{ + timer t_timer; + } + testcase TC_NegSem_2302_timer_start_002() runs on TComp{ + // Timer value shall be a non-negative numerical float number (i.e. the value shall be greater or equal 0.0, infinity and not_a_number are disallowed). + var float duration := not_a_number; + t_timer.start(duration); + } + control{ + + execute(TC_NegSem_2302_timer_start_002()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_003.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_003.ttcn new file mode 100644 index 0000000..5c74f93 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure negative value is not allowed + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Timer value is non-neg float +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/neg timer value causes error verdict + +module NegSem_2302_timer_start_003 { + type component TComp{ + timer t_timer; + } + testcase TC_NegSem_2302_timer_start_003() runs on TComp{ + // Timer value shall be a non-negative numerical float number (i.e. the value shall be greater or equal 0.0, infinity and not_a_number are disallowed). + var float duration := -1.0; + t_timer.start(duration); + } + control{ + + execute(TC_NegSem_2302_timer_start_003()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_004.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_004.ttcn new file mode 100644 index 0000000..3aba210 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSem_2302_timer_start_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure negative infinity is not allowed + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Timer value is non-neg float + + +module NegSem_2302_timer_start_004 { + type component TComp{ + timer t_timer; + } + testcase TC_NegSem_2302_timer_start_004() runs on TComp{ + // Timer value shall be a non-negative numerical float number (i.e. the value shall be greater or equal 0.0, infinity and not_a_number are disallowed). + var float duration := -infinity; + t_timer.start(duration); + } + control{ + + execute(TC_NegSem_2302_timer_start_004()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_001.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_001.ttcn new file mode 100644 index 0000000..1c7ee1e --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_001 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2302_timer_start_001() runs on TComp{ + t_timer.start(); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_001()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_002.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_002.ttcn new file mode 100644 index 0000000..f09a05a --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_002.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_002 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_002() runs on TComp{ + + t_timers[].start; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_002()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_003.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_003.ttcn new file mode 100644 index 0000000..4bd6ff0 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ + + +module NegSyn_2302_timer_start_003 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_003() runs on TComp{ + + t_timers[1].start(); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_003()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_004.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_004.ttcn new file mode 100644 index 0000000..9eb4ec5 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_004.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_004 { + type component TComp{ + + timer t_timer := 1.0; + } + testcase TC_NegSyn_2302_timer_start_004() runs on TComp{ + + t_timer.start 1.0; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_004()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_005.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_005.ttcn new file mode 100644 index 0000000..5a11684 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_005.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_005 { + type component TComp{ + + timer t_timer := 1.0; + } + testcase TC_NegSyn_2302_timer_start_005() runs on TComp{ + + t_timer start(1.0); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_005()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_006.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_006.ttcn new file mode 100644 index 0000000..e828863 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_006.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_006 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_006() runs on TComp{ + + t_timers[1].start 1.0; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_006()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_007.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_007.ttcn new file mode 100644 index 0000000..7dae0ca --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_007.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_007 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_007() runs on TComp{ + + t_timers[1] start(1.0); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_007()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_008.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_008.ttcn new file mode 100644 index 0000000..13441ee --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_008.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_008 { + type component TComp{ + + timer t_timer := 1.0; + } + testcase TC_NegSyn_2302_timer_start_008() runs on TComp{ + + t_timer start; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_008()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_009.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_009.ttcn new file mode 100644 index 0000000..8bbc23f --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_009.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax + + +module NegSyn_2302_timer_start_009 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_009() runs on TComp{ + + t_timers[1] start; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_009()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_010.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_010.ttcn new file mode 100644 index 0000000..47c72ef --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_010.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow any timer.start + +module NegSyn_2302_timer_start_010 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_010() runs on TComp{ + // This is not allowed by the TTCN3 grammar + any timer.start; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_010()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_011.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_011.ttcn new file mode 100644 index 0000000..148d003 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_011.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow any timer.start + +module NegSyn_2302_timer_start_011 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_011() runs on TComp{ + // This is not allowed by the TTCN3 grammar + any timer.start(1.0); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_011()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_012.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_012.ttcn new file mode 100644 index 0000000..f5ad8ff --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_012.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow all timer.start + +module NegSyn_2302_timer_start_012 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_012() runs on TComp{ + // This is not allowed by the TTCN3 grammar + all timer.start; + + } + control{ + + execute(TC_NegSyn_2302_timer_start_012()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_013.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_013.ttcn new file mode 100644 index 0000000..168ef78 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/NegSyn_2302_timer_start_013.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer start syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/Start timer syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow all timer.start + + +module NegSyn_2302_timer_start_013 { + type component TComp{ + + timer t_timers[3] := {1.0, 1.0, 1.0}; + } + testcase TC_NegSyn_2302_timer_start_013() runs on TComp{ + // This is not allowed by the TTCN3 grammar + all timer.start(1.0); + + } + control{ + + execute(TC_NegSyn_2302_timer_start_013()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn new file mode 100644 index 0000000..cc21bdb --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_001.ttcn @@ -0,0 +1,44 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:23, Ensure timer runs from zero to stated value + ** @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 + +module Sem_2302_timer_start_001 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Sem_2302_timer_start_001() runs on TComp{ + timer t_short, t_long; + var float v_elapsed; + var float v_last := 0.0; + + t_long.start(2.0); + t_timer.start(1.0); + t_short.start(0.5); + + while (t_short.running) { + v_elapsed := t_timer.read; + log("t_timer.read = ", v_elapsed); + if (v_elapsed<0.0 or v_elapsed < v_last){ + setverdict(fail) + } + v_last := v_elapsed; + } + while (t_timer.running) { + v_elapsed := t_long.read; + log("t_long.read = ", v_elapsed); + if (v_elapsed < v_last){ + setverdict(fail) + } + v_last := v_elapsed; + } + setverdict(pass); + + } + control{ + execute(TC_Sem_2302_timer_start_001()) + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn new file mode 100644 index 0000000..2c0bbc4 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_002.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:23, Ensure timer can be restarted + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.2 The start timer operation/timer can be restarted by repeated start operation + + +module Sem_2302_timer_start_002 { + type component TComp{ + } + + testcase TC_Sem_2302_timer_start_002() runs on TComp{ + timer t_short := 0.5, t_target := 1.0, t_long := 1.0; + + t_short.start; + t_target.start; + t_long.start; + + alt { + []t_short.timeout { + setverdict(pass); + t_target.start; // restart timer + } + []t_target.timeout { + setverdict(fail); + stop; + } + []t_long.timeout { + setverdict(fail); + stop; + } + } + alt { + []t_long.timeout { + setverdict(pass); + } + []t_target.timeout { + // Expected that t_target timeouts in 1.5 seconds since start: + // 0.5 sec. elapsed by t_short and 1.0 sec. by restarted timer + setverdict(fail); + stop; + } + } + } + control{ + + execute(TC_Sem_2302_timer_start_002()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn new file mode 100644 index 0000000..443e130 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_003.ttcn @@ -0,0 +1,74 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:23, Ensure timer default value can be modified by start value + ** @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 + +module Sem_2302_timer_start_003 { + type component TComp{ + timer t_timer := 1.0; + } + + testcase TC_Sem_2302_timer_start_003() runs on TComp{ + timer t_short := 0.95, t_long := 1.05; + + t_long.start; + t_timer.start(0.9); + t_short.start; + + // t_timer is expected to expire before other timers: its duration 0.9 < t_short < t_long + alt { + []t_timer.timeout { + setverdict(pass); + } + []t_short.timeout { + setverdict(fail); + stop; + } + []t_long.timeout { + setverdict(fail); + stop; + } + } + + t_short.timeout; + t_long.timeout; + + t_long.start; + t_timer.start; + t_short.start; + // t_timer is expected to expire before between t_short and t_long timers: + // its default duration t_short < 1.0 < t_long + alt { + []t_short.timeout { + setverdict(pass); + } + []t_timer.timeout { + setverdict(fail); + stop; + } + []t_long.timeout { + setverdict(fail); + stop; + } + } + alt { + []t_timer.timeout { + setverdict(pass); + } + []t_long.timeout { + setverdict(fail); + stop; + } + } + } + control{ + + execute(TC_Sem_2302_timer_start_003()) + + + } +} diff --git a/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn new file mode 100644 index 0000000..324d939 --- /dev/null +++ b/core_language/23_timer_operations/2302_the_start_timer_operataion/Sem_2302_timer_start_004.ttcn @@ -0,0 +1,45 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:23, Ensure timer with value 0.0 expires immediately + ** @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. + + +module Sem_2302_timer_start_004 { + type component TComp{ + timer t_timer := 0.0; + timer t_timer_with_long_default := 100.0; + } + + testcase TC_Sem_2302_timer_start_004() runs on TComp{ + t_timer.start; + if (t_timer.running) + { + setverdict(fail); + } + else + { + setverdict(pass); + } + + t_timer_with_long_default.start(0.0); + if (t_timer_with_long_default.running) + { + setverdict(fail); + } + else + { + setverdict(pass); + } + + + } + control{ + + execute(TC_Sem_2302_timer_start_004()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_001.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_001.ttcn new file mode 100644 index 0000000..1401dff --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + + +module NegSyn_2303_timer_stop_001 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2303_timer_stop_001() runs on TComp{ + t_timer.start; + t_timer stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_001()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_002.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_002.ttcn new file mode 100644 index 0000000..ba96348 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_002.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + + +module NegSyn_2303_timer_stop_002 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2303_timer_stop_002() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + t_timer[].stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_002()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_003.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_003.ttcn new file mode 100644 index 0000000..7ccc09a --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_003.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure all timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + + +module NegSyn_2303_timer_stop_003 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2303_timer_stop_003() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + all.stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_003()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_004.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_004.ttcn new file mode 100644 index 0000000..e91caaa --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_004.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure all timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + + +module NegSyn_2303_timer_stop_004 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2303_timer_stop_004() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + timer.stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_004()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_005.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_005.ttcn new file mode 100644 index 0000000..6d74d32 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_005.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure all timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + + +module NegSyn_2303_timer_stop_005 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2303_timer_stop_005() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + all timer stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_005()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_006.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_006.ttcn new file mode 100644 index 0000000..fec409e --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/NegSyn_2303_timer_stop_006.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure all timer stop syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow any timer.stop + +module NegSyn_2303_timer_stop_006 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2303_timer_stop_006() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + any timer.stop; + + } + control{ + + execute(TC_NegSyn_2303_timer_stop_006()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_002.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_002.ttcn new file mode 100644 index 0000000..03f0da8 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_002.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure timer stop sets elapsed time to zero + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/stopped timer is inactive and elapsed time is 0 + + +module Sem_2303_timer_stop_002 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_Sem_2303_timer_stop_002() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + t_timer[0].stop; + if (t_timer[0].read!=0.0){ + setverdict(fail); + } + setverdict(pass); + + } + control{ + + execute(TC_Sem_2303_timer_stop_002()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_003.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_003.ttcn new file mode 100644 index 0000000..34d8839 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_003.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure timer all timer identifier + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/all keyword can be used for timers in component or module control +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow all timer.stop + +module Sem_2303_timer_stop_003 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_Sem_2303_timer_stop_003() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + all timer.stop; + if (t_timer[0].read!=0.0 or t_timer[1].read!=0.0){ + setverdict(fail); + } + setverdict(pass); + + } + control{ + + execute(TC_Sem_2303_timer_stop_003()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_004.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_004.ttcn new file mode 100644 index 0000000..17c0250 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/Sem_2303_timer_stop_004.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure can be stopped after timeout + ** @verdict pass accept, ttcn3verdict:none + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Stopping inactive timer is ok, but unobservable + + +module Sem_2303_timer_stop_004 { + type component TComp{ + timer t_timer := 1.0; + } + altstep a_step() runs on TComp{ + []t_timer.timeout{ + t_timer.stop; + } + } + testcase TC_Sem_2303_timer_stop_004() runs on TComp{ + t_timer.start; + a_step(); + + } + control{ + + execute(TC_Sem_2303_timer_stop_004()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_006.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_006.ttcn new file mode 100644 index 0000000..54dc2e6 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_006.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure timer stop syntax + ** @verdict pass accept, noexecution + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax + +module Syn_2303_timer_stop_006 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Syn_2303_timer_stop_006() runs on TComp{ + t_timer.start; + t_timer.stop; + setverdict(pass); + } + control{ + + execute(TC_Syn_2303_timer_stop_006()) + + + } +} diff --git a/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_007.ttcn b/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_007.ttcn new file mode 100644 index 0000000..de610d8 --- /dev/null +++ b/core_language/23_timer_operations/2303_the_stop_timer_operation/Syn_2303_timer_stop_007.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.3, Ensure all timer stop syntax + ** @verdict pass accept, noexecution + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.3 The Stop timer operation/Timer stop syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow all timer.stop + +module Syn_2303_timer_stop_007 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Syn_2303_timer_stop_007() runs on TComp{ + t_timer.start; + all timer.stop; + setverdict(pass); + + } + control{ + + execute(TC_Syn_2303_timer_stop_007()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_001.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_001.ttcn new file mode 100644 index 0000000..44e2406 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_001.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Timer Read syntax + + +module NegSyn_2304_timer_read_001 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2304_timer_read_001() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + t_timer[].read; + + } + control{ + + execute(TC_NegSyn_2304_timer_read_001()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_002.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_002.ttcn new file mode 100644 index 0000000..4440b60 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Timer Read syntax + + +module NegSyn_2304_timer_read_002 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2304_timer_read_002() runs on TComp{ + var float v_float; + v_float := t_timer read; + + } + control{ + + execute(TC_NegSyn_2304_timer_read_002()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_003.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_003.ttcn new file mode 100644 index 0000000..81bb4f6 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Timer Read syntax + + +module NegSyn_2304_timer_read_003 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2304_timer_read_003() runs on TComp{ + var float v_float; + v_float := read(t_timer); + + } + control{ + + execute(TC_NegSyn_2304_timer_read_003()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_004.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_004.ttcn new file mode 100644 index 0000000..952e11c --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read syntax: disallow any timer.read + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Timer Read syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow any timer.read + +module NegSyn_2304_timer_read_004 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2304_timer_read_004() runs on TComp{ + var float v_float; + v_float := any timer.read; + log ("any timer.read", v_float); + } + control{ + + execute(TC_NegSyn_2304_timer_read_004()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_005.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_005.ttcn new file mode 100644 index 0000000..6f31c79 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/NegSyn_2304_timer_read_005.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Timer Read syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow all timer.read + +module NegSyn_2305_timer_read_005 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2305_timer_read_005() runs on TComp{ + var float v_float; + v_float := all timer.read; + } + control{ + + execute(TC_NegSyn_2305_timer_read_005()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_001.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_001.ttcn new file mode 100644 index 0000000..96b2245 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read result of inactive timer is zero + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Read on an inactive timer returns float zero + + +module Sem_2304_timer_read_001 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Sem_2304_timer_read_001() runs on TComp{ + if (t_timer.read!=0.0){ + setverdict(fail); + stop; + } + t_timer.start; + t_timer.stop; + if (t_timer.read!=0.0){ + setverdict(fail); + } else { + setverdict(pass); + } + + } + control{ + execute(TC_Sem_2304_timer_read_001()) + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_002.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_002.ttcn new file mode 100644 index 0000000..be10b2c --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_002.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read result is non-negative float + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Read returns elapsed time that is non-neg float + + +module Sem_2304_timer_read_002 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Sem_2304_timer_read_002() runs on TComp{ + var float f:=0.0; + t_timer.start; + f:=t_timer.read; + if (f < 0.0){ + setverdict(fail); + } else { + setverdict(pass); + } + } + control{ + + execute(TC_Sem_2304_timer_read_002()) + + + } +} diff --git a/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_003.ttcn b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_003.ttcn new file mode 100644 index 0000000..bc0b690 --- /dev/null +++ b/core_language/23_timer_operations/2304_the_read_timer_operation/Sem_2304_timer_read_003.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.4, Ensure timer read result is non-negative float + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.4 The Read timer operation/Read returns elapsed time that is non-neg float + + +module Sem_2304_timer_read_003 { + type component TComp{ + timer t_aux := 1.0; + timer t_aux2 := 1.05; + timer t_timer := 20.0; + } + testcase TC_Sem_2304_timer_read_003() runs on TComp{ + var float v_elapsed; + + t_aux2.start; + + t_timer.start; + + // wait for 1 second + t_aux.start; + t_aux.timeout; + + v_elapsed:=t_timer.read; + if (v_elapsed < 1.0){ + setverdict(fail); + } else { + setverdict(pass); + } + if (t_aux2.running) { + if (v_elapsed <= 1.05) { + setverdict(pass); + } else { + setverdict(fail); + } + } + } + control{ + + execute(TC_Sem_2304_timer_read_003()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_001.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_001.ttcn new file mode 100644 index 0000000..5baf8d5 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + + +module NegSyn_2305_timer_running_001 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2305_timer_running_001() runs on TComp{ + var boolean v_bool; + v_bool := t_timer running; + } + control{ + + execute(TC_NegSyn_2305_timer_running_001()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_002.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_002.ttcn new file mode 100644 index 0000000..adec549 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + + +module NegSyn_2305_timer_running_002 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2305_timer_running_002() runs on TComp{ + var boolean v_bool; + v_bool := t_timer[].running; + + } + control{ + + execute(TC_NegSyn_2305_timer_running_002()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_003.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_003.ttcn new file mode 100644 index 0000000..8221fa6 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + + +module NegSyn_2305_timer_running_003 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2305_timer_running_003() runs on TComp{ + var boolean v_bool; + v_bool := any timer running; + + } + control{ + + execute(TC_NegSyn_2305_timer_running_003()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_004.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_004.ttcn new file mode 100644 index 0000000..d419e6a --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_004.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + + +module NegSyn_2305_timer_running_004 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2305_timer_running_004() runs on TComp{ + var boolean v_bool; + v_bool := timer.running; + + } + control{ + + execute(TC_NegSyn_2305_timer_running_004()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_005.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_005.ttcn new file mode 100644 index 0000000..5e08d0d --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + + +module NegSyn_2305_timer_running_005 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2305_timer_running_005() runs on TComp{ + var boolean v_bool; + v_bool := timer any.running; + + } + control{ + + execute(TC_NegSyn_2305_timer_running_005()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_006.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_006.ttcn new file mode 100644 index 0000000..9f425ff --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/NegSyn_2305_timer_running_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running syntax: disallow all timer.running + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow all timer.running + +module NegSyn_2305_timer_running_006 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2305_timer_running_006() runs on TComp{ + var boolean v_bool; + v_bool := all timer.running; + + } + control{ + + execute(TC_NegSyn_2305_timer_running_006()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_001.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_001.ttcn new file mode 100644 index 0000000..dc58ef7 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_001.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running any timer identifier works + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/The any keyword may be used to check if any timer started on a component or module control is running + + +module Sem_2305_timer_running_001 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_Sem_2305_timer_running_001() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + all timer.stop; + if (any timer.running){ + setverdict(fail); + stop; + } + setverdict(pass); + + } + control{ + + execute(TC_Sem_2305_timer_running_001()) + + + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_002.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_002.ttcn new file mode 100644 index 0000000..1dba1b8 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running operation works + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/The operation returns the value true if the timer is listed on the running list, false otherwise. + + +module Sem_2305_timer_running_002 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Sem_2305_timer_running_002() runs on TComp{ + t_timer.start; + if (t_timer.running){ + setverdict(pass); + } else { + setverdict(fail); + } + } + control{ + execute(TC_Sem_2305_timer_running_002()) + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_003.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_003.ttcn new file mode 100644 index 0000000..a6a2613 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_003.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running operation works + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/The operation returns the value true if the timer is listed on the running list, false otherwise. + + +module Sem_2305_timer_running_003 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_Sem_2305_timer_running_003() runs on TComp{ + t_timer.start; + t_timer.stop; + if (t_timer.running){ + setverdict(fail); + } else { + setverdict(pass); + } + } + control{ + execute(TC_Sem_2305_timer_running_003()) + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_004.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_004.ttcn new file mode 100644 index 0000000..3273627 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_004.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer running operation works + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/The operation returns the value true if the timer is listed on the running list, false otherwise. +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow any timer.running + +module Sem_2305_timer_running_004 { + type component TComp{ + timer t_timer := 5.0; + } + testcase TC_Sem_2305_timer_running_004() runs on TComp{ + t_timer.start; + if (any timer.running){ + setverdict(pass); + } else { + setverdict(fail, "no timer running"); + } + t_timer.stop; + } + control{ + execute(TC_Sem_2305_timer_running_004()) + } +} diff --git a/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_005.ttcn b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_005.ttcn new file mode 100644 index 0000000..ef25a62 --- /dev/null +++ b/core_language/23_timer_operations/2305_the_running_timer_operation/Sem_2305_timer_running_005.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure that correct number of timers from a timer array is still running + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2305_timer_running_005 { + type component TComp { + timer t_TimerArray[2][2] :={{3.0,3.0}, {5.0,5.0}}; + } + testcase TC_Sem_2305_timer_running_005() runs on TComp { + + var integer v_foundIndex[2]; + for (var integer i := 0; i < lengthof(t_TimerArray); i := i + 1) { + for (var integer j := 0; j < lengthof(t_TimerArray[i]); j := j + 1) { + t_TimerArray[i][j].start; + } + } + t_TimerArray[0][0].stop; + if (any from t_TimerArray.running -> @index value v_foundIndex and v_foundIndex[0] == 0 and v_foundIndex[1] == 1) { + setverdict(pass); + } else { + setverdict(fail, "wrong number of timers running"); + } + } + + control { + execute(TC_Sem_2305_timer_running_005()) + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_001.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_001.ttcn new file mode 100644 index 0000000..8ee8c08 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_001.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax + + +module NegSyn_2306_timer_timeout_001 { + type component TComp{ + timer t_timer[2] := {1.0, 1.0}; + } + testcase TC_NegSyn_2306_timer_timeout_001() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + t_timer[].timeout; + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_001()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_002.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_002.ttcn new file mode 100644 index 0000000..0dca5a8 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_002.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout can`t be used in boolean expressions + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The timeout shall not be used in a boolean expression. + + +module NegSyn_2306_timer_timeout_002 { + type component TComp{ + timer t_timer[2] := {1.0, 1.1}; + } + + testcase TC_NegSyn_2306_timer_timeout_002() runs on TComp{ + t_timer[0].start; + if (t_timer[0].timeout){ + setverdict(fail); + } + setverdict(pass); + + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_002()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_003.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_003.ttcn new file mode 100644 index 0000000..e21f095 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_003.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax + + +module NegSyn_2306_timer_timeout_003 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2306_timer_timeout_003() runs on TComp{ + t_timer.start; + t_timer.timeout(); + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_003()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_004.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_004.ttcn new file mode 100644 index 0000000..dd4e84d --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_004.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax + +module NegSyn_2306_timer_timeout_004 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2306_timer_timeout_004() runs on TComp{ + t_timer.start; + any timer.timeout(); + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_004()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_005.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_005.ttcn new file mode 100644 index 0000000..cd32632 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax + + +module NegSyn_2306_timer_timeout_005 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2306_timer_timeout_005() runs on TComp{ + t_timer.start; + any timer timeout; + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_005()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_006.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_006.ttcn new file mode 100644 index 0000000..fda9480 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_006.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax + + +module NegSyn_2306_timer_timeout_006 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2306_timer_timeout_006() runs on TComp{ + t_timer.start; + timeout(t_timer); + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_006()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_007.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_007.ttcn new file mode 100644 index 0000000..853b222 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/NegSyn_2306_timer_timeout_007.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout syntax + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timer Timeout syntax +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Disallow all timer.timeout + +module NegSyn_2306_timer_timeout_007 { + type component TComp{ + timer t_timer := 1.0; + } + testcase TC_NegSyn_2306_timer_timeout_006() runs on TComp{ + t_timer.start; + all timer.timeout; + + } + control{ + + execute(TC_NegSyn_2306_timer_timeout_006()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_001.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_001.ttcn new file mode 100644 index 0000000..8bd4315 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_001.ttcn @@ -0,0 +1,33 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout operations: non-started timer does not timeout + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timeout operational semantics/Timeout unstarted timer + + +module Sem_2306_timer_timeout_001 { + type component TComp{ + timer t_unstarted_timer; + timer t_started_timer := 2.0; + } + testcase TC_Sem_2306_timer_timeout_001() runs on TComp{ + t_started_timer.start; + alt + { + [] t_unstarted_timer.timeout { + setverdict(fail); + } + [] t_started_timer.timeout { + setverdict(pass); + } + } + } + control{ + + execute(TC_Sem_2306_timer_timeout_001()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_002.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_002.ttcn new file mode 100644 index 0000000..f89be2f --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_002.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout operations: timed-out timer does not timeout until restarted + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timeout operational semantics/Timeout a timer that is already timed out + + +module Sem_2306_timer_timeout_002 { + type component TComp{ + timer t_timedout_timer := 0.5; + timer t_aux := 2.0; + } + testcase TC_Sem_2306_timer_timeout_002() runs on TComp{ + t_timedout_timer.start; + t_timedout_timer.timeout ; + + t_aux.start; + alt + { + [] t_timedout_timer.timeout { + setverdict(fail); + } + [] t_aux.timeout { + setverdict(pass); + } + } + } + control{ + + execute(TC_Sem_2306_timer_timeout_002()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_003.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_003.ttcn new file mode 100644 index 0000000..490980f --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_003.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout happen in order from the shortest to the longest + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/Timeout operational semantics/Timeout started timer +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The timeout can be used as alternative in alt + +module Sem_2306_timer_timeout_003 { + type component TComp{ + timer t_short, t_medium, t_long; + } + testcase TC_Sem_2306_timer_timeout_003() runs on TComp{ + t_long.start(3.0); + t_medium.start(2.0); + t_short.start(1.0); + + alt + { + [] t_long.timeout { + setverdict(fail, + "Timer started for 3 seconds expired earlier than the timer started for 1 second"); + stop; + } + [] t_medium.timeout { + setverdict(fail, + "Timer started for 2 seconds expired earlier than the timer started for 1 second"); + stop; + } + [] t_short.timeout { + setverdict(pass); + } + } + alt + { + [] t_long.timeout { + setverdict(fail, + "Timer started for 3 seconds expired earlier than the timer started for 2 second"); + stop; + } + [] t_medium.timeout { + setverdict(pass); + } + } + t_long.timeout; + } + control{ + + execute(TC_Sem_2306_timer_timeout_003()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_004.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_004.ttcn new file mode 100644 index 0000000..2a8366e --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure any timer.timeout operation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation//Requirements/23 Timer operations/23.6 The Timeout operation/The any keyword used with the timeout operation succeeds if the timeout-list is not empty./Wait for timers in scope of the alt +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The any keyword used with the timeout operation succeeds if the timeout-list is not empty./Wait for timers in scope of the alt +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow any timer.timeout + + +module Sem_2306_timer_timeout_004 { + type component TComp{ + timer t_timer[2] := {1.0, 1.1}; + } + altstep a_step() runs on TComp{ + [] any timer.timeout { + setverdict(pass); + } + } + testcase TC_Sem_2306_timer_timeout_004() runs on TComp{ + t_timer[0].start; + t_timer[1].start; + a_step(); + a_step(); + if (t_timer[0].running or t_timer[1].running){ + setverdict(fail); + } + setverdict(pass); + } + control{ + + execute(TC_Sem_2306_timer_timeout_004()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_005.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_005.ttcn new file mode 100644 index 0000000..8331e53 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_005.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure any timer.timeout operation for timeouts that are not in scope + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The any keyword used with the timeout operation succeeds if the timeout-list is not empty./Any timer ignores timeouts in other components +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow any timer.timeout + +module Sem_2306_timer_timeout_005 { + const float PTC_TIMEOUT := 1.0; + + type port MyPort message { inout charstring }; + + type component System {} + + type component MTC { + port MyPort signalPort; + } + + type component PTC { + port MyPort signalPort; + } + function f_wait_for_mtc_timeout() runs on PTC + { + timer t_timer := PTC_TIMEOUT; + t_timer.start; + + alt { + [] signalPort.receive { + // any timer.timeout happend in MTC + setverdict(fail, "MTC detected timeout happened in PTC -- it is wrong!"); + } + [] t_timer.timeout { + setverdict(pass); + signalPort.send("I'm timed out!"); + } + } + } + + altstep a_step() runs on MTC { + [] any timer.timeout { + setverdict(fail, "MTC detected timeout happened in PTC -- it is wrong!"); + signalPort.send("I saw your timeout?"); + } + [] signalPort.receive { + // PTC timer out + setverdict(pass); + } + } + + testcase TC_Sem_2306_timer_timeout_005() runs on MTC system System{ + var PTC ptc := PTC.create; + connect(ptc:signalPort, mtc:signalPort); + ptc.start(f_wait_for_mtc_timeout()); + + a_step(); + } + control{ + + execute(TC_Sem_2306_timer_timeout_005()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_006.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_006.ttcn new file mode 100644 index 0000000..88d639f --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_006.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure any timer.timeout operation handles timeout of any timer in the component, not only visible from a function or altstep + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The any keyword used with the timeout operation succeeds if the timeout-list is not empty./Wait for timers that are outside of scope +// #reqname /Requirements/23 Timer operations/23.7 Summary of use of any and all with timers/Allow any timer.timeout + +module Sem_2306_timer_timeout_006 { + const float PTC_TIMEOUT := 5.0; + + type port MyPort message { inout charstring }; + + type component System {} + + type component MTC { + port MyPort signalPort; + } + + type component PTC { + port MyPort signalPort; + } + function f_ptc1() runs on PTC + { + timer t_timer := PTC_TIMEOUT; + t_timer.start; + + t_timer.timeout; + setverdict(fail, "The component was expected to be killed before this point"); + signalPort.send("I'm timed out!"); + } + + altstep a_step() runs on MTC { + [] any timer.timeout { + setverdict(pass); + } + [] signalPort.receive { + // PTC timer out + setverdict(fail, "Any timer.timeout failed to see the timer outside altstep scope"); + } + } + + testcase TC_Sem_2306_timer_timeout_006() runs on MTC system System{ + var PTC ptc := PTC.create; + timer t_timer; + connect(ptc:signalPort, mtc:signalPort); + ptc.start(f_ptc1()); + + // Start a timer outside of the scope of a_step + t_timer.start(1.0); + a_step(); + ptc.kill; + } + control{ + + execute(TC_Sem_2306_timer_timeout_006()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_007.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_007.ttcn new file mode 100644 index 0000000..ec2ca88 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_007.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure timer timeout happen in order from the shortest to the longest + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.6 The Timeout operation/The timeout can be used as a standalone statement + +module Sem_2306_timer_timeout_007 { + type component TComp{ + timer t_short, t_medium, t_long; + } + testcase TC_Sem_2306_timer_timeout_007() runs on TComp{ + t_long.start(3.0); + t_medium.start(2.0); + t_short.start(1.0); + + t_medium.timeout; + if (t_short.running) + { + setverdict(fail, "The timer has expired too early"); + stop; + } + if (not t_long.running) + { + setverdict(fail, "The timer has expired too late"); + stop; + } + setverdict(pass); + } + control{ + + execute(TC_Sem_2306_timer_timeout_007()) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_008.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_008.ttcn new file mode 100644 index 0000000..7cb1f57 --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_008.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470, corrected by STF 487 + ** @version 0.0.1 + ** @purpose 1:23.6, Ensure that timeout of a timer from a timer array works correctly + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2306_timer_timeout_008 { + type component TComp{ + timer t_TimerArray[2][2] :={{0.5, 1.0}, {5.0, 5.5}}; + } + testcase TC_Sem_2306_timer_timeout_008() runs on TComp{ + var integer v_foundIndex[2]; + for (var integer i := 0; i < lengthof(t_TimerArray); i := i + 1) { + for (var integer j := 0; j < lengthof(t_TimerArray[i]); j := j + 1) { + t_TimerArray[i][j].start; + } + } + t_TimerArray[0][0].stop; + + any from t_TimerArray.timeout -> @index value v_foundIndex; + if(v_foundIndex[0] == 0 and v_foundIndex[1] == 1){ + setverdict(pass); + } else { + setverdict(fail, "wrong number of timers with timeout"); + } + + } + control{ + + execute(TC_Sem_2306_timer_timeout_008(), 5.0) + + + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_009.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_009.ttcn new file mode 100644 index 0000000..1a5d99f --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Sem_2306_timer_timeout_009.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:23.6, removing random timeout when using any timer.timeout + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2306_timer_timeout_009 { + + type component TComp{ + timer t_tmr := 0.5; + } + + testcase TC_Sem_2306_timer_timeout_009() runs on TComp{ + t_tmr.start; + any timer.timeout; // it should remove t_tmr timeout from the timeout table + alt { + [] t_tmr.timeout { setverdict(fail, "Timeout not removed by any timer.timeout"); } + [else] { setverdict(pass); } + } + } + + control { + execute(TC_Sem_2306_timer_timeout_009(), 5.0) + } +} diff --git a/core_language/23_timer_operations/2306_the_timeout_operation/Syn_2306_timer_timeout_001.ttcn b/core_language/23_timer_operations/2306_the_timeout_operation/Syn_2306_timer_timeout_001.ttcn new file mode 100644 index 0000000..994515e --- /dev/null +++ b/core_language/23_timer_operations/2306_the_timeout_operation/Syn_2306_timer_timeout_001.ttcn @@ -0,0 +1,42 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23.5, Ensure timer runnig syntax + ** @verdict pass accept, noexecution + ***************************************************/ +// #reqname /Requirements/23 Timer operations/23.5 The Running timer operation/Timer running syntax + +module Syn_2306_timer_timeout_001 +{ + type component TComp {} + + testcase TC_Syn_2306_timer_timeout_001() runs on TComp + { + var boolean v_bool; + timer t_timer := 0.1; + timer t_array[3] := { 1.0, 2.0, 3.0 } + + t_timer.start; + if (t_timer.running) + { + t_array[0].start; + if (t_array[0].running) + { + v_bool := t_array[1].running; + } + } + + v_bool := any timer.running; + if (any timer.running and true) + { + } + if (not any timer.running) + { + } + } + + control{ + execute(TC_Syn_2306_timer_timeout_001()) + } + +} diff --git a/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_001.ttcn b/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_001.ttcn new file mode 100644 index 0000000..4c90eed --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_001.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer operations are not allowed outside of module control, test case, function, altstep + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Timer read is not allowed in component definitions +module NegSem_23_toplevel_001 +{ + type component TComp + { + timer t_timer1 := 1.0; + timer t_timer2 := t_timer1.read; + } + + testcase TC_NegSem_23_toplevel_001() runs on TComp + { + log("Value of t_timer2.read before starting it", t_timer2.read); + } + + control + { + execute(TC_NegSem_23_toplevel_001()) + } +} diff --git a/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_002.ttcn b/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_002.ttcn new file mode 100644 index 0000000..ee99331 --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/NegSem_23_toplevel_002.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer operations are not allowed outside of module control, test case, function, altstep + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Timer running is not allowed in component definitions +module NegSem_23_toplevel_002 +{ + type component TComp + { + timer t_timer1 := 1.0; + var boolean v_bool := t_timer1.running; + } + + testcase TC_NegSem_23_toplevel_002() runs on TComp + { + log("Value of timer.running before starting it", v_bool); + } + + control + { + execute(TC_NegSem_23_toplevel_002()) + } +} diff --git a/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_001.ttcn b/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_001.ttcn new file mode 100644 index 0000000..d12f2bd --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_001.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer operations are not allowed outside of module control, test case, function, altstep + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Timer stop is not allowed in module definitions + +module NegSyn_23_toplevel_001 +{ + all timer.stop; +} diff --git a/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_002.ttcn b/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_002.ttcn new file mode 100644 index 0000000..9039ca2 --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/NegSyn_23_toplevel_002.ttcn @@ -0,0 +1,12 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer operations are not allowed outside of module control, test case, function, altstep + ** @verdict pass reject + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Timer timeout operation is not allowed in module definitions + +module NegSyn_23_toplevel_002 +{ + any timer.timeout; +} diff --git a/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_001.ttcn b/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_001.ttcn new file mode 100644 index 0000000..dcd826f --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_001.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer allowed in module control, test case, function, altstep + ** @verdict pass accept, noexecution + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Positive syntax test + +module Syn_23_toplevel_001 +{ + type port MyPort message + { + inout integer; + } + + type component TComp + { + port MyPort p_port; + } + + function f_function() + { + var float v_float; + timer t_timer; + + t_timer.start(1.0); + v_float := t_timer.read; + if (t_timer.running) + { + t_timer.timeout; + } + t_timer.stop; + } + + altstep a_step() runs on TComp + { + [] p_port.receive { + var float v_float; + timer t_timer; + + t_timer.start(1.0); + v_float := t_timer.read; + if (t_timer.running) + { + t_timer.timeout; + } + t_timer.stop; + } + } + + testcase TC_Syn_23_toplevel_001() runs on TComp + { + var float v_float; + timer t_timer; + + t_timer.start(1.0); + v_float := t_timer.read; + if (t_timer.running) + { + t_timer.timeout; + } + t_timer.stop; + } + + control + { + var float v_float; + timer t_timer; + + t_timer.start(1.0); + v_float := t_timer.read; + if (t_timer.running) + { + t_timer.timeout; + } + t_timer.stop; + } +} diff --git a/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_002.ttcn b/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_002.ttcn new file mode 100644 index 0000000..f58b825 --- /dev/null +++ b/core_language/23_timer_operations/23_toplevel/Syn_23_toplevel_002.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:23, Ensure timer allowed in module control, test case, function, altstep + ** @verdict pass accept, noexecution + ***************************************************/ +// #reqname /Requirements/23 Timer operations/Usage of timers is allowed in test cases, functions, altsteps, module control/Positive syntax test + +module Syn_23_toplevel_002 +{ + type port MyPort message + { + inout integer; + } + + type component TComp + { + port MyPort p_port; + } + + function f_function() + { + var float v_float; + timer t_timer[5] := {1.0, 2.0, 3.0, 4.0, 5.0}; + + t_timer[0].start(1.0); + v_float := t_timer[1].read; + if (t_timer[2].running) + { + t_timer[3].timeout; + } + t_timer[4].stop; + } + + altstep a_step() runs on TComp + { + timer t_timer[5] := {1.0, 2.0, 3.0, 4.0, 5.0}; + [] p_port.receive { + var float v_float; + + t_timer[0].start(1.0); + v_float := t_timer[1].read; + if (t_timer[2].running) + { + t_timer[3].timeout; + } + t_timer[4].stop; + } + } + + testcase TC_Syn_23_toplevel_002() runs on TComp + { + var float v_float; + timer t_timer[5] := {1.0, 2.0, 3.0, 4.0, 5.0}; + + t_timer[0].start(1.0); + v_float := t_timer[1].read; + if (t_timer[2].running) + { + t_timer[3].timeout; + } + t_timer[4].stop; + } + + control + { + var float v_float; + timer t_timer[5] := {1.0, 2.0, 3.0, 4.0, 5.0}; + + t_timer[0].start(1.0); + v_float := t_timer[1].read; + if (t_timer[2].running) + { + t_timer[3].timeout; + } + t_timer[4].stop; + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NOTES b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NOTES new file mode 100644 index 0000000..05f826b --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NOTES @@ -0,0 +1,11 @@ +Tests Sem_2401_GlobalVerdict_xxx validate the following requirements: + there is a global test case verdict instantiated and handled by the test system that is + updated when each test component (i.e. the MTC and each and every PTC) + terminates execution (see figure 14). + ... The test case verdict is implicitly updated on the termination of a test + component. The effect of this implicit operation shall also follow the overwriting rules listed in table 30 + ... The value of this verdict shall be returned by the test case when it terminates execution. + +Tests Sem_2401_LocalVerdict_xxx validate the following requirements: + When changing the value of the local verdict (i.e. using the setverdict operation) the effect of this change shall + follow the overwriting rules listed in table 30. diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NegSem_2401_SetverdictError.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NegSem_2401_SetverdictError.ttcn new file mode 100644 index 0000000..96de84f --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/NegSem_2401_SetverdictError.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.1, Ensure that setverdict can't set error verdict + ** @verdict pass reject, manual:"Ensure only one test case was executed " + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Error verdict shall not be set with setverdict + **/ + +module NegSem_2401_SetverdictError_001 { + type component GeneralComp {}; + + testcase TC_NegSem_2401_SetverdictError_001_setverdict(out boolean pb_error_occurred) runs on GeneralComp { + pb_error_occurred := true; + setverdict(error); + // Must abort here + pb_error_occurred := false; + setverdict(pass) + } + + testcase TC_NegSem_2401_SetverdictError_001_check_error_occured(boolean b_error_occurred) runs on GeneralComp { + if (b_error_occurred) { + setverdict(pass); + } else { + setverdict(fail) + } + } + + control { + var boolean b_error_occurred := true; + execute(TC_NegSem_2401_SetverdictError_001_setverdict(b_error_occurred)); + execute(TC_NegSem_2401_SetverdictError_001_check_error_occured(b_error_occurred)); + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_001.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_001.ttcn new file mode 100644 index 0000000..a921529 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: pass can overwrite none. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_001 { + type component GeneralComp {} + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_2401_GlobalVerdict_001() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_none()); + PTC2.start(set_PTC_verdict_pass()); + all component.done; + // Verdict pass can overwrite none + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_001()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_002.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_002.ttcn new file mode 100644 index 0000000..6869d3b --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_002.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: inconc can overwrite none. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_002 { + type component GeneralComp {} + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + testcase TC_Sem_2401_GlobalVerdict_002() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_none()); + PTC2.start(set_PTC_verdict_inconc()); + all component.done; + // Verdict inconc can overwrite none + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_002()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_003.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_003.ttcn new file mode 100644 index 0000000..c0708a1 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_003.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: fail can overwrite none. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_003 { + type component GeneralComp {} + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + testcase TC_Sem_2401_GlobalVerdict_003() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_none()); + PTC2.start(set_PTC_verdict_fail()); + all component.done; + // Verdict fail can overwrite none + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_003()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_004.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_004.ttcn new file mode 100644 index 0000000..db5128e --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_004.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: none can't overwrite pass. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_004 { + type component GeneralComp {} + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + testcase TC_Sem_2401_GlobalVerdict_004() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_pass()); + PTC2.start(set_PTC_verdict_none()); + all component.done; + // Verdict none can't overwrite pass + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_004()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_005.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_005.ttcn new file mode 100644 index 0000000..b52e930 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: inconc can overwrite pass. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_005 { + type component GeneralComp {} + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + testcase TC_Sem_2401_GlobalVerdict_005() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_pass()); + PTC2.start(set_PTC_verdict_inconc()); + all component.done; + // Verdict inconc can overwrite pass + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_005()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_006.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_006.ttcn new file mode 100644 index 0000000..c022fed --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_006.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: fail can overwrite pass. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_006 { + type component GeneralComp {} + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + testcase TC_Sem_2401_GlobalVerdict_006() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_pass()); + PTC2.start(set_PTC_verdict_fail()); + all component.done; + // Verdict fail can overwrite pass + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_006()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_007.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_007.ttcn new file mode 100644 index 0000000..38f2859 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_007.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: none can't overwrite inconc. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_007 { + type component GeneralComp {} + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + testcase TC_Sem_2401_GlobalVerdict_007() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_inconc()); + PTC2.start(set_PTC_verdict_none()); + all component.done; + // Verdict none can't overwrite inconc + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_007()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_008.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_008.ttcn new file mode 100644 index 0000000..da5a596 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_008.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: pass can't overwrite inconc. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_008 { + type component GeneralComp {} + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_2401_GlobalVerdict_008() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_inconc()); + PTC2.start(set_PTC_verdict_pass()); + all component.done; + // Verdict pass can't overwrite inconc + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_008()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_009.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_009.ttcn new file mode 100644 index 0000000..7f63fb1 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_009.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: fail can overwrite inconc. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_009 { + type component GeneralComp {} + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + testcase TC_Sem_2401_GlobalVerdict_009() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_inconc()); + PTC2.start(set_PTC_verdict_fail()); + all component.done; + // Verdict fail can overwrite inconc + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_009()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_010.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_010.ttcn new file mode 100644 index 0000000..6015e73 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_010.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: none can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_010 { + type component GeneralComp {} + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + function set_PTC_verdict_none() runs on GeneralComp { + setverdict(none); + } + + testcase TC_Sem_2401_GlobalVerdict_010() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_fail()); + PTC2.start(set_PTC_verdict_none()); + all component.done; + // Verdict none can't overwrite fail + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_010()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_011.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_011.ttcn new file mode 100644 index 0000000..ebf94cf --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_011.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: pass can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_011 { + type component GeneralComp {} + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + function set_PTC_verdict_pass() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_2401_GlobalVerdict_011() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_fail()); + PTC2.start(set_PTC_verdict_pass()); + all component.done; + // Verdict pass can't overwrite fail + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_011()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_012.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_012.ttcn new file mode 100644 index 0000000..dda5e55 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_GlobalVerdict_012.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for global verdict: inconc can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ + + +module Sem_2401_GlobalVerdict_012 { + type component GeneralComp {} + + function set_PTC_verdict_fail() runs on GeneralComp { + setverdict(fail); + } + + function set_PTC_verdict_inconc() runs on GeneralComp { + setverdict(inconc); + } + + testcase TC_Sem_2401_GlobalVerdict_012() runs on GeneralComp system GeneralComp { + var GeneralComp PTC1, PTC2; + + PTC1 := GeneralComp.create; + PTC2 := GeneralComp.create; + PTC1.start(set_PTC_verdict_fail()); + PTC2.start(set_PTC_verdict_inconc()); + all component.done; + // Verdict inconc can't overwrite fail + } + + control{ + execute(TC_Sem_2401_GlobalVerdict_012()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_InitiallyNone_001.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_InitiallyNone_001.ttcn new file mode 100644 index 0000000..33a0649 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_InitiallyNone_001.ttcn @@ -0,0 +1,27 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.1, Ensure that local verdicts initializes with none + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Local verdict is initialized with none + **/ + + +module Sem_2401_InitiallyNone_001 { + type component GeneralComp {} + + testcase TC_Sem_2401_InitiallyNone_001() runs on GeneralComp { + var verdicttype b_verdict := getverdict; + if (b_verdict == none) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_2401_InitiallyNone_001()); + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_001.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_001.ttcn new file mode 100644 index 0000000..08c845e --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_001.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: pass can overwrite none. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_001 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_001() runs on GeneralComp { + setverdict(none); + setverdict(pass); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_001()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_002.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_002.ttcn new file mode 100644 index 0000000..62b40ed --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: inconc can overwrite none. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_002 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_002() runs on GeneralComp { + setverdict(none); + setverdict(inconc); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_002()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_003.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_003.ttcn new file mode 100644 index 0000000..78aca87 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_003.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: fail can overwrite none. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_003 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_003() runs on GeneralComp { + setverdict(none); + setverdict(fail); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_003()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_004.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_004.ttcn new file mode 100644 index 0000000..31831fe --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_004.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: none can't overwrite pass. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_004 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_004() runs on GeneralComp { + setverdict(pass); + setverdict(none); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_004()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_005.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_005.ttcn new file mode 100644 index 0000000..709e299 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_005.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: inconc can overwrite pass. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_005 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_005() runs on GeneralComp { + setverdict(pass); + setverdict(inconc); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_005()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_006.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_006.ttcn new file mode 100644 index 0000000..2f503c1 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_006.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: fail can overwrite pass. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_006 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_006() runs on GeneralComp { + setverdict(pass); + setverdict(fail); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_006()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_007.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_007.ttcn new file mode 100644 index 0000000..92da45d --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_007.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: none can't overwrite inconc. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_007 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_007() runs on GeneralComp { + setverdict(inconc); + setverdict(none); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_007()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_008.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_008.ttcn new file mode 100644 index 0000000..6de881c --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_008.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: pass can't overwrite inconc. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_008 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_008() runs on GeneralComp { + setverdict(inconc); + setverdict(pass); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_008()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_009.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_009.ttcn new file mode 100644 index 0000000..4ead154 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_009.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: fail can overwrite inconc. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_009 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_009() runs on GeneralComp { + setverdict(inconc); + setverdict(fail); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_009()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_010.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_010.ttcn new file mode 100644 index 0000000..320539b --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_010.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: none can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_010 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_010() runs on GeneralComp { + setverdict(fail); + setverdict(none); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_010()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_011.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_011.ttcn new file mode 100644 index 0000000..8897407 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_011.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: pass can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_011 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_011() runs on GeneralComp { + setverdict(fail); + setverdict(pass); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_011()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_012.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_012.ttcn new file mode 100644 index 0000000..022d63e --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Sem_2401_LocalVerdict_012.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.1, Ensure overwriting rules for local verdict: inconc can't overwrite fail. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Overwriting rules for setverdict + **/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/The value of the local verdict is changed with the setverdict operation. + **/ + + +module Sem_2401_LocalVerdict_012 { + type component GeneralComp {} + + testcase TC_Sem_2401_LocalVerdict_012() runs on GeneralComp { + setverdict(fail); + setverdict(inconc); + + // The verdict is evaluated by the validation tool according to @verdict header + } + + control{ + execute(TC_Sem_2401_LocalVerdict_012()); + } +} diff --git a/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Syn_2401_FiveValues_001.ttcn b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Syn_2401_FiveValues_001.ttcn new file mode 100644 index 0000000..840c011 --- /dev/null +++ b/core_language/24_test_verdict_operations/2401_the_verdict_mechanism/Syn_2401_FiveValues_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.1, Ensure that there are five values of verdicttype + ** @verdict pass accept, noexecution + *****************************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.1 The Verdict mechanism/Five different values of verdict + **/ + + +module Syn_2401_FiveValues_001 { + control { + var verdicttype v_v; + + v_v := none; + v_v := pass; + v_v := inconc; + v_v := fail; + v_v := error; + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_001.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_001.ttcn new file mode 100644 index 0000000..c29e98a --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts parameters of verdicttype only + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Setverdict allowed verdict values + **/ + +module NegSem_2402_setverdict_params_001 { + type component TComp {} + + testcase TC_NegSem_2402_setverdict_params_001() runs on TComp { + var charstring v_pass := "pass"; + setverdict(v_pass); + } + + control { + execute(TC_NegSem_2402_setverdict_params_001()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_002.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_002.ttcn new file mode 100644 index 0000000..04d0125 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_002.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts parameters of verdicttype only + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Setverdict allowed verdict values + **/ + + +module NegSem_2402_setverdict_params_002 { + type component TComp {} + type record TRec { verdicttype field1 } + + testcase TC_NegSem_2402_setverdict_params_002() runs on TComp { + var TRec v_pass := { field1 := pass }; + setverdict(v_pass); + } + + control { + execute(TC_NegSem_2402_setverdict_params_002()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_003.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_003.ttcn new file mode 100644 index 0000000..ddb09cc --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_003.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:24, Ensure setverdict accepts values of verdicttype only + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Setverdict allowed verdict values + **/ + +module NegSem_2402_setverdict_params_003 { + type component TComp {} + + testcase TC_NegSem_2402_setverdict_params_003() runs on TComp { + var template verdicttype v_pass := ( pass, fail ); + setverdict(v_pass); + } + + control { + execute(TC_NegSem_2402_setverdict_params_003()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_004.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_004.ttcn new file mode 100644 index 0000000..23e2755 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_004.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts values only as the parameter + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Setverdict allowed verdict values + **/ + +module NegSem_2402_setverdict_params_004 { + type component TComp {} + + testcase TC_NegSem_2402_setverdict_params_004() runs on TComp { + var template verdicttype v_pass := ?; + setverdict(v_pass); + } + + control { + execute(TC_NegSem_2402_setverdict_params_004()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_005.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_005.ttcn new file mode 100644 index 0000000..d1c7676 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/NegSem_2402_setverdict_params_005.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts values only as the parameter + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Setverdict allowed verdict values + **/ + +module NegSem_2402_setverdict_params_005 { + type component TComp {} + + testcase TC_NegSem_2402_setverdict_params_005() runs on TComp { + var anytype v_var := { integer := 1 }; + setverdict(v_var.verdicttype); + } + + control { + execute(TC_NegSem_2402_setverdict_params_005()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_logging_001.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_logging_001.ttcn new file mode 100644 index 0000000..e1f7aab --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_logging_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure logging constraints + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/For FreeText and TemplateInstance, the same rules and restrictions apply as for the parameters of the log statement. + **/ + +module Sem_2402_setverdict_logging_001 { + type component TComp {} + + testcase TC_Sem_2402_setverdict_logging_001() runs on TComp { + var integer v_uninitialized ; + setverdict(pass, "Uninitialized variable", v_uninitialized); + } + + control { + execute(TC_Sem_2402_setverdict_logging_001()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_001.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_001.ttcn new file mode 100644 index 0000000..2605d67 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_001.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts values only as the parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Optional setverdict parameters + **/ + +module Sem_2402_setverdict_params_001 { + type component TComp {} + + testcase TC_Sem_2402_setverdict_params_001() runs on TComp { + var anytype v_var := { verdicttype := pass }; + setverdict(v_var.verdicttype); + } + + control { + execute(TC_Sem_2402_setverdict_params_001()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_002.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_002.ttcn new file mode 100644 index 0000000..1e76aa9 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_002.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict accepts values only as the parameter + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Optional setverdict parameters + **/ + +module Sem_2402_setverdict_params_002 { + type component TComp {} + + testcase TC_Sem_2402_setverdict_params_002() runs on TComp { + var template verdicttype v_pass := pass; + setverdict(valueof(v_pass)); + } + + control { + execute(TC_Sem_2402_setverdict_params_002()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_003.ttcn b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_003.ttcn new file mode 100644 index 0000000..21b8675 --- /dev/null +++ b/core_language/24_test_verdict_operations/2402_the_setverdict_operation/Sem_2402_setverdict_params_003.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure logging constraints + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.2 The Setverdict operation/Optional setverdict parameters + **/ + +module Sem_2402_setverdict_params_003 { + type component TComp {} + + testcase TC_Sem_2402_setverdict_params_003() runs on TComp { + var template verdicttype v_pass := pass; + setverdict(valueof(v_pass)); + } + + control { + execute(TC_Sem_2402_setverdict_params_003()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_001.ttcn b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_001.ttcn new file mode 100644 index 0000000..d066123 --- /dev/null +++ b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_001.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.3, Ensure getverdict returns the actual verdict none + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// #reqname /Requirements/24 Test verdict operations/24.3 The Getverdict operation/Getverdict returns local verdict value + +module Sem_2403_getverdict_001 { + type component TComp {} + + testcase TC_Sem_2403_getverdict_001() runs on TComp { + var verdicttype v_verdict; + setverdict(none); + v_verdict := getverdict; + if (v_verdict == none) + { + setverdict(pass) + } + else + { + setverdict(fail); + } + } + + control { + execute(TC_Sem_2403_getverdict_001()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_002.ttcn b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_002.ttcn new file mode 100644 index 0000000..8027f22 --- /dev/null +++ b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_002.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.3, Ensure getverdict returns the actual verdict inconc + ** @verdict pass accept, ttcn3verdict:inconc + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.3 The Getverdict operation/Getverdict returns local verdict value + **/ + +module Sem_2403_getverdict_002 { + type component TComp {} + + testcase TC_Sem_2403_getverdict_002() runs on TComp { + var verdicttype v_verdict; + setverdict(inconc); + v_verdict := getverdict; + if (v_verdict != inconc) + { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_2403_getverdict_002()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_003.ttcn b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_003.ttcn new file mode 100644 index 0000000..8ef25b2 --- /dev/null +++ b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_003.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.3, Ensure getverdict returns the actual verdict pass + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.3 The Getverdict operation/Getverdict returns local verdict value + **/ + +module Sem_2403_getverdict_003 { + type component TComp {} + + testcase TC_Sem_2403_getverdict_003() runs on TComp { + var verdicttype v_verdict; + setverdict(pass); + v_verdict := getverdict; + if (v_verdict == pass) + { + setverdict(pass) + } + else + { + setverdict(fail); + } + } + + control { + execute(TC_Sem_2403_getverdict_003()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_004.ttcn b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_004.ttcn new file mode 100644 index 0000000..a71f4b3 --- /dev/null +++ b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_004.ttcn @@ -0,0 +1,28 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24.3, Ensure getverdict returns the actual verdict fail + ** @verdict pass accept, ttcn3verdict:error + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.3 The Getverdict operation/Getverdict returns local verdict value + **/ + +module Sem_2403_getverdict_004 { + type component TComp {} + + testcase TC_Sem_2403_getverdict_004() runs on TComp { + var verdicttype v_verdict; + setverdict(fail); + v_verdict := getverdict; + if (v_verdict == fail) + { + // Set error verdict + testcase.stop; + } + } + + control { + execute(TC_Sem_2403_getverdict_004()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_005.ttcn b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_005.ttcn new file mode 100644 index 0000000..5a7f221 --- /dev/null +++ b/core_language/24_test_verdict_operations/2403_the_getverdict_operation/Sem_2403_getverdict_005.ttcn @@ -0,0 +1,31 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24.3, Ensure getverdict none for uninitialized verdict + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/24.3 The Getverdict operation/Getverdict returns local verdict value/Getverdict returns none for uninitialized verdict + **/ + +module Sem_2403_getverdict_005 { + type component TComp {} + + testcase TC_Sem_2403_getverdict_005() runs on TComp { + var verdicttype v_verdict; + v_verdict := getverdict; + if (v_verdict != none) + { + // Set error verdict + testcase.stop; + } + else + { + setverdict(pass); + } + } + + control { + execute(TC_Sem_2403_getverdict_005()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_001.ttcn b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_001.ttcn new file mode 100644 index 0000000..9e95f00 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:24, Ensure getverdict is not allowed in constant initialization in control part + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions. + **/ + +module NegSem_24_toplevel_001 { + // This should be syntactically correct since BNF does not restrict initialization expression + const verdicttype c_verdict := getverdict; + + type component GeneralComp {} + + testcase TC_NegSem_24_toplevel_001 (verdicttype v_verdict) runs on GeneralComp{ + setverdict(pass) + } + + control { + execute(TC_NegSem_24_toplevel_001(c_verdict)); + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_002.ttcn b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_002.ttcn new file mode 100644 index 0000000..e3a3a77 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_002.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure getverdict is not allowed in parameter initialization in control part. + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions. + **/ + +module NegSem_24_toplevel_002 { + type component GeneralComp {} + + testcase TC_NegSem_24_toplevel_002(verdicttype v_param) runs on GeneralComp { + setverdict(fail); + } + + control { + // BNF allows getverdict in expression -- this is a semantic test + execute(TC_NegSem_24_toplevel_002(getverdict)); + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_003.ttcn b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_003.ttcn new file mode 100644 index 0000000..1659e32 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_003.ttcn @@ -0,0 +1,22 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure getverdict is not allowed in variable definition in control part. + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions. + **/ + +module NegSem_24_toplevel_003 { + type component GeneralComp {} + + testcase TC_NegSem_24_toplevel_003(verdicttype v_param) runs on GeneralComp { + setverdict(fail); + } + + control { + var verdicttype v_verdict := getverdict; + execute(TC_NegSem_24_toplevel_003()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_004.ttcn b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_004.ttcn new file mode 100644 index 0000000..b234ccc --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_004.ttcn @@ -0,0 +1,26 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.2 + ** @purpose 1:24, Ensure setverdict is not allowed in part whithin compound statement. + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions. + **/ + +module NegSem_24_toplevel_004 { + type component GeneralComp {} + + testcase TC_NegSem_24_toplevel_004() runs on GeneralComp { + setverdict(fail); + } + + + control { + if (true) { + // It is allowed by BNF: ControlStatement -> BasicStatements -> ConditionalConstruct -> StatementBlock => SetLocalVerdict + setverdict(pass); + } + execute(TC_NegSem_24_toplevel_004()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_005.ttcn b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_005.ttcn new file mode 100644 index 0000000..88ee972 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/NegSem_24_toplevel_005.ttcn @@ -0,0 +1,25 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.2 + ** @purpose 1:24, Ensure setverdict is not allowed in control part at the top level. + ** @verdict pass reject + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions. + **/ + +module NegSem_24_toplevel_005 { + type component GeneralComp {} + + testcase TC_NegSem_24_toplevel_005() runs on GeneralComp { + setverdict(fail); + } + + + control { + // TODO Check with grammar if it is allowed + // At least grammar allowes it in compound statements + setverdict(pass); + execute(TC_NegSem_24_toplevel_005()) + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_001.ttcn b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_001.ttcn new file mode 100644 index 0000000..1e94916 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_001.ttcn @@ -0,0 +1,32 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict and getverdict are allowed in functions + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions./Setverdict locations/Setverdict in functions allowed + **/ + +module Syn_24_toplevel_001 { + function f_test_setverdict() { + setverdict(none); + setverdict(pass); + setverdict(inconc); + setverdict(fail); + } + + function f_test_variable_assignment() { + var verdicttype v_verdict; + + v_verdict := getverdict; + } + + function f_test_return_getverdict() return verdicttype { + return getverdict; + } + + function f_test_const_init() { + const verdicttype c_v := getverdict; + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_002.ttcn b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_002.ttcn new file mode 100644 index 0000000..08203bf --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_002.ttcn @@ -0,0 +1,30 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict and getverdict are allowed in test cases + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions./Setverdict locations/Setverdict allowed in test cases + **/ + +module Syn_24_toplevel_002 { + type component GeneralComp {}; + + testcase TC_Syn_24_toplevel_002_setverdict() runs on GeneralComp { + setverdict(none); + setverdict(pass); + setverdict(inconc); + setverdict(fail); + } + + testcase TC_Syn_24_toplevel_002_getverdict() runs on GeneralComp { + var verdicttype v_verdict; + + v_verdict := getverdict; + } + + testcase TC_Syn_24_toplevel_002_return_getverdict() runs on GeneralComp { + const verdicttype c_v := getverdict; + } +} \ No newline at end of file diff --git a/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_003.ttcn b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_003.ttcn new file mode 100644 index 0000000..14a2a00 --- /dev/null +++ b/core_language/24_test_verdict_operations/24_toplevel/Syn_24_toplevel_003.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:24, Ensure setverdict and getverdict are allowed in atsteps + ** @verdict pass accept, noexecution + ***************************************************/ +/* + * #reqname /Requirements/24 Test verdict operations/Getverdict and setverdict operations shall only be used in test cases, altsteps and functions./Setverdict locations/Setverdict allowed in altsteps + **/ + +module Syn_24_toplevel_003 { + type record MessageType { + integer field + } + + type port MessagePort message { + inout MessageType; + } + + type component GeneralComp { + port MessagePort PCO1; + port MessagePort PCO2; + port MessagePort PCO3; + } + + altstep a_test_get_set_verdict() runs on GeneralComp { + var verdicttype v_verdict := getverdict; + + [] PCO1.receive { + setverdict(pass); + } + [] PCO2.receive { + setverdict(inconc); + } + [] PCO3.receive { + setverdict(fail); + } + } +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_001.ttcn b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_001.ttcn new file mode 100644 index 0000000..e1c102b --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_001.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that non-float timeout parameters in the execute statement are rejected (in this case int). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2601_ExecuteStatement_001 { + +type component GeneralComp { } + +testcase TC_NegSem_2601_ExecuteStatement_001() runs on GeneralComp { + setverdict(pass); +} + +control { + execute(TC_NegSem_2601_ExecuteStatement_001(), 1); +} + +} diff --git a/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_002.ttcn b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_002.ttcn new file mode 100644 index 0000000..787c3f5 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_002.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that non-float timeout parameters in the execute statement are rejected (in this case charstring). + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2601_ExecuteStatement_002 { + +type component GeneralComp { } + +testcase TC_NegSem_2601_ExecuteStatement_002() runs on GeneralComp { + setverdict(pass); +} + +control { + execute(TC_NegSem_2601_ExecuteStatement_002(), "foobar"); +} + +} diff --git a/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_003.ttcn b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_003.ttcn new file mode 100644 index 0000000..4ae72bf --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_003.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that host id can be only charstring. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2601_ExecuteStatement_003 { + +type component GeneralComp { } + +testcase TC_NegSem_2601_ExecuteStatement_003(integer p_value, charstring p_string, boolean p_bool) runs on GeneralComp { + setverdict(pass); +} + +control { + var integer v_test := 20; + var octetstring v_host := '4469707379'O; //not allowed host type + execute(TC_NegSem_2601_ExecuteStatement_003(v_test, "hello", true), -, v_host); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_004.ttcn b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_004.ttcn new file mode 100644 index 0000000..9e6dead --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/NegSem_2601_ExecuteStatement_004.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that execution rejects test case execution with infinity timer guard + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2601_ExecuteStatement_004 { + +type component GeneralComp { } + +testcase TC_NegSem_2601_ExecuteStatement_004(integer p_value, charstring p_string, boolean p_bool) runs on GeneralComp { + setverdict(pass); +} + +control { + var integer v_test := 20; + execute(TC_NegSem_2601_ExecuteStatement_004(v_test, "hello", true), infinity); //not allowed to explicitly assign infinite timer +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_001.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_001.ttcn new file mode 100644 index 0000000..07ce3fe --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_001.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that parameters are passed correctly into the test case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2601_ExecuteStatement_001 { + +type component GeneralComp { } + +testcase TC_Sem_2601_ExecuteStatement_001(integer p_value) runs on GeneralComp { + if (p_value == 20) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control { + var integer v_test := 20; + execute(TC_Sem_2601_ExecuteStatement_001(v_test)); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_002.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_002.ttcn new file mode 100644 index 0000000..65caa1a --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_002.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that multiple parameters of different types are passed correctly into the test case. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2601_ExecuteStatement_002 { + +type component GeneralComp { } + +testcase TC_Sem_2601_ExecuteStatement_002(integer p_value, charstring p_string, boolean p_bool) runs on GeneralComp { + if (match(p_value, 20) and + match(p_string, "hello") and + match(p_bool, true) + ){ + setverdict(pass); + } else { + setverdict(fail); + } +} + +control { + var integer v_test := 20; + execute(TC_Sem_2601_ExecuteStatement_002(v_test, "hello", true)); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_003.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_003.ttcn new file mode 100644 index 0000000..002cac2 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_003.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:26.1, Ensure that the timeout specified with the execute statement is respected. + ** @verdict pass accept, ttcn3verdict:error + *****************************************************************/ + +module Sem_2601_ExecuteStatement_003 { + +type port P message { inout integer; } +type component GeneralComp { port P p; } + +testcase TC_Sem_2601_ExecuteStatement_003() runs on GeneralComp { + alt { // this alt is intentionally blocking! + [] any port.receive { + repeat; + } + } + setverdict(pass); +} + +control { + execute(TC_Sem_2601_ExecuteStatement_003(), 2.0); // let the testcase timeout after 2 seconds +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_004.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_004.ttcn new file mode 100644 index 0000000..46ab360 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_004.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that the verdict none works correctly. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2601_ExecuteStatement_004 { + +type component GeneralComp { } + +testcase TC_Sem_2601_ExecuteStatement_004() runs on GeneralComp { + setverdict(none); +} + +testcase TC_Sem_2601_ExecuteStatement_004_second(verdicttype p_verdict) runs on GeneralComp { + if (p_verdict == none) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control { + var verdicttype v_result; + + v_result := execute(TC_Sem_2601_ExecuteStatement_004()); + execute(TC_Sem_2601_ExecuteStatement_004_second(v_result)); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_005.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_005.ttcn new file mode 100644 index 0000000..8c8b90c --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_005.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that the verdict pass works correctly. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ + +module Sem_2601_ExecuteStatement_005 { + +type component GeneralComp { } + +testcase TC_Sem_2601_ExecuteStatement_005() runs on GeneralComp { + setverdict(pass); +} + +testcase TC_Sem_2601_ExecuteStatement_005_second(verdicttype p_verdict) runs on GeneralComp { + if (p_verdict == pass) { + setverdict(fail); + } else { + setverdict(pass); + } +} + +control { + var verdicttype v_result; + + v_result := execute(TC_Sem_2601_ExecuteStatement_005()); + execute(TC_Sem_2601_ExecuteStatement_005_second(v_result)); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_006.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_006.ttcn new file mode 100644 index 0000000..aabded7 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_006.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that the verdict inconc works correctly. + ** @verdict pass accept, ttcn3verdict:inconc + *****************************************************************/ + +module Sem_2601_ExecuteStatement_006 { + +type component GeneralComp { } + +testcase TC_Sem_2601_ExecuteStatement_006() runs on GeneralComp { + setverdict(inconc); +} + +testcase TC_Sem_2601_ExecuteStatement_006_second(verdicttype p_verdict) runs on GeneralComp { + if (p_verdict == inconc) { + setverdict(pass); + } else { + setverdict(fail); + } +} + +control { + var verdicttype v_result; + + v_result := execute(TC_Sem_2601_ExecuteStatement_006()); + execute(TC_Sem_2601_ExecuteStatement_006_second(v_result)); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn new file mode 100644 index 0000000..572390e --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_007.ttcn @@ -0,0 +1,23 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that the timeout specified with the execute statement is respected. + ** @verdict pass accept, ttcn3verdict:error + *****************************************************************/ + +module Sem_2601_ExecuteStatement_007 { + + type component GeneralComp { } + + testcase TC_Sem_2601_ExecuteStatement_007() runs on GeneralComp { + while(true) { + // infinite loop + } + setverdict(pass); + } + + control { + execute(TC_Sem_2601_ExecuteStatement_007(), 2.0); // let the testcase execution timeout after 2 seconds + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn new file mode 100644 index 0000000..5e56669 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_008.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that the user error sets the verdict error correctly. + ** @verdict pass accept, ttcn3verdict:error + *****************************************************************/ + +module Sem_2601_ExecuteStatement_008 { + + type component GeneralComp { } + + testcase TC_Sem_2601_ExecuteStatement_008() runs on GeneralComp { + testcase.stop("User error!"); + } + + control { + var verdicttype v_result; + + execute(TC_Sem_2601_ExecuteStatement_008()); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn new file mode 100644 index 0000000..a771315 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_009.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.1, Ensure that host id restriction is correctly handled. + ** @verdict pass accept, ttcn3verdict:error + *****************************************************************/ + +module Sem_2601_ExecuteStatement_009 { + + type component GeneralComp { } + + testcase TC_Sem_2601_ExecuteStatement_009(integer p_value, charstring p_string, boolean p_bool) runs on GeneralComp { + setverdict(pass); + } + + control { + var integer v_test := 20; + execute(TC_Sem_2601_ExecuteStatement_009(v_test, "hello", true), -, "wrong_host4232432432432432432432432432"); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn new file mode 100644 index 0000000..e17e348 --- /dev/null +++ b/core_language/26_module_control/2601_execute_statement/Sem_2601_ExecuteStatement_010.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 521 + ** @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 { + } + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn new file mode 100644 index 0000000..668650d --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_001.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that setverdict statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_001 { + + type component GeneralComp { } + + control { + setverdict(pass); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn new file mode 100644 index 0000000..8587814 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_002.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the create component is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_002 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + control { + var MTCComp v_myComp := MTCComp.create; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn new file mode 100644 index 0000000..fe67b7b --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_003.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the create alive component is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_003 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + control { + var MTCComp v_myComp := MTCComp.create alive; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_004.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_004.ttcn new file mode 100644 index 0000000..8106336 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_004.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the start statement is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_004 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + v_myComp.start(f_myBehavior()); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_005.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_005.ttcn new file mode 100644 index 0000000..011598f --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_005.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the stop statement is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_005 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + v_myComp.start(f_myBehavior()); + v_myComp.stop; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_006.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_006.ttcn new file mode 100644 index 0000000..b71590a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_006.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the kill statement is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_006 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + v_myComp.start(f_myBehavior()); + v_myComp.kill; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_007.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_007.ttcn new file mode 100644 index 0000000..4112300 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_007.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the alive operation is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_007 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + if (v_myComp.alive) { + // should be rejected + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_008.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_008.ttcn new file mode 100644 index 0000000..6507906 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_008.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the running operation is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_008 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + if (v_myComp.running) { + // should be rejected + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_009.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_009.ttcn new file mode 100644 index 0000000..981b75a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_009.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the done operation is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_009 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + v_myComp.start(f_myBehavior()); + v_myComp.done; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_010.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_010.ttcn new file mode 100644 index 0000000..b4a7b1a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_010.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the killed operation is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_010 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_myBehavior() runs on MTCComp { + setverdict(fail); + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + if (v_myComp.killed) { + // should be rejected + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_011.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_011.ttcn new file mode 100644 index 0000000..662b86c --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_011.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the connect statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_011 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + type component PTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_firstComp := f_createComp(); // assume create was accepted + var PTCComp v_secondComp := f_createComp(); // assume create was accepted + + connect(v_firstComp:p,v_firstComp:p); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_012.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_012.ttcn new file mode 100644 index 0000000..daf00df --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_012.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the disconnect statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_012 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + type component PTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_firstComp := f_createComp(); // assume create was accepted + var PTCComp v_secondComp := f_createComp(); // assume create was accepted + + disconnect(v_firstComp:p,v_firstComp:p); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_013.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_013.ttcn new file mode 100644 index 0000000..d13f05b --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_013.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the map statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_013 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + type component PTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_firstComp := f_createComp(); // assume create was accepted + var PTCComp v_secondComp := f_createComp(); // assume create was accepted + + map(v_firstComp:p,v_firstComp:p); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_014.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_014.ttcn new file mode 100644 index 0000000..4092548 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_014.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the unmap statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_014 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + type component PTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_firstComp := f_createComp(); // assume create was accepted + var PTCComp v_secondComp := f_createComp(); // assume create was accepted + + unmap(v_firstComp:p,v_firstComp:p); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_015.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_015.ttcn new file mode 100644 index 0000000..753a753 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_015.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the send statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_015 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.send(charstring:"foobar"); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_016.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_016.ttcn new file mode 100644 index 0000000..9a75ec0 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_016.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the receive statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_016 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.receive(charstring:"foobar"); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_017.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_017.ttcn new file mode 100644 index 0000000..2da0afb --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_017.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the call statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_017 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + template MyProcedure s_call := { 2, true } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.call(s_call); + + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_018.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_018.ttcn new file mode 100644 index 0000000..115b48f --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_018.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the reply statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_018 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + template MyProcedure s_call := { 2, true } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.reply(s_call); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_019.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_019.ttcn new file mode 100644 index 0000000..ca48160 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_019.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the raise statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_019 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + type charstring Exception; + + signature MyProcedure(integer p_value, boolean p_bool) exception (Exception); + + template Exception s_exception := "Thrown exception"; + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.raise(MyProcedure, s_exception); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_020.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_020.ttcn new file mode 100644 index 0000000..f75c186 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_020.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the trigger statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_020 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + var MyProcedure v_procValue; + v_myComp.p.trigger(MyProcedure:?) -> value v_procValue; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_021.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_021.ttcn new file mode 100644 index 0000000..3b95e9f --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_021.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the getcall statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_021 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + template MyProcedure s_expected := { 1, ? } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.getcall(s_expected); + } +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_022.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_022.ttcn new file mode 100644 index 0000000..606997a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_022.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the getreply statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_022 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.getreply; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_023.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_023.ttcn new file mode 100644 index 0000000..2cf795a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_023.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the catch statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_023 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.catch; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_024.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_024.ttcn new file mode 100644 index 0000000..a33e416 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_024.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the check statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_024 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.check; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_025.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_025.ttcn new file mode 100644 index 0000000..001377f --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_025.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.2 + ** @purpose 1:26.2, Ensure that the clear statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_025 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.clear; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_026.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_026.ttcn new file mode 100644 index 0000000..909f696 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_026.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the start statements on ports are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_026 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.start; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_027.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_027.ttcn new file mode 100644 index 0000000..726e523 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_027.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the stop statements on ports are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_027 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.stop; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_028.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_028.ttcn new file mode 100644 index 0000000..54d478b --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_028.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the halt statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_028 { + + type port MyPort procedure { + inout MyProcedure + } + + type component MTCComp { + port MyPort p; + } + + signature MyProcedure(integer p_value, boolean p_bool); + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + + v_myComp.p.halt; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_029.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_029.ttcn new file mode 100644 index 0000000..d5b5518 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_029.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that alternative behaviours are only used to control timer behavior in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_029 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + function f_createComp() return MTCComp { + return MTCComp.create; + } + + control { + var MTCComp v_myComp := f_createComp(); // assume create was accepted + alt { + [] v_myComp.p.receive(charstring:"foobar") { + } + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_030.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_030.ttcn new file mode 100644 index 0000000..3c26d42 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_030.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that getverdict statements are not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_030 { + + type component GeneralComp { } + + control { + var verdicttype v_result; + v_result := getverdict; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_031.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_031.ttcn new file mode 100644 index 0000000..6019423 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_031.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that execute statements are not executed from test cases. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_031 { + + type component GeneralComp { } + + testcase TC_NegSem_2602_TheControlPart_031() runs on GeneralComp { + setverdict(pass); + execute(TC_NegSem_2602_TheControlPart_031_second()); // shall be rejected + } + + testcase TC_NegSem_2602_TheControlPart_031_second() runs on GeneralComp { + setverdict(fail); + } + + + control { + execute(TC_NegSem_2602_TheControlPart_031()); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_032.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_032.ttcn new file mode 100644 index 0000000..ccaccb8 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_032.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the create alive named component is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_032 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + control { + var MTCComp v_myComp := MTCComp.create("component name") alive; + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_033.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_033.ttcn new file mode 100644 index 0000000..a7bb8c3 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_033.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the create named component is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_033 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + control { + var MTCComp v_myComp := MTCComp.create("component name"); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_034.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_034.ttcn new file mode 100644 index 0000000..d4a19d8 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_034.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the create named component on host is not allowed in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_034 { + + type port MyPort message { + inout charstring + } + + type component MTCComp { + port MyPort p; + } + + control { + var MTCComp v_myComp := MTCComp.create("component name", "localhost"); + } +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_035.ttcn b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_035.ttcn new file mode 100644 index 0000000..4cf0b57 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/NegSem_2602_TheControlPart_035.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that alternative behaviours are only used to control timer behavior in the control part. + ** @verdict pass reject + *****************************************************************/ + +module NegSem_2602_TheControlPart_035 { + control { + alt { + [] any port.receive { + } + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_001.ttcn b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_001.ttcn new file mode 100644 index 0000000..97db4b6 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_001.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the selection/deselection of test cases using boolean conditions works as expected. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2602_TheControlPart_001 { + + type component GeneralComp { } + + testcase TC_Sem_2602_TheControlPart_001() runs on GeneralComp { + setverdict(fail); + } + + testcase TC_Sem_2602_TheControlPart_001_second() runs on GeneralComp { + setverdict(pass); + } + + control { + if (false) { + execute(TC_Sem_2602_TheControlPart_001()); + } + + if (true) { + execute(TC_Sem_2602_TheControlPart_001_second()); + } + + if (not(1 == 1)) { + execute(TC_Sem_2602_TheControlPart_001()); + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_002.ttcn b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_002.ttcn new file mode 100644 index 0000000..ab0812a --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_002.ttcn @@ -0,0 +1,24 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the execution of test cases works from within a function. + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +module Sem_2602_TheControlPart_002 { + + type component GeneralComp { } + + testcase TC_Sem_2602_TheControlPart_002() runs on GeneralComp { + setverdict(pass); + } + + function f_testCaseExecutionFunction() { + execute(TC_Sem_2602_TheControlPart_002()); + } + + control { + f_testCaseExecutionFunction(); + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_003.ttcn b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_003.ttcn new file mode 100644 index 0000000..990fa27 --- /dev/null +++ b/core_language/26_module_control/2602_the_control_part/Sem_2602_TheControlPart_003.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26.2, Ensure that the selection of test cases can be achieven based on resulting verdict types. + ** @verdict pass accept, ttcn3verdict:fail + *****************************************************************/ + +module Sem_2602_TheControlPart_003 { + + type component GeneralComp { } + + testcase TC_Sem_2602_TheControlPart_003() runs on GeneralComp { + setverdict(pass); + } + + testcase TC_Sem_2602_TheControlPart_003_second() runs on GeneralComp { + setverdict(fail); + } + + control { + var verdicttype v_result; + v_result := execute(TC_Sem_2602_TheControlPart_003()); + + if (v_result == pass) { + execute(TC_Sem_2602_TheControlPart_003_second()); + } + } + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_001.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_001.ttcn new file mode 100644 index 0000000..d8c0833 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_001.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that assignments in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_001 { + +control{ + var integer v_foo := 2; +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_002.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_002.ttcn new file mode 100644 index 0000000..a91d39f --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_002.ttcn @@ -0,0 +1,18 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that if-else constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_002 { + +control{ + if (1 == 1) { + // do something + } else { + // do something else + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_003.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_003.ttcn new file mode 100644 index 0000000..b164049 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_003.ttcn @@ -0,0 +1,25 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that select-case constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_003 { + +control{ + var integer v_test := 1; + select(v_test) { + case(1) { + // do something + } + case(2) { + // do something else + } + case else { + // do something else + } + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_004.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_004.ttcn new file mode 100644 index 0000000..711d33b --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_004.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that for loop constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_004 { + +control{ + for (var integer v_i:=0; v_i < 10; v_i := v_i + 1) { + // do something + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_005.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_005.ttcn new file mode 100644 index 0000000..8445484 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_005.ttcn @@ -0,0 +1,17 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that while loop constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_005 { + +control{ + var integer v_i:=0; + while (v_i < 10) { + v_i := v_i + 1; + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_006.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_006.ttcn new file mode 100644 index 0000000..59a5277 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_006.ttcn @@ -0,0 +1,21 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that label and goto constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_006 { + +control{ + var integer v_i:=0; +label loop; + v_i := v_i + 1; + if (v_i > 10) { + goto end; + } + goto loop; +label end; +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_007.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_007.ttcn new file mode 100644 index 0000000..8c88aa5 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_007.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the stop construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_007 { + +control{ + stop; +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_008.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_008.ttcn new file mode 100644 index 0000000..74d44e6 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_008.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the break construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_008 { + +control{ + for (var integer v_i:=0; v_i < 10; v_i := v_i + 1) { + break; + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_009.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_009.ttcn new file mode 100644 index 0000000..dd885aa --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_009.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the continue construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_009 { + +control{ + for (var integer v_i:=0; v_i < 10; v_i := v_i + 1) { + continue; + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_010.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_010.ttcn new file mode 100644 index 0000000..b01dee7 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_010.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the continue construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_010 { + +control{ + log("Hello World"); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_011.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_011.ttcn new file mode 100644 index 0000000..8711275 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_011.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the alt/timeout construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_011 { + +control{ + timer t_timer; + t_timer.start(20E-3); + alt { + [] t_timer.timeout { + // do something + } + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_012.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_012.ttcn new file mode 100644 index 0000000..32349bc --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_012.ttcn @@ -0,0 +1,20 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the repeat construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_012 { + +control{ + timer t_timer; + t_timer.start(20E-3); + alt { + [] t_timer.timeout { + repeat; + } + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_013.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_013.ttcn new file mode 100644 index 0000000..529b9b8 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_013.ttcn @@ -0,0 +1,23 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the interleave construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_013 { + +control{ + timer t_timerOne; + timer t_timerTwo; + t_timerOne.start(20E-3); + t_timerTwo.start(30E-3); + interleave { + [] t_timerOne.timeout { + } + [] t_timerTwo.timeout { + } + } +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_015.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_015.ttcn new file mode 100644 index 0000000..3db0520 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_015.ttcn @@ -0,0 +1,29 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that start/stop/read/running timer constructs in the control part are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_015 { + +type component GeneralComp { } + +altstep a_test(timer p_timer) runs on GeneralComp { + [] p_timer.timeout { + } +} + +control{ + timer t_timer; + var float v_value; + t_timer.start(20E-3); + v_value := t_timer.read; + if (t_timer.running) { + // do something + } + + t_timer.stop; +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_016.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_016.ttcn new file mode 100644 index 0000000..65bffc5 --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_016.ttcn @@ -0,0 +1,14 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the action construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_016 { + +control{ + action("Send template on lower PCO now!"); +} + +} \ No newline at end of file diff --git a/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_017.ttcn b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_017.ttcn new file mode 100644 index 0000000..b85fb3c --- /dev/null +++ b/core_language/26_module_control/26_toplevel/Syn_26_ModuleControl_017.ttcn @@ -0,0 +1,19 @@ +/***************************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:26, Ensure that the execute construct in the control part is accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_26_ModuleControl_017 { + +type component GeneralComp { } + +testcase t_myTestCase() runs on GeneralComp { +} + +control{ + execute(t_myTestCase()); +} + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_001.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_001.ttcn new file mode 100644 index 0000000..d0e40a4 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_001.ttcn @@ -0,0 +1,16 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.1.1, Ensure that attributes for language elements are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_270101_ScopeOfAttributes_001 { + + type record of integer IntegerList + with { + display "colour red"; + extension "MyRule" + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn new file mode 100644 index 0000000..1eb6a2d --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_002.ttcn @@ -0,0 +1,22 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.1.1, Ensure that attributes for language elements are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_270101_ScopeOfAttributes_002 { + + type record MyRecord { + integer field1, + record { + integer innerField1, + boolean innerField2 + } field2 + } + with { + display "colour red"; + extension "MyRule" + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn new file mode 100644 index 0000000..9f6452e --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_003.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.1.1, Ensure that attributes for individual fields are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_270101_ScopeOfAttributes_003 { + + type record of integer IntegerList + with { + display "colour red"; + extension "MyRule" + } + + const IntegerList c_MyIntegers1 := {0,1,2,3} + with { + display ([-]) "colour green" + } + + const IntegerList c_MyIntegers2 := {0,1,2,3} + with { + display ([0]) "colour black"; + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn new file mode 100644 index 0000000..3f5cfa8 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_004.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.1.1, Ensure that attributes for individual fields are accepted. + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Syn_270101_ScopeOfAttributes_004 { + + type record MyRecord { + integer field1, + record { + integer innerField1, + boolean innerField2 + } field2 + } + with { + display "colour red"; + extension "MyRule" + } + + const MyRecord c_record := {0,{1,true}} + with { + display (field2.innerField1) "colour green" + } + + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_005.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_005.ttcn new file mode 100644 index 0000000..c7a3ce8 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270101_scope_of_attributes/Syn_270101_ScopeOfAttributes_005.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.1, Verify that attributes of synonym types can use field references + ** @verdict pass accept, noexecution + *****************************************************************/ + + // The following requirements are tested: + + // Attributes can be attached to synonym types (6.4). If the synonym type is a structured type, + // attributes in the with statement may reference fields or elements of this structured type. + +module Syn_270101_ScopeOfAttributes_004 { + + type record MyRecord { + integer field1, + record { + integer innerField1, + boolean innerField2 + } field2 + } + + type MyRecord MyRecord2 + with { + display(field1.innerField1) "colour red"; + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_001.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_001.ttcn new file mode 100644 index 0000000..7abe354 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from lower scopes override attribute from higher scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An attribute definition that is directly attached to a lower scope unit will override a general attribute +// definition in a higher scope and a type-specific attribute inherited from a type reference. + +module Sem_27010200_general_001 { + + type component GeneralComp { + } + + type record R { + } with { encode "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_001 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010200_general_001()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_002.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_002.ttcn new file mode 100644 index 0000000..f304282 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_002.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from lower scopes override attribute from type reference + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An attribute definition that is directly attached to a lower scope unit will override a general attribute +// definition in a higher scope and a type-specific attribute inherited from a type reference. + +module Sem_27010200_general_002 { + + type component GeneralComp { + } + + type integer I with { encode "RuleA" } + + type record R { + I field1 + } with { encode(field1) "RuleB" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_002 () runs on GeneralComp { + var RoUC v_enc := R.field1.encode; + if(v_enc[0] == "RuleB") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010200_general_002()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_003.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_003.ttcn new file mode 100644 index 0000000..34f3f60 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_003.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from type reference override attributes from higher scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Attributes inherited from a type reference will override general attributes from a higher scope unit +// containing the type reference. + +module Sem_27010200_general_003 { + + type component GeneralComp { + } + + type record MyRecordA { + } with { encode "RuleA" } + + type record MyRecordB + { + MyRecordA field + } with { encode "RuleB" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_003 () runs on GeneralComp { + var RoUC v_enc := MyRecordB.field.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010200_general_003()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_004.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_004.ttcn new file mode 100644 index 0000000..f862a86 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_004.ttcn @@ -0,0 +1,33 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from lower scopes override attribute from higher scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// A with statement that is placed inside the scope of another with statement shall override the outermost with. + +module Sem_27010200_general_004 { + + type component GeneralComp { + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_004 () runs on GeneralComp { + const integer c_zero := 0; + var RoUC v_enc := c_zero.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } with { encode "RuleA" } + + + control{ + execute(TC_Sem_27010200_general_004()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_005.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_005.ttcn new file mode 100644 index 0000000..a4a35a9 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_005.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from type reference override attributes from higher scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Attributes inherited from a type reference will override general attributes from a higher scope unit. + +// Note: +// 1. The type R gets its attribute from the module +// 2. The constant c_r gets its attribute from two sources: the R type and the scope unit (the test case) +// 3. Because the R reference is preferred, the attribute originating from the module level will be used +// even though the scope unit where the c_r unit seemingly overrides it + + +module Sem_27010200_general_005 { + + type component GeneralComp { + } + + type record R { + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_005 () runs on GeneralComp { + const R c_r := {}; + var RoUC v_enc := c_r.encode; + if(v_enc[0] == "GeneralRule") { + setverdict(pass); + } else { + setverdict(fail); + } + } with { encode "RuleA" } + + + control{ + execute(TC_Sem_27010200_general_005()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_006.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_006.ttcn new file mode 100644 index 0000000..d005213 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_006.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from lower group scopes override attribute from higher group scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// A with statement that is placed inside the scope of another with statement shall override the outermost with. +// This shall also apply to the use of the with statement with groups. + +module Sem_27010200_general_006 { + + type component GeneralComp { + } + + group myPDUs + { + type record MyPDU1 { } + group mySpecialPDUs { + type record MyPDU2 { } + } with { extension "MySpecialRule" } + } with { + extension "MyRule"; + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_006 () runs on GeneralComp { + var RoUC v_enc1 := MyPDU1.extension, + v_enc2 := MyPDU2.extension; + if(v_enc1[0] == "MyRule" and v_enc2[0] == "MySpecialRule") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_006()); + } + +} with { extension "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_007.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_007.ttcn new file mode 100644 index 0000000..06788d0 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_007.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that in case of multiple attributes all attributes are overridden + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If multiple attributes of the same type are allowed, all of them are overridden unless specified otherwise. + +module Sem_27010200_general_007 { + + type component GeneralComp { + } + + group myPDUs + { + type record MyPDU1 { } + group mySpecialPDUs { + type record MyPDU2 { } + } with { extension "MySpecialRule" } + } with { + extension "MyRule"; + extension "MyAdditionalRule" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_007 () runs on GeneralComp { + var RoUC v_enc := MyPDU2.extension; + if(lengthof(v_enc) == 1 and v_enc[0] == "MySpecialRule") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_007()); + } + +} with { extension "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_008.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_008.ttcn new file mode 100644 index 0000000..1ba620a --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_008.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes of synonym types do not override existing attributes of fields + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Attributes defined for a synonym type don't override existing attributes of fields or elements of this synonym type. + +module Sem_27010200_general_008 { + + type component GeneralComp { + } + + type record SourceType2 { + integer field1, + integer field2 + } with { encode "Rule1" } + + type SourceType2 SynonymType2 with { encode "Rule3" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_008 () runs on GeneralComp { + var RoUC v_enc1 := SynonymType2.encode, + v_enc2 := SynonymType2.field1.encode, + v_enc3 := SynonymType2.field2.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "Rule3" and + lengthof(v_enc2) == 1 and v_enc2[0] == "Rule1" and + lengthof(v_enc3) == 1 and v_enc3[0] == "Rule1") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_008()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_009.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_009.ttcn new file mode 100644 index 0000000..cccbb22 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_009.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes of synonym types apply to fields with no existing attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The attributes are applied to the fields or elements of synonym types only if the fields or elements have no +// valid attributes. + +module Sem_27010200_general_009 { + + type component GeneralComp { + } + + type record SourceType1 { + integer field1, + integer field2 + } + + type SourceType1 SynonymType1 with { encode "Rule2" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_009 () runs on GeneralComp { + var RoUC v_enc1 := SynonymType1.encode, + v_enc2 := SynonymType1.field1.encode, + v_enc3 := SynonymType1.field2.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "Rule2" and + lengthof(v_enc2) == 1 and v_enc2[0] == "Rule2" and + lengthof(v_enc3) == 1 and v_enc3[0] == "Rule2") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_009()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_010.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_010.ttcn new file mode 100644 index 0000000..24d59b6 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_010.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that @local attribute is not applied to lower scopes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Attributes with the @local modifier override attributes from higher scope, but they are valid for the associated +// language element only. They do not affect definitions inside the associated language element as the @local +// attribute is completely transparent to lower scopes. + +module Sem_27010200_general_010 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 + } with { encode @local "Rule1" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_010 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R.field1.encode, + v_enc3 := R.field2.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "Rule1" and + lengthof(v_enc2) == 0 and + lengthof(v_enc3) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_010()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_011.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_011.ttcn new file mode 100644 index 0000000..09b6e00 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_011.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that attributes from higher scopes are applied to lower scopes when @local attribute is between them + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Attributes from higher scope will still affect attributes in lower scopes even if the @local attribute is +// between them. + +module Sem_27010200_general_011 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 + } with { encode @local "Rule1" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_011 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R.field1.encode, + v_enc3 := R.field2.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "Rule1" and + lengthof(v_enc2) == 1 and v_enc2[0] == "GeneralRule" and + lengthof(v_enc3) == 1 and v_enc3[0] == "GeneralRule") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_011()); + } +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_012.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_012.ttcn new file mode 100644 index 0000000..9b84e7a --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_012.ttcn @@ -0,0 +1,41 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that override directive overrides attribute from a reference + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An attribute definition in a lower scope or those inherited from a referenced type can be overwritten +// in a higher scope by using the override directive. + +module Sem_27010200_general_012 { + + type component GeneralComp { + } + + type record MyRecordA { + integer field1 + } with { encode "RuleA" } + + // In the following, fieldA of a MyRecordB instance is encoded according to RuleB + type record MyRecordB { + MyRecordA fieldA + } with { encode override "RuleB" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_012 () runs on GeneralComp { + var RoUC v_enc1 := MyRecordB.fieldA.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "RuleB") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_012()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_013.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_013.ttcn new file mode 100644 index 0000000..0f448b7 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_013.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that override is applied to lower scopes that do not declare the attribute + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The override directive overrides the specified attribute for all declarations at all lower scopes +// that do not also declare the specified attribute. + +module Sem_27010200_general_013 { + + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 + } with { encode "Rule1" } + + type record R2 { + R field + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_013 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R2.encode, + v_enc3 := R2.field.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "Rule1" and + lengthof(v_enc2) == 1 and v_enc2[0] == "GeneralRule" and + lengthof(v_enc3) == 1 and v_enc3[0] == "GeneralRule") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_013()); + } +} with { encode override "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_014.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_014.ttcn new file mode 100644 index 0000000..edf754d --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_014.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that explicit attribute declaration prevents overwriting + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The override directive overrides the specified attribute for all declarations at all lower scopes +// that do not also declare the specified attribute. + +module Sem_27010200_general_014 { + + type component GeneralComp { + } + + // In the following, rule "RuleB" is overridden by "RuleC" for fieldC, but it is + // not overridden by "RuleA" of the group because the direct attachment to fieldC and + // MyRecordC override the encode of the outer scope. + group myGroup { + type record MyRecordC { + integer field1 + } with { encode override "RuleB" } + + type record MyRecordD { + MyRecordC fieldC + } with { encode override (fieldC) "RuleC" } + } with { encode override "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_014 () runs on GeneralComp { + var RoUC v_enc1 := MyRecordD.fieldC.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "RuleC") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_014()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_015.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_015.ttcn new file mode 100644 index 0000000..371f9f1 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_015.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that override directive applied to a type reference does not affect the referenced type + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If the override directive is applied to a type reference, it doesn't affect the attributes of the +// original referenced type. + +module Sem_27010200_general_015 { + + type component GeneralComp { + } + + type record MyRecordA { + integer field1 + } with { encode override "RuleA" } + + type record MyRecordB { + MyRecordA fieldA + } with { encode override "RuleB" } + + // The following template will use "RuleA" as the override directive for MyRecordB affects only + // MyRecordB.fieldA, but not the original MyRecordA. + template MyRecordA mw_msg := ?; + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_015 () runs on GeneralComp { + var RoUC v_enc1 := mw_msg.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_015()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_016.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_016.ttcn new file mode 100644 index 0000000..32e41bd --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010200_general/Sem_27010200_general_016.ttcn @@ -0,0 +1,49 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.0, Verify that override directive applied to a synonym type overrides field attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Override attribute applied to a synonym type(clause 6.4) overrides attributes of all fields or +// elements of the synonym type unless the synonym type definition contains an explicit attribute +// definition for the field or element + +module Sem_27010200_general_016 { + + type component GeneralComp { + } + + // MyRecordG and its "field1" member will be encoded with "RuleB", but its field2 member + // will be encoded with "RuleA", because there's an encode attribute explicitly declared + // for this field. + type record MyRecordF { + integer field1, + integer field2 + } with { encode "RuleA" } + + type MyRecordF MyRecordG with { + encode override "RuleB"; + encode(field2) "RuleA" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010200_general_016 () runs on GeneralComp { + var RoUC v_enc1 := MyRecordG.encode, + v_enc2 := MyRecordG.field1.encode, + v_enc3 := MyRecordG.field2.encode; + if(lengthof(v_enc1) == 1 and v_enc1[0] == "RuleB" and + lengthof(v_enc2) == 1 and v_enc2[0] == "RuleB" and + lengthof(v_enc3) == 1 and v_enc3[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_27010200_general_016()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_001.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_001.ttcn new file mode 100644 index 0000000..dcc82e3 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_001.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.1, Verify that variant attributes can be overridden + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// A variant attribute overwrites a current variant attribute according to the rules defined +// in clause 27.1.2; + +module Sem_27010201_rules_for_variant_attributes_001 { + + type component GeneralComp { + } + + type record MyRecordA { + } with { variant "VariantA" } + + type record MyRecordB + { + MyRecordA field + } with { variant "VariantB" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010201_rules_for_variant_attributes_001 () runs on GeneralComp { + var RoUC v_var1 := MyRecordB.variant, + v_var2 := MyRecordB.field.variant; + if(v_var1[0] == "VariantB" and + v_var2[0] == "VariantA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010201_rules_for_variant_attributes_001()); + } + +} with { encode "GeneralRule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_002.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_002.ttcn new file mode 100644 index 0000000..b8cfd1f --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_002.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.1, Verify that encode attribute change disables existing variant attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An encoding attribute, which overwrites a current encoding attribute according to +// the rules defined in clause 27.1.2, also overwrites a corresponding current variant +// attribute, i.e. no new variant attribute is provided, but the current variant attribute +// becomes inactive. + +module Sem_27010201_rules_for_variant_attributes_002 { + + type component GeneralComp { + } + + type record MyRecordA { + } with { encode "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010201_rules_for_variant_attributes_002 () runs on GeneralComp { + var RoUC v_var := MyRecordA.variant; + if(lengthof(v_var) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010201_rules_for_variant_attributes_002()); + } + +} with { encode "GeneralRule" variant "Variant1" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_003.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_003.ttcn new file mode 100644 index 0000000..b559768 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010201_rules_for_variant_attributes/Sem_27010201_rules_for_variant_attributes_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.1, Verify that encode attribute repeating doesn't disable existing variant attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An encoding attribute, which overwrites a current encoding attribute according to +// the rules defined in clause 27.1.2, also overwrites a corresponding current variant +// attribute, i.e. no new variant attribute is provided, but the current variant attribute +// becomes inactive. + +module Sem_27010201_rules_for_variant_attributes_003 { + + type component GeneralComp { + } + + type record MyRecordA { + } with { encode "GeneralRule" } // the same as in upper scope, variant should not change + + type record of universal charstring RoUC; + + testcase TC_Sem_27010201_rules_for_variant_attributes_003 () runs on GeneralComp { + var RoUC v_var := MyRecordA.variant; + if(lengthof(v_var) == 1 and v_var[0] == "Variant1") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010201_rules_for_variant_attributes_003()); + } + +} with { encode "GeneralRule" variant "Variant1" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_001.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_001.ttcn new file mode 100644 index 0000000..2cdd801 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_001.ttcn @@ -0,0 +1,48 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.2, Verify that listed encode attributes retain variants + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Explicitly listed encode attributes that occur on the higher scope and are not overwritten +// will retain all variants related to them. + +module Sem_27010202_rules_for_multiple_encodings_001 { + + type component GeneralComp { + } + + type integer Int with { + encode "CodecA"; variant "CodecA"."Rule1"; + encode "CodecB"; variant "CodecB"."Rule2"; + } + + // Modifying list of allowed encodings + type Int Int2 with { + encode "CodecA"; // variant "CodecA"."Rule1" is kept + encode "CodecC"; variant "CodecC"."Rule6"; // new encoding and related variant + // "CodecB" encoding together with its variant are discarded as "CodecB" is not + // explicitly referenced + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010202_rules_for_multiple_encodings_001 () runs on GeneralComp { + var RoUC v_var1 := Int2.variant("CodecA"), + v_var2 := Int2.variant("CodecC"); + if(lengthof(v_var1) == 1 and v_var1[0] == "Rule1" and + lengthof(v_var2) == 1 and v_var2[0] == "Rule6") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010202_rules_for_multiple_encodings_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_002.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_002.ttcn new file mode 100644 index 0000000..c467a64 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270102_overwriting_rules/27010202_rules_for_multiple_encodings/Sem_27010202_rules_for_multiple_encodings_002.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.2.2, Verify that encoding related variant doesn't overwrite variants of other encodings + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// An encoding related variant will overwrite only variants related to the same encoding. + +module Sem_27010202_rules_for_multiple_encodings_002 { + + type component GeneralComp { + } + + type integer Int with { + encode "CodecA"; variant "CodecA"."Rule1"; + encode "CodecB"; variant "CodecB"."Rule2"; + } + + // Overwriting variant with an encoding reference + type Int Int3 with { + variant "CodecB"."Rule4"; // new variant for encoding "CodecB" overwrites + // the original variant "CodecB"."Rule2" + // Variant "CodecA"."Rule1" is unchanged as this definition contains no reference + // to "CodecB" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_27010202_rules_for_multiple_encodings_002 () runs on GeneralComp { + var RoUC v_var1 := Int3.variant("CodecA"), + v_var2 := Int3.variant("CodecB"); + if(lengthof(v_var1) == 1 and v_var1[0] == "Rule1" and + lengthof(v_var2) == 1 and v_var2[0] == "Rule4") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_27010202_rules_for_multiple_encodings_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2701_attribute_mechanism/270103_attributes_of_imported_elements/Sem_270103_attributes_of_imported_elements_001.ttcn b/core_language/27_specifying_attributes/2701_attribute_mechanism/270103_attributes_of_imported_elements/Sem_270103_attributes_of_imported_elements_001.ttcn new file mode 100644 index 0000000..8832009 --- /dev/null +++ b/core_language/27_specifying_attributes/2701_attribute_mechanism/270103_attributes_of_imported_elements/Sem_270103_attributes_of_imported_elements_001.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.1.3, Verify that attributes can be added to imported elements + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// In general, a language element is imported together with its attributes. In some cases these +// attributes may have to be changed when importing the language element, e.g. a type may be +// displayed in one module as ASP, then it is imported by another module where it should be +// displayed as PDU. For such cases it is allowed to change attributes on the import statement. +// When resolving the attributes, the import statement works as an additional higher scope unit +// on the top of the imported module. Attributes set in the import statement are valid only +// within the importing module. + +module Sem_270103_attributes_of_imported_elements_001 { + + import from Sem_270103_attributes_of_imported_elements_001_import { + type MyType + } with { + display "ASP" + }; + + type component GeneralComp {} + + testcase TC_Sem_270103_attributes_of_imported_elements_001() runs on GeneralComp { + if (MyType.display == "ASP") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_270103_attributes_of_imported_elements_001()); + } +} + +module Sem_270103_attributes_of_imported_elements_001_import { + type integer MyType; +} + diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_001.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_001.ttcn new file mode 100644 index 0000000..02e6607 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that error is generated for an unknown DefinitionRef in module attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a: +// DefinitionRef and FieldReference shall refer to a definition or field respectively which is within the module, +// group or definition to which the with statement is associated + +module NegSem_2702_the_with_statement_001 { + + type component GeneralComp { + } + + type record R { + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_001 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_001()); + } + +} with { encode(R2) "RuleA" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_002.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_002.ttcn new file mode 100644 index 0000000..cdd25f9 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_002.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that error is generated for an unknown DefinitionRef in group attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a: +// DefinitionRef and FieldReference shall refer to a definition or field respectively which is within the module, +// group or definition to which the with statement is associated + +module NegSem_2702_the_with_statement_002 { + group G { + type component GeneralComp { + } + + type record R { + } + } with { encode(R2) "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_002 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_003.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_003.ttcn new file mode 100644 index 0000000..beb6d2d --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_003.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that error is generated for an unknown FieldReference in type attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a: +// DefinitionRef and FieldReference shall refer to a definition or field respectively which is within the module, +// group or definition to which the with statement is associated + +module NegSem_2702_the_with_statement_003 { + + type component GeneralComp { + } + + type record R { + R field optional + } with { encode(field.field2) "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_003 () runs on GeneralComp { + var RoUC v_enc1 := R.field.encode, + v_enc2 := R.field.field.encode; + + if(lengthof(v_enc1) == 0 and v_enc2[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_003()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_004.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_004.ttcn new file mode 100644 index 0000000..6d4a818 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_004.ttcn @@ -0,0 +1,40 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that excluded definition cannot refer to a non-existent module item + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a: +// DefinitionRef and FieldReference shall refer to a definition or field respectively which is within the module, +// group or definition to which the with statement is associated + +module NegSem_2702_the_with_statement_004 { + + type component GeneralComp { + } + + const integer c_int1 := 1; + const integer c_int2 := 2; + const integer c_int3 := 3; + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_004 () runs on GeneralComp { + var RoUC v_enc1 := c_int1.encode, + v_enc2 := c_int2.encode, + v_enc3 := c_int3.encode; + if(v_enc1[0] == "RuleA" and v_enc2[0] == "RuleA" and v_enc3[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_004()); + } + +} with { encode(const all except {c_int4}) "RuleA" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_005.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_005.ttcn new file mode 100644 index 0000000..38e8321 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_005.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that excluded definition cannot refer to a non-existent group item + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a: +// DefinitionRef and FieldReference shall refer to a definition or field respectively which is within the module, +// group or definition to which the with statement is associated + + +module NegSem_2702_the_with_statement_005 { + + group G { + type component GeneralComp { + } + + const integer c_int1 := 1; + const integer c_int2 := 2; + const integer c_int3 := 3; + } with { encode(const all except {c_int4}) "RuleA" } + + const integer c_int4 := 4; + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_005 () runs on GeneralComp { + var RoUC v_enc1 := c_int1.encode, + v_enc2 := c_int2.encode, + v_enc3 := c_int3.encode, + v_enc4 := c_int4.encode; + if(v_enc1[0] == "RuleA" and v_enc2[0] == "RuleA" and v_enc3[0] == "RuleA" and lengthof(v_enc4) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_005()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_006.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_006.ttcn new file mode 100644 index 0000000..a7fe228 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_006.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that multiple attributes of the same kind cannot have different modifiers + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction b +// In case multiple attributes of the same type are allowed, all of them shall be without +// an additional modifier (override, @local) or the modifier shall be the same for all +// attributes. + +module NegSem_2702_the_with_statement_006 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + encode @local "RuleA"; + encode override "RuleB" + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_006 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R.field1.encode; + if(v_enc1 == { "RuleA", "RuleB" } and + lengthof(v_enc2) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_006()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_007.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_007.ttcn new file mode 100644 index 0000000..6a127cd --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_007.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that defining attributes of the same kind with and without a modifier is not possible + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction b +// In case multiple attributes of the same type are allowed, all of them shall be without +// an additional modifier (override, @local) or the modifier shall be the same for all +// attributes. + +module NegSem_2702_the_with_statement_007 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + encode @local "RuleA"; + encode "RuleB" + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_007 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R.field1.encode; + if(v_enc1 == { "RuleA", "RuleB" } and + lengthof(v_enc2) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSem_2702_the_with_statement_007()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_008.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_008.ttcn new file mode 100644 index 0000000..8755cef --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_008.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that dot notation in the FreeText part in not possible for encode attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction c +// Dot notation in the FreeText part is allowed for variant attributes only. + +module NegSem_2702_the_with_statement_008 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + encode "RuleA"."Version1"; + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_008 () runs on GeneralComp { + var RoUC v_enc1 := R.encode; + setverdict(pass); + } + + control{ + execute(TC_NegSem_2702_the_with_statement_008()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_009.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_009.ttcn new file mode 100644 index 0000000..9c2d352 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_009.ttcn @@ -0,0 +1,30 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that dot notation in the FreeText part in not possible for display attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction c +// Dot notation in the FreeText part is allowed for variant attributes only. + +module NegSem_2702_the_with_statement_009 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + display "RuleA"."Version1"; + } + + testcase TC_NegSem_2702_the_with_statement_009 () runs on GeneralComp { + var universal charstring v_d := R.display; + setverdict(pass); + } + + control{ + execute(TC_NegSem_2702_the_with_statement_009()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_010.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_010.ttcn new file mode 100644 index 0000000..47e7aa7 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_010.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that dot notation in the FreeText part in not possible for optional attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction c +// Dot notation in the FreeText part is allowed for variant attributes only. + +module NegSem_2702_the_with_statement_010 { + type component GeneralComp { + } + + type record R { + integer field1, + integer field2 + } + + template R m_msg := { + } with { + optional "implicit omit".""; + } + + testcase TC_NegSem_2702_the_with_statement_010 () runs on GeneralComp { + var universal charstring v_opt := m_msg.optional; + setverdict(pass); + } + + control{ + execute(TC_NegSem_2702_the_with_statement_010()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_011.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_011.ttcn new file mode 100644 index 0000000..a63bb15 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSem_2702_the_with_statement_011.ttcn @@ -0,0 +1,32 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that dot notation in the FreeText part in not possible for extension attributes + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction c +// Dot notation in the FreeText part is allowed for variant attributes only. + +module NegSem_2702_the_with_statement_011 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + extension "RuleA"."Version1"; + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2702_the_with_statement_011 () runs on GeneralComp { + var RoUC v_ext := R.extension; + setverdict(pass); + } + + control{ + execute(TC_NegSem_2702_the_with_statement_011()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/NegSyn_2702_the_with_statement_001.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/NegSyn_2702_the_with_statement_001.ttcn new file mode 100644 index 0000000..54b471d --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/NegSyn_2702_the_with_statement_001.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that string constant cannot be used in an attribute definition + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// The syntax for the argument of the with statement (i.e. the actual attributes) is defined as a free text string. + +module NegSyn_2702_the_with_statement_001 { + + type component GeneralComp { + } + + const charstring c_enc := "RuleA"; + + type record R { + } with { encode c_enc } + + type record of universal charstring RoUC; + + testcase TC_NegSyn_2702_the_with_statement_001 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_NegSyn_2702_the_with_statement_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_001.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_001.ttcn new file mode 100644 index 0000000..4bdff53 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that DefinitionRef can be used to identify a field within a module + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// DefinitionRef and FieldReference identify a definition or field respectively which is within the module, group or +// definition to which the with statement is associated. + +module Sem_2702_the_with_statement_001 { + + type component GeneralComp { + } + + type record R { + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_001 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_001()); + } + +} with { encode(R) "RuleA" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_002.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_002.ttcn new file mode 100644 index 0000000..53874d6 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_002.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that DefinitionRef can be used to identify a field within a group + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// DefinitionRef and FieldReference identify a definition or field respectively which is within the module, group or +// definition to which the with statement is associated. + +module Sem_2702_the_with_statement_002 { + group G { + type component GeneralComp { + } + + type record R { + } + } with { encode(R) "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_002 () runs on GeneralComp { + var RoUC v_enc := R.encode; + if(v_enc[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_003.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_003.ttcn new file mode 100644 index 0000000..180355e --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_003.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that FieldReference can be used to identify a field within a definition + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// DefinitionRef and FieldReference identify a definition or field respectively which is within the module, group or +// definition to which the with statement is associated. + +module Sem_2702_the_with_statement_003 { + + type component GeneralComp { + } + + type record R { + R field optional + } with { encode(field.field) "RuleA" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_003 () runs on GeneralComp { + var RoUC v_enc1 := R.field.encode, + v_enc2 := R.field.field.encode; + + if(lengthof(v_enc1) == 0 and v_enc2[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_003()); + } +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_004.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_004.ttcn new file mode 100644 index 0000000..3a0577c --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_004.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that AllRef can be used to apply attributes to multiple module items + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// AllRef can be used to apply attributes to multiple language elements defined within the scope to +// which the with statement is associated. AllRef provides a flexible mechanism to select all language +// elements or all language elements of a certain kind defined in a given scope. + +module Sem_2702_the_with_statement_004 { + + type component GeneralComp { + } + + const integer c_int := 1; + modulepar integer PX_INT := 1; + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_004 () runs on GeneralComp { + var RoUC v_enc1 := c_int.encode, + v_enc2 := PX_INT.encode; + if(v_enc1[0] == "RuleA" and lengthof(v_enc2) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_004()); + } + +} with { encode(const all) "RuleA" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_005.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_005.ttcn new file mode 100644 index 0000000..233b5a9 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_005.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that AllRef can be used to apply attributes to multiple group items + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// AllRef can be used to apply attributes to multiple language elements defined within the scope to +// which the with statement is associated. AllRef provides a flexible mechanism to select all language +// elements or all language elements of a certain kind defined in a given scope. + +module Sem_2702_the_with_statement_005 { + + group G { + type component GeneralComp { + } + + const integer c_int := 1; + modulepar integer PX_INT := 1; + } with { encode(const all) "RuleA" } + + const integer c_int2 := 0; + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_005 () runs on GeneralComp { + var RoUC v_enc1 := c_int.encode, + v_enc2 := PX_INT.encode, + v_enc3 := c_int2.encode; + if(v_enc1[0] == "RuleA" and lengthof(v_enc2) == 0 and lengthof(v_enc3) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_005()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_006.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_006.ttcn new file mode 100644 index 0000000..b04414c --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_006.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that definitions can be excluded if AllRef is used in the with clause on a module level + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Individual language elements that are not affected by an attribute can be excluded from a set of selected +// language elements in the except clause. + +module Sem_2702_the_with_statement_006 { + + type component GeneralComp { + } + + const integer c_int1 := 1; + const integer c_int2 := 2; + const integer c_int3 := 3; + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_006 () runs on GeneralComp { + var RoUC v_enc1 := c_int1.encode, + v_enc2 := c_int2.encode, + v_enc3 := c_int3.encode; + if(v_enc1[0] == "RuleA" and lengthof(v_enc2) == 0 and v_enc3[0] == "RuleA") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_006()); + } + +} with { encode(const all except {c_int2}) "RuleA" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_007.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_007.ttcn new file mode 100644 index 0000000..53c7de3 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_007.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that definitions can be excluded if AllRef is used in the with clause on a module level + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Individual language elements that are not affected by an attribute can be excluded from a set of selected +// language elements in the except clause. + +module Sem_2702_the_with_statement_007 { + + group G { + type component GeneralComp { + } + + const integer c_int1 := 1; + const integer c_int2 := 2; + const integer c_int3 := 3; + } with { encode(const all except {c_int2}) "RuleA" } + + const integer c_int4 := 4; + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_007 () runs on GeneralComp { + var RoUC v_enc1 := c_int1.encode, + v_enc2 := c_int2.encode, + v_enc3 := c_int3.encode, + v_enc4 := c_int4.encode; + if(v_enc1[0] == "RuleA" and lengthof(v_enc2) == 0 and v_enc3[0] == "RuleA" and lengthof(v_enc4) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_007()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_008.ttcn b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_008.ttcn new file mode 100644 index 0000000..88ea121 --- /dev/null +++ b/core_language/27_specifying_attributes/2702_the_with_statement/Sem_2702_the_with_statement_008.ttcn @@ -0,0 +1,43 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.2, Verify that multiple attributes of the same kind can have the same modifier + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Restriction b +// In case multiple attributes of the same type are allowed, all of them shall be without +// an additional modifier (override, @local) or the modifier shall be the same for all +// attributes. + +module Sem_2702_the_with_statement_008 { + type component GeneralComp { + } + + type record R { + integer field1 + } with { + encode @local "RuleA"; + encode @local "RuleB" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2702_the_with_statement_008 () runs on GeneralComp { + var RoUC v_enc1 := R.encode, + v_enc2 := R.field1.encode; + if(v_enc1 == { "RuleA", "RuleB" } and + lengthof(v_enc2) == 0) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + + control{ + execute(TC_Sem_2702_the_with_statement_008()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_001.ttcn b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_001.ttcn new file mode 100644 index 0000000..1e25ccd --- /dev/null +++ b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_001.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.3, Verify that only one display attribute can be defined for a definition + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a +// At most one display attribute shall be applied to each definition, each individual field reference or +// language element to which a with statement is associated. + +module NegSem_2703_display_attributes_001 { + + type component GeneralComp { + } + + type record MyService { + integer i, + float f + } with { display "ServiceCall" display "blue"} // MyRecord will be displayed as a ServiceCall + + testcase TC_NegSem_2703_display_attributes_001 () runs on GeneralComp { + var universal charstring v_display := MyService.display; + if(v_display == "ServiceCall") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_2703_display_attributes_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_002.ttcn b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_002.ttcn new file mode 100644 index 0000000..ced9797 --- /dev/null +++ b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.3, Verify that only one display attribute can be defined for a field + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a +// At most one display attribute shall be applied to each definition, each individual field reference or +// language element to which a with statement is associated. + +module NegSem_2703_display_attributes_002 { + + type component GeneralComp { + } + + type record MyService { + integer i, + float f + } with { display(f) "ServiceCall" display(f) "blue"} + + testcase TC_NegSem_2703_display_attributes_002 () runs on GeneralComp { + var universal charstring v_display := MyService.f.display; + if(v_display == "ServiceCall") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_2703_display_attributes_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_003.ttcn b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_003.ttcn new file mode 100644 index 0000000..b69a311 --- /dev/null +++ b/core_language/27_specifying_attributes/2703_display_attributes/NegSem_2703_display_attributes_003.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.3, Verify that only one display attribute can be defined for a definition + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a +// At most one display attribute shall be applied to each definition, each individual field reference or +// language element to which a with statement is associated. + +module NegSem_2703_display_attributes_003 { + + type component GeneralComp { + } + + type record MyService { + integer i, + float f + } + + testcase TC_NegSem_2703_display_attributes_003 () runs on GeneralComp { + var universal charstring v_display := MyService.display; + if(v_display == "ServiceCall") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_2703_display_attributes_003()); + } + +} with { display "ServiceCall" display "blue"} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2703_display_attributes/Sem_2703_display_attributes_001.ttcn b/core_language/27_specifying_attributes/2703_display_attributes/Sem_2703_display_attributes_001.ttcn new file mode 100644 index 0000000..fbce185 --- /dev/null +++ b/core_language/27_specifying_attributes/2703_display_attributes/Sem_2703_display_attributes_001.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.3, Verify that display attribute can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// All TTCN-3 language elements can have display attributes to specify how particular language elements shall be +// displayed in. + +module Sem_2703_display_attributes_001 { + + type component GeneralComp { + } + + type record MyService { + integer i, + float f + } with { display "ServiceCall" } // MyRecord will be displayed as a ServiceCall + + testcase TC_Sem_2703_display_attributes_001 () runs on GeneralComp { + var universal charstring v_display := MyService.display; + if(v_display == "ServiceCall") { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2703_display_attributes_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_001.ttcn b/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_001.ttcn new file mode 100644 index 0000000..669699c --- /dev/null +++ b/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_001.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.4, Verify that a single encode attribute can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Encoding rules define how a particular value, template, etc. shall be encoded and transmitted +// over a communication port and how received signals shall be decoded. TTCN-3 does not have +// a default encoding mechanism. This means that encoding rules or encoding directives are defined +// in some external manner to TTCN-3. +// The encode attribute allows the association of some referenced encoding rule or encoding +// directive to be made to a TTCN-3 definition. + +module Sem_2704_encoding_attributes_001 { + + type component GeneralComp { + } + + type charstring MyType; // Normally encoded according to the "Global encoding rule" + group myRecords { + type record MyPDU1 { + integer field1, // field1 will be encoded according to "Rule 3" + boolean field2, // field2 will be encoded according to "Rule 3" + MyType field3 // field3 will be encoded according to "Rule 2" + } with { encode (field1, field2) "Rule 3" } + } with { encode "Rule 2" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2704_encoding_attributes_001 () runs on GeneralComp { + var RoUC v_enc := MyPDU1.encode; + if(v_enc == { "Rule 2" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2704_encoding_attributes_001()); + } + +} with { encode "Global encoding rule" } \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_002.ttcn b/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_002.ttcn new file mode 100644 index 0000000..2834bea --- /dev/null +++ b/core_language/27_specifying_attributes/2704_encoding_attributes/Sem_2704_encoding_attributes_002.ttcn @@ -0,0 +1,37 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.4, Verify that multiple encode attributes can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The with statement may contain more than one encode attribute. In this case, multiple encodings are +// supported in the context where the attribute is used. + +module Sem_2704_encoding_attributes_002 { + + type component GeneralComp { + } + + type record MyPDU { + integer field1, + boolean field2 + } with { encode "Codec A" encode "Codec B" encode "Codec C" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2704_encoding_attributes_002 () runs on GeneralComp { + var RoUC v_enc := MyPDU.encode; + if(v_enc == { "Codec A", "Codec B", "Codec C" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2704_encoding_attributes_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_001.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_001.ttcn new file mode 100644 index 0000000..4f4e149 --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_001.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that a variant with no encoding references is not allowed for multiple encodings + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// It is not allowed to define variant attributes with no encoding reference if multiple encodings +// are used. + +module NegSem_2705_variant_attributes_001 { + + type component GeneralComp { + } + + type charstring Multi3 with { + encode "Codec1"; encode "Codec2"; + variant "Rule1"; + } // the statement will produce an error as there are multiple encodings and the + // variant attribute doesn't specify encoding reference + + type record of universal charstring RoUC; + + testcase TC_NegSem_2705_variant_attributes_001 () runs on GeneralComp { + var RoUC v_variant := Multi3.variant; + if(v_variant == { "Rule1" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_2705_variant_attributes_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_002.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_002.ttcn new file mode 100644 index 0000000..ac22366 --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_002.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that an error is generated if variant contains an unknown encoding reference + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a) +// When dot notation is used in the variant attribute value for an element, the strings preceding +// the dot symbol shall resolve into one of the encode attribute values associated with the same +// element. + +module NegSem_2705_variant_attributes_002 { + + type component GeneralComp { + } + + type charstring Multi with { + encode "Codec1"; encode "Codec2"; + variant "Codec3"."Rule1"; + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2705_variant_attributes_002 () runs on GeneralComp { + setverdict(pass); + } + + control{ + execute(TC_NegSem_2705_variant_attributes_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_003.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_003.ttcn new file mode 100644 index 0000000..227c45f --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/NegSem_2705_variant_attributes_003.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that an error is generated if variant contains an unknown encoding reference (inside a list) + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a) +// When dot notation is used in the variant attribute value for an element, the strings preceding +// the dot symbol shall resolve into one of the encode attribute values associated with the same +// element. + +module NegSem_2705_variant_attributes_003 { + + type component GeneralComp { + } + + type charstring Multi with { + encode "Codec1"; encode "Codec2"; + variant {"Codec1", "Codec3"}."Rule1"; + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2705_variant_attributes_003 () runs on GeneralComp { + setverdict(pass); + } + + control{ + execute(TC_NegSem_2705_variant_attributes_003()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_001.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_001.ttcn new file mode 100644 index 0000000..8aad9b9 --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_001.ttcn @@ -0,0 +1,39 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that a single variant attribute can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// To specify a refinement of the currently specified encoding scheme instead of its replacement, +// the variant attribute shall be used. The variant attributes are different from other attributes, +// because they are closely related to encode attributes. Therefore, for variant attributes, +// additional overwriting rules apply (see clause 27.1.2.1). + +module Sem_2705_variant_attributes_001 { + + type component GeneralComp { + } + + type record MyPDU { + integer field1, + boolean field2 + } with { variant "Rule A" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2705_variant_attributes_001 () runs on GeneralComp { + var RoUC v_variant := MyPDU.variant; + if(v_variant == { "Rule A" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2705_variant_attributes_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_002.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_002.ttcn new file mode 100644 index 0000000..d84165d --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_002.ttcn @@ -0,0 +1,36 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that multiple variant attributes can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The with statement can contain any number of variant attributes. + +module Sem_2705_variant_attributes_002 { + + type component GeneralComp { + } + + type record MyPDU { + integer field1, + boolean field2 + } with { variant "Rule A" encode "Rule B" encode "Rule C" } + + type record of universal charstring RoUC; + + testcase TC_Sem_2705_variant_attributes_002 () runs on GeneralComp { + var RoUC v_enc := MyPDU.encode; + if(v_enc == { "Rule A", "Rule B", "Rule C" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2705_variant_attributes_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_003.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_003.ttcn new file mode 100644 index 0000000..88ca1ef --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_003.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that a dot notation is available for variant attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If multiple encodings (see clause 27.4) are used, the variant attribute value shall be composed +// of two parts separated by a dot. Such variant attributes are called encoding related variant +// attributes. The first part of the attribute specifies the encodings the variant is related to. +// One possible notation is a simple string when the variant is related to a single encode attribute. +// The second part of the attribute (following the dot symbol) is a simple string that specifies the +// variant value. + +module Sem_2705_variant_attributes_003 { + + type component GeneralComp { + } + + type charstring Multi with { + encode "Codec1"; variant "Codec1"."Rule1"; + encode "Codec2"; variant "Codec2"."Rule3"; + }; // multiple encodings ("Codec1", "Codec2"), the variant "Rule1" is valid + // for the "Codec1" encoding only, while the variant "Rule3" applies only + // for the "Codec2" encoding + + type record of universal charstring RoUC; + + testcase TC_Sem_2705_variant_attributes_003 () runs on GeneralComp { + var RoUC v_variant1 := Multi.variant("Codec1"), + v_variant2 := Multi.variant("Codec2"); + if(v_variant1 == { "Rule1" } and v_variant2 == { "Rule3" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2705_variant_attributes_003()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_004.ttcn b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_004.ttcn new file mode 100644 index 0000000..3d093a1 --- /dev/null +++ b/core_language/27_specifying_attributes/2705_variant_attributes/Sem_2705_variant_attributes_004.ttcn @@ -0,0 +1,42 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.5, Verify that a dot notation is available for variant attributes + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// If multiple encodings (see clause 27.4) are used, the variant attribute value shall be composed +// of two parts separated by a dot. Such variant attributes are called encoding related variant +// attributes. The first part of the attribute specifies the encodings the variant is related to. +// One possible notation is a comma separated list of strings enclosed in curly brackets if +// the variant is related to multiple encodings. The second part of the attribute (following the dot +// symbol) is a simple string that specifies the variant value. + +module Sem_2705_variant_attributes_004 { + + type component GeneralComp { + } + + type charstring Multi2 with { + encode "Codec1"; encode "Codec2"; + variant {"Codec1","Codec2"}."Rule1"; + }; // multiple encodings ("Codec1", "Codec2"), variant "Rule1" applies to both of them + + type record of universal charstring RoUC; + + testcase TC_Sem_2705_variant_attributes_004 () runs on GeneralComp { + var RoUC v_variant1 := Multi2.variant("Codec1"), + v_variant2 := Multi2.variant("Codec2"); + if(v_variant1 == { "Rule1" } and v_variant2 == { "Rule1" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2705_variant_attributes_004()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_001.ttcn b/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_001.ttcn new file mode 100644 index 0000000..acb79f1 --- /dev/null +++ b/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_001.ttcn @@ -0,0 +1,34 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.6, Verify that a single extension attribute can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Extension attributes can be used for proprietary extensions to TTCN-3. The with statement may contain +// any number of extension attributes. + +module Sem_2706_extension_attributes_001 { + + type component GeneralComp { + } + + type charstring MyType with { extension "My custom extension" }; + + type record of universal charstring RoUC; + + testcase TC_Sem_2706_extension_attributes_001 () runs on GeneralComp { + var RoUC v_ext := MyType.extension; + if(v_ext == { "My custom extension" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2706_extension_attributes_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_002.ttcn b/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_002.ttcn new file mode 100644 index 0000000..31554ed --- /dev/null +++ b/core_language/27_specifying_attributes/2706_extension_attributes/Sem_2706_extension_attributes_002.ttcn @@ -0,0 +1,38 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.6, Verify that multiple extension attributes can be defined + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// Extension attributes can be used for proprietary extensions to TTCN-3. The with statement may contain +// any number of extension attributes. + +module Sem_2706_extension_attributes_002 { + + type component GeneralComp { + } + + type charstring MyType with { + extension "My custom extension"; + extension "Second extension"; + extension "Yet another extension"; + }; + + type record of universal charstring RoUC; + + testcase TC_Sem_2706_extension_attributes_002 () runs on GeneralComp { + var RoUC v_ext := MyType.extension; + if(v_ext == { "My custom extension", "Second extension", "Yet another extension" }) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_2706_extension_attributes_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn new file mode 100644 index 0000000..30a5fd2 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_001.ttcn @@ -0,0 +1,95 @@ +/*************************************************** + ** @author STF 433 (updated by STF 521) + ** @version 0.0.2 + ** @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/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn new file mode 100644 index 0000000..5cc3772 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_002.ttcn @@ -0,0 +1,94 @@ +/*************************************************** + ** @author STF 433 + ** @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_002 { + + 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 + } with { optional "implicit omit"} //not valid optional attribute + // TT: this is not forbidden, it just should not have any effect on the templates + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_2707_OptionalAttributes_002() 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_002()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn new file mode 100644 index 0000000..a4fd50f --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/NegSem_2707_OptionalAttributes_003.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @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_003 { + + 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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {b:=3,c:=true}, //a is still undefined + field7 := {a:=3,c:=true}, //b is still undefined + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional (field6.a, field7.b) "implicit omit"} + + const MessageType c_testMessage:= { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=3,b:=3,c:=true}, + field7 := {a:=3,b:=3,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_2707_OptionalAttributes_003() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { //cannot match not fully defined template + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_2707_OptionalAttributes_003()); +} + +} with { optional override "explicit omit"} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn new file mode 100644 index 0000000..0b6b499 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_001.ttcn @@ -0,0 +1,104 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {c:=true}, //a and b fields are omitted + field7 := {c:=true}, //a and b fields are omitted + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional "implicit omit"} + + const MessageType c_testMessage:= { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=1,b:=omit,c:=true}, + field7 := {a:=omit,b:=1,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_001() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_001()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_002.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_002.ttcn new file mode 100644 index 0000000..5412a54 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_002.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_002 { + + 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 + } + + 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}, //a and b fields are specifically defined + field7 := {a:=1,b:=2,c:=true}, //a and b fields are specifically defined + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional "implicit omit"} + + const MessageType c_testMessage:= { + 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} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_002() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_002()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_003.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_003.ttcn new file mode 100644 index 0000000..a4a6743 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_003.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_003 { + + 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 + } + + 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}, //a and b fields are specifically defined + field7 := {a:=1,b:=2,c:=true}, //a and b fields are specifically defined + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional "explicit omit"} + + const MessageType c_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} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_003() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_003()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_004.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_004.ttcn new file mode 100644 index 0000000..07d45fd --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_004.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_004 { + + 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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=omit,b:=omit,c:=true}, //a and b fields are specifically defined + field7 := {a:=omit,b:=omit,c:=true}, //a and b fields are specifically defined + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional "explicit omit"} + + const MessageType c_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} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_004() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_004()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_005.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_005.ttcn new file mode 100644 index 0000000..72f5cc1 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_005.ttcn @@ -0,0 +1,104 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_005 { + + 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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {b:=3,c:=true}, //a is omitted + field7 := {a:=3,c:=true}, //b is omitted + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional (field6, field7) "implicit omit"} + + + const MessageType c_testMessage:= { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=3,b:=3,c:=true}, + field7 := {a:=3,b:=3,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_005() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_005()); +} + +} with { optional "explicit omit"} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_006.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_006.ttcn new file mode 100644 index 0000000..5f4ac76 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_006.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_006 { + + 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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {c:=true}, //a and b fields are omitted + field7 := {c:=true}, //a and b fields are omitted + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + const MessageType c_testMessage:= { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {a:=1,b:=omit,c:=true}, + field7 := {a:=omit,b:=1,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_006() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_006()); +} + +} with { optional "implicit omit"} //this attribute has an effect only on the template definition in the module diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_007.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_007.ttcn new file mode 100644 index 0000000..9d4d1ec --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Sem_2707_OptionalAttributes_007.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_2707_OptionalAttributes_007 { + + 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 + } + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,4}, + field5 := e_black, + field6 := {c:=true}, //a and b fields are omitted + field7 := {c:=true}, //a and b fields are omitted + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } with { optional "implicit omit"} + + const MessageType c_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} + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_2707_OptionalAttributes_007() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_2707_OptionalAttributes_007()); +} + +} diff --git a/core_language/27_specifying_attributes/2707_optional_attributes/Syn_2707_OptionalAttributes_001.ttcn b/core_language/27_specifying_attributes/2707_optional_attributes/Syn_2707_OptionalAttributes_001.ttcn new file mode 100644 index 0000000..fdffcd2 --- /dev/null +++ b/core_language/27_specifying_attributes/2707_optional_attributes/Syn_2707_OptionalAttributes_001.ttcn @@ -0,0 +1,93 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:27.7, Ensure that the IUT correctly handles attribute definitions and their scoping rules + ** @verdict pass accept, noexecution + ***************************************************/ + +module Syn_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 + } + + 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} + } + + const MessageType c_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} + } with { optional "implicit omit"} //optional attribute can be accepted on constants + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Syn_2707_OptionalAttributes_001() runs on GeneralComp { + + var MessageType v_testMessage:=c_testMessage; + +} + +control{ + + execute(TC_Syn_2707_OptionalAttributes_001()); +} + +} diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_001.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_001.ttcn new file mode 100644 index 0000000..e88e7d0 --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_001.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode can reference only types listed in port definitions + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a +// If the setencode operation is applied to a single port, the referenced type shall be +// either listed in the in or out type list of the related port type or it shall be +// a reference to a field or element on any level of nesting of a type listed in the in +// or out type list of the related port type. + +module NegSem_2709_dynamic_configuration_001 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record MyPDU2 { + charstring field1, + charstring field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2709_dynamic_configuration_001 () runs on GeneralComp { + p.setencode(MyPDU2, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_NegSem_2709_dynamic_configuration_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_002.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_002.ttcn new file mode 100644 index 0000000..5a42096 --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_002.ttcn @@ -0,0 +1,56 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode can reference only fields of types listed in port definitions + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction a +// If the setencode operation is applied to a single port, the referenced type shall be +// either listed in the in or out type list of the related port type or it shall be +// a reference to a field or element on any level of nesting of a type listed in the in +// or out type list of the related port type. + +module NegSem_2709_dynamic_configuration_002 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record MyPDU2 { + charstring field1, + charstring field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2709_dynamic_configuration_002 () runs on GeneralComp { + p.setencode(MyPDU2.field1, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_NegSem_2709_dynamic_configuration_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_003.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_003.ttcn new file mode 100644 index 0000000..a91a2a3 --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_003.ttcn @@ -0,0 +1,50 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode cannot reference templates in the first parameter + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// The setencode operation can be used on a port or set of ports to dynamically select +// for the affected ports a single encode attribute value to be used for a type that +// has multiple encode attributes attached to it. + +module NegSem_2709_dynamic_configuration_003 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + template MyPDU m_msg := { + field1 := 1, + field2 := true + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2709_dynamic_configuration_003 () runs on GeneralComp { + p.setencode(m_msg, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_NegSem_2709_dynamic_configuration_003()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_004.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_004.ttcn new file mode 100644 index 0000000..43d167b --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/NegSem_2709_dynamic_configuration_004.ttcn @@ -0,0 +1,45 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that an error is generated if the second parameter of the setencode operation is not a universal charstring + ** @verdict pass reject + *****************************************************************/ + +// The following requirement is tested: +// Restriction b +// The SingleExpression used in the second parameter of the setencode operation shall be +// compatible with the universal charstring type. + +module NegSem_2709_dynamic_configuration_004 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_NegSem_2709_dynamic_configuration_004 () runs on GeneralComp { + p.setencode(MyPDU, 1); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_NegSem_2709_dynamic_configuration_004()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_001.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_001.ttcn new file mode 100644 index 0000000..0be520d --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_001.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode operation can be applied to a port + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The setencode operation dynamically restricts the number of encode attribute values of +// a referenced type or its fields or elements to a single value. Dependent on the +// language element preceding the dot, the encoding configuration is valid ... for all +// sending and receiving operations of a single port (single port reference)... + +module Sem_2709_dynamic_configuration_001 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2709_dynamic_configuration_001 () runs on GeneralComp { + p.setencode(MyPDU, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_Sem_2709_dynamic_configuration_001()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_002.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_002.ttcn new file mode 100644 index 0000000..5f14d7d --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_002.ttcn @@ -0,0 +1,47 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode operation can be applied to all ports + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The setencode operation dynamically restricts the number of encode attribute values of +// a referenced type or its fields or elements to a single value. Dependent on the +// language element preceding the dot, the encoding configuration is valid ... for all +// sending and receiving operations of all ports of the current component (all port +// notation)... + +module Sem_2709_dynamic_configuration_002 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2709_dynamic_configuration_002 () runs on GeneralComp { + all port.setencode(MyPDU, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_Sem_2709_dynamic_configuration_002()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_003.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_003.ttcn new file mode 100644 index 0000000..d78c379 --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_003.ttcn @@ -0,0 +1,46 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that the setencode operation can be applied to a port + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// The setencode operation dynamically restricts the number of encode attribute values of +// a referenced type or its fields or elements to a single value. Dependent on the +// language element preceding the dot, the encoding configuration is valid ... all codec +// functions and communication operations of the current component (self keyword). + +module Sem_2709_dynamic_configuration_003 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2709_dynamic_configuration_003 () runs on GeneralComp { + self.setencode(MyPDU, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_Sem_2709_dynamic_configuration_003()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_004.ttcn b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_004.ttcn new file mode 100644 index 0000000..f4c14a5 --- /dev/null +++ b/core_language/27_specifying_attributes/2709_dynamic_configuration/Sem_2709_dynamic_configuration_004.ttcn @@ -0,0 +1,44 @@ +/***************************************************************** + ** @author STF 548 + ** @version 0.0.1 + ** @purpose 1:27.9, Verify that an extended type reference can be used in the setencode operation + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ + +// The following requirement is tested: +// It is allowed to reference a field or element of a type using an extended type +// reference in the setencode operation. + +module Sem_2709_dynamic_configuration_004 { + + type port P message { + inout MyPDU; + } + + type component GeneralComp { + port P p; + } + + type record MyPDU { + integer field1, + boolean field2 + } with { + encode "Codec 1"; + encode "Codec 2"; + encode "Codec 3" + } + + type record of universal charstring RoUC; + + testcase TC_Sem_2709_dynamic_configuration_004 () runs on GeneralComp { + p.setencode(MyPDU.field1, "Codec 1"); + // Compilation and seamless execution tested. + // Actual effect not tested as it would require dedicated TCI implementation + setverdict(pass); + } + + control{ + execute(TC_Sem_2709_dynamic_configuration_004()); + } + +} \ No newline at end of file diff --git a/core_language/27_specifying_attributes/NOTES b/core_language/27_specifying_attributes/NOTES new file mode 100644 index 0000000..3ecc7fd --- /dev/null +++ b/core_language/27_specifying_attributes/NOTES @@ -0,0 +1,4 @@ +Semantics tests of section 27.7 also validate generic attribute handling behavior, +which applies to whole section 27. The reason it is in subsection 27.7, is because +optional attribute matching provides a means of semantic validation through message +loopback port. \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/NegSem_B010101_omitting_values_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/NegSem_B010101_omitting_values_001.ttcn new file mode 100644 index 0000000..6e45c05 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/NegSem_B010101_omitting_values_001.ttcn @@ -0,0 +1,59 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1.1, Ensure that the IUT correctly handles template matching of omitted values + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010101_omitting_values_001 { + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type set SetType { + integer a optional, + integer b optional, + boolean c + } + + type record MessageType { + RecordType field1, + SetType field2 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010101_omitting_values_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {a:=1,b:=omit,c:=omit}, //omitting a mandatory field + field2 := {a:=1,b:=omit,c:=omit} + } + + v_testMessage:= { + field1 := {a:=1,b:=omit,c:=true}, + field2 := {a:=1,b:=omit,c:=true} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010101_omitting_values_001()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_001.ttcn new file mode 100644 index 0000000..2954d8a --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_001.ttcn @@ -0,0 +1,67 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1.1, Ensure that the IUT correctly handles template matching of omitted values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010101_omitting_values_001 { + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type set SetType { + integer a optional, + integer b optional, + boolean c + } + + type record MessageType { + RecordType field1, + SetType field2 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010101_omitting_values_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {a:=1,b:=omit,c:=true}, + field2 := {a:=1,b:=omit,c:=true} + } + + v_testMessage:= { + field1 := {a:=1,b:=omit,c:=true}, + field2 := {a:=1,b:=omit,c:=true} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010101_omitting_values_001()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_002.ttcn new file mode 100644 index 0000000..f3d2479 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B010101_omitting_values/Sem_B010101_omitting_values_002.ttcn @@ -0,0 +1,67 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1.1, Ensure that the IUT correctly handles template matching of omitted values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010101_omitting_values_002 { + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type set SetType { + integer a optional, + integer b optional, + boolean c + } + + type record MessageType { + RecordType field1, + SetType field2 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010101_omitting_values_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {a:=1,b:=omit,c:=true}, //value mismatch + field2 := {a:=1,b:=omit,c:=true} + } + + v_testMessage:= { + field1 := {a:=1,b:=2,c:=true}, + field2 := {a:=1,b:=omit,c:=true} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010101_omitting_values_002()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_001.ttcn new file mode 100644 index 0000000..4a5e845 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_001.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_001()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_002.ttcn new file mode 100644 index 0000000..8a4e096 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_002.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_002 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := 0, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_002()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_003.ttcn new file mode 100644 index 0000000..4054633 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_003.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_003 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test strin", //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_003()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_004.ttcn new file mode 100644 index 0000000..ed1a9f9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_004.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_004 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := false, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_004()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_005.ttcn new file mode 100644 index 0000000..4f08664 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_005.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_005 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := 1, + field2 := "test string", + field3 := true, + field4 := {1,2,3,5}, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_005()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_006.ttcn new file mode 100644 index 0000000..b3aff63 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_006.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_006 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_006() 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_white, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_006()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_007.ttcn new file mode 100644 index 0000000..5b3471d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_007.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_007 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_007() 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:=3,c:=true}, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_007()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn new file mode 100644 index 0000000..fb950bb --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_008.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_008 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_008() 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:=2,b:=1,c:=true}, //mismatching value + 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:=1,b:=2,c:=true}, + field7 := {a:=1,b:=2,c:=true}, + field8 := {a:=1}, + field9 := {1}, + field10 := {1,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_008()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn new file mode 100644 index 0000000..8a7b666 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_009.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_009 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_009() 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 := {c:=true}, //mismatching value + field9 := {1}, + field10 := {1,2} + } + + v_testMessage:= { + 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} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_009()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn new file mode 100644 index 0000000..da006ec --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_010.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_010 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0101_matching_specific_value_010() 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,2}, //mismatching value + field10 := {1,2} + } + + v_testMessage:= { + 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} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B0101_matching_specific_value_010()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn new file mode 100644 index 0000000..0fb3d60 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0101_matching_specific_values/B0101_toplevel/Sem_B0101_matching_specific_value_011.ttcn @@ -0,0 +1,103 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.1, Ensure that the IUT correctly handles template matching of specific values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0101_matching_specific_value_011 { + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0111_matching_specific_value_011() 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 := {2,1} //different order + } + + v_testMessage:= { + 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} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B0111_matching_specific_value_011()); +} + +} diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn new file mode 100644 index 0000000..4de6fd7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_001.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + + type record MessageType { + integer field1, + charstring field2 + } + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010201_value_list_001() runs on GeneralComp { + + var float v_testMessage; + v_testMessage:= 2.0; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010201_value_list_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn new file mode 100644 index 0000000..d87b242 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_002.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + + type record MessageType { + integer field1, + charstring field2 + } + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010201_value_list_002() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010201_value_list_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn new file mode 100644 index 0000000..5b58bab --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_003.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + + type record MessageType { + integer field1, + charstring field2 + } + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010201_value_list_003() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_RoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010201_value_list_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn new file mode 100644 index 0000000..504c3d7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/NegSem_B010201_value_list_004.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 521 + ** @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: +// Restriction C: Templates in the template list shall obey the template(present) restriction + +module NegSem_B010201_value_list_004 { + + + type record MessageType { + integer field1, + charstring field2 optional + } + + template(present) MessageType mw_examplePresent := {1, ?}; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010201_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage; + var template(omit) MessageType v_present; + v_present := mw_examplePresent; // error: incorrect + + v_testMessage:= { + field1:= 1, + field2:= "abc" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(v_present) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010201_value_list_004()); +} + +} \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn new file mode 100644 index 0000000..8eb977c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_001.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.1, Ensure that the IUT correctly handles template matching of listed multiple values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010201_value_list_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010201_value_list_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (1,2), + field2 := ("test string","something else"), + field3 := (e_green,e_black), + field4 := ({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := ({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=2,c:=true}, + field5 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010201_value_list_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn new file mode 100644 index 0000000..dc11f7c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_002.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 521 + ** @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; + + type record MessageType { + integer field1, + charstring field2 + } + template RoI m_RoI := {1,2,3,4}; + template integer mw_RoI := (all from m_RoI); + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010201_value_list_002() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_RoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010201_value_list_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn new file mode 100644 index 0000000..317baf5 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_003.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 521 + ** @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; + + type record MessageType { + integer field1, + charstring field2 + } + template SoI m_SoI := {1,2,3,4}; + template integer mw_SoI := (all from m_SoI); + + type port loopbackPort message { + inout integer + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010201_value_list_003() runs on GeneralComp { + + var integer v_testMessage; + v_testMessage:= 2; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_SoI) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010201_value_list_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn new file mode 100644 index 0000000..e3aac8a --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010201_value_list/Sem_B010201_value_list_004.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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(present) MessageType mw_examplePresent := {1, ?}; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010201_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage; + v_testMessage:= { + field1:= 1, + field2:= "abc" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_examplePresent) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010201_value_list_004()); +} + +} \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn new file mode 100644 index 0000000..768aeb7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_001.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ + +module NegSem_B010202_complemented_value_list_001 { + + type record MessageType { + integer field1, + RoI field2 + } + + type record of integer RoI; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010202_complemented_value_list_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template RoI m_RoI2 := {2, *, 4}; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(0, all from m_RoI2), // shall cause an error because t_RoI2 contains AnyElementsOrNone + field2 := complement({2, 3, (6..9)}) + } + + v_testMessage:= { + field1 := 0, + field2 := {0,1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010202_complemented_value_list_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn new file mode 100644 index 0000000..c8beeca --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_002.ttcn @@ -0,0 +1,62 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ + +module NegSem_B010202_complemented_value_list_002 { + + type record MessageType { + integer field1, + RoI field2 + } + + type record of integer RoI; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010202_complemented_value_list_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template RoI m_RoI1 := {2, 3, (6..9)}; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(0, 100), + field2 := complement(all from m_RoI1)// causes an error because member type of t_RoI1 (integer) is not compatible + // with the complemented list template type (RoI) + + } + + v_testMessage:= { + field1 := 0, + field2 := {0,1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010202_complemented_value_list_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn new file mode 100644 index 0000000..d51a553 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_003.ttcn @@ -0,0 +1,74 @@ +/*************************************************** + ** @author STF 470 + ** @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 + ***************************************************/ + +module NegSem_B010202_complemented_value_list_003 { + +// type enumerated EnumeratedType {e_black, e_white, e_green}; + +// type record RecordType { +// integer a optional, +// integer b optional, +// boolean c +// } + +// type union UnionType { +// integer a, +// EnumeratedType b, +// boolean c +// } + + type record MessageType { + integer field1, + RoI field2 + } + + type record of integer RoI; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010202_complemented_value_list_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template RoI m_RoI4 := ?; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(0, 100), + field2 := complement(all from m_RoI4)// causes an error because t_RoI4 resolves into a matching mechanism + } + + v_testMessage:= { + field1 := 0, + field2 := {0,1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010202_complemented_value_list_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_004.ttcn new file mode 100644 index 0000000..b94c3c9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/NegSem_B010202_complemented_value_list_004.ttcn @@ -0,0 +1,47 @@ +/*************************************************** + ** @author STF 487 (updated by STF 527) + ** @version 0.0.2 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value omit + ** @verdict pass accept, ttcn3verdict:fail + ***************************************************/ + +//Restriction e) The complement of a template list shall not match omit. + +module NegSem_B010202_complemented_value_list_004 { + + type record MyRec { + integer field1, + float field2 optional + } + + type port loopbackPort message { + inout MyRec + } + + + type component GeneralComp { + port loopbackPort messagePort + } + + testcase TC_NegSem_B010202_complemented_value_list_004() runs on GeneralComp { + var MyRec v_testMessage := { field1 := 1, field2 := omit}; + var template MyRec mw_matchingTemplate:= { field1 := ?, field2 := complement(1.0, (2.0 .. 5.0)) }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { // won't match as complement never matches omit + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + } + + control { + execute(TC_NegSem_B010202_complemented_value_list_004()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_001.ttcn new file mode 100644 index 0000000..97fcd45 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_001.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test", + field3 := e_white, + field4 := {a:=1,b:=2,c:=false}, + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_002.ttcn new file mode 100644 index 0000000..7fc5da8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_002.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 2, //mismatching complement in the template + field2 := "test", + field3 := e_white, + field4 := {a:=1,b:=2,c:=false}, + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_003.ttcn new file mode 100644 index 0000000..37d8804 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_003.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_003 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test string", //mismatching complement in the template + field3 := e_white, + field4 := {a:=1,b:=2,c:=false}, + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_004.ttcn new file mode 100644 index 0000000..44e1a28 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_004.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_004 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test ", + field3 := e_green, //mismatching complement in the template + field4 := {a:=1,b:=2,c:=false}, + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_005.ttcn new file mode 100644 index 0000000..20a4e3f --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_005.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_005 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test ", + field3 := e_white, + field4 := {a:=1,b:=2,c:=true}, //mismatching complement in the template + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_006.ttcn new file mode 100644 index 0000000..00e23b8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_006.ttcn @@ -0,0 +1,79 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_006 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_006() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(1,2), + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test ", + field3 := e_white, + field4 := {a:=1,b:=2,c:=false}, + field5 := {b:=e_white} //mismatching complement in the template + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn new file mode 100644 index 0000000..9006a73 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_007.ttcn @@ -0,0 +1,82 @@ +/*************************************************** + ** @author STF 470 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value listing + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010202_complemented_value_list_007 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5 + } + + type record of integer RoI; + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_007() runs on GeneralComp { + + var MessageType v_testMessage; + + template RoI m_RoI1 := {1, 2, (6..9)}; + + template MessageType mw_matchingTemplate:= + { + field1 := complement(all from m_RoI1, 100), // fine as items from m_RoI1 resolve to integer templates + field2 := complement("test string","something else"), + field3 := complement(e_green,e_black), + field4 := complement({a:=1,b:=1,c:=false},{a:=1,b:=2,c:=true}), + field5 := complement({a:=1},{b:=e_white}) + } + + v_testMessage:= { + field1 := 0, + field2 := "test ", + field3 := e_white, + field4 := {a:=1,b:=2,c:=false}, + field5 := {a:=2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_008.ttcn new file mode 100644 index 0000000..ad7823c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010202_complemented_value_list/Sem_B010202_complemented_value_list_008.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.2, Ensure that the IUT correctly handles template matching of complemented value omit + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction e) The complement of a template list shall not match omit. + +module Sem_B010202_complemented_value_list_008 { + +type record MyRec{ + integer field1, + float field2 optional + } + + type port loopbackPort message { + inout MyRec + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010202_complemented_value_list_008() runs on GeneralComp { + + var MyRec v_testMessage; + + template MyRec mw_matchingTemp:={field1:=1,field2:=omit}; + + template MyRec mw_matchingTemplate:=complement(mw_matchingTemp); + + + v_testMessage:= {field1:=11,field2:=omit}; // correct, field2 is omit and is not matched + + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010202_complemented_value_list_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_001.ttcn new file mode 100644 index 0000000..ecb2b12 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_001.ttcn @@ -0,0 +1,83 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.3, Ensure that the IUT correctly handles template matching of ? values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010203_any_value_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5, + RecordType field6, + UnionType field7 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010203_any_value_001() runs on GeneralComp { + + template MessageType mw_matchingTemplate:= + { + field1 := ?, + field2 := ?, + field3 := ?, + field4 := ?, + field5 := ?, + field6 := {a:=1,b:=?,c:=true}, + field7 := {a:=?} + } + + var MessageType v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=2,c:=true}, + field7 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010203_any_value_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn new file mode 100644 index 0000000..0f71e15 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010203_any_value/Sem_B010203_any_value_002.ttcn @@ -0,0 +1,85 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.3, Ensure that the IUT correctly handles template matching of ? values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010203_any_value_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5, + RecordType field6, + UnionType field7 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010203_any_value_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := ?, + field2 := ?, + field3 := ?, + field4 := ?, + field5 := ?, + field6 := {a:=1,b:=?,c:=true}, //omitted value does not match ? + field7 := {a:=?} + } + + v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=omit,c:=true}, + field7 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010203_any_value_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn new file mode 100644 index 0000000..6a638e8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_001.ttcn @@ -0,0 +1,74 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that the IUT correctly handles template matching of * values + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010204_any_value_or_none_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + EnumeratedType field3, + RecordType field4, + UnionType field5, + RecordType field6 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010204_any_value_or_none_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := *, // * is used on non-optional fields + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := {a:=1,b:=*,c:=true} + } + + v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=omit,c:=true} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010204_any_value_or_none_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn new file mode 100644 index 0000000..c123204 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/NegSem_B010204_any_value_or_none_002.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that the IUT correctly handles template matching of * values + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010204_any_value_or_none_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1 optional, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6, + UnionType field7 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010204_any_value_or_none_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := *, + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := {a:=1,b:=*,c:=true}, + field7 := {a:=*} //use of * on a union element + } + + v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=omit,c:=true}, + field7 := {a:=1} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010204_any_value_or_none_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn new file mode 100644 index 0000000..24e6d74 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_001.ttcn @@ -0,0 +1,82 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that the IUT correctly handles template matching of * values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010204_any_value_or_none_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1 optional, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010204_any_value_or_none_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := *, + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := {a:=1,b:=*,c:=true} + } + + v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=omit,c:=true} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010204_any_value_or_none_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn new file mode 100644 index 0000000..b5cffe2 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_002.ttcn @@ -0,0 +1,34 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone can be assigned to top-level template + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// It can be assigned to templates of any type as a whole. + +module Sem_B010204_any_value_or_none_002 { + + template integer t_anyOrNone := *; // top-level static template + + + type component GeneralComp { + } + + function f(in template integer p1) { + } + + testcase TC_Sem_B010204_any_value_or_none_002() runs on GeneralComp { + + var template integer vt_anyOrNone := *; // top-level template variable + f(*); // top-level template parameter + setverdict(pass); + } + + control{ + execute(TC_Sem_B010204_any_value_or_none_002()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn new file mode 100644 index 0000000..c677f97 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_003.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone can be used for matching optional fields + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// 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_003 { + + 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_003() runs on GeneralComp { + var Set1 v_val := { field1 := 5, field2 := 23 }; + if (match(v_val.field2, t_anyOrNone)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_B010204_any_value_or_none_003()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_004.ttcn b/core_language/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 0000000..e2f9b29 --- /dev/null +++ b/core_language/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,39 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone can be used for matching non-optional value + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// At the time of matching, it shall be applied to optional fields of record and set +// templates only. + +//formerly: NegSem_B010204_any_value_or_none_003 + +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()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010204_any_value_or_none/Sem_B010204_any_value_or_none_005.ttcn b/core_language/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 0000000..4596a2d --- /dev/null +++ b/core_language/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,39 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.2.4, Ensure that AnyValueOrNone can be used for matching compulsory fields + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// At the time of matching, it shall be applied to optional fields of record and set +// templates only. + +//formerly: NegSem_B010204_any_value_or_none_004 + +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()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn new file mode 100644 index 0000000..dd17a37 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_001.ttcn @@ -0,0 +1,68 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010205_value_range_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + EnumeratedType field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010205_value_range_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := (e_black..e_white), //attempt to use range on enumerated type + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := e_black, + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010205_value_range_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn new file mode 100644 index 0000000..eefd6d4 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_002.ttcn @@ -0,0 +1,68 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010205_value_range_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010205_value_range_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (2..0), //boundaries in wrong order + field2 := ("aaa".."fff"), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010205_value_range_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn new file mode 100644 index 0000000..0b9eaf2 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/NegSem_B010205_value_range_003.ttcn @@ -0,0 +1,68 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010205_value_range_003 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010205_value_range_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("fff".."aaa"), //boundaries in wrong order + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010205_value_range_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_001.ttcn new file mode 100644 index 0000000..2ecd579 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_001.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_002.ttcn new file mode 100644 index 0000000..c4012ff --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_002.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..1), //value is out of range + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_003.ttcn new file mode 100644 index 0000000..0cd6ff9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_003.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_003 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..1),c:=true}, //value is out of range + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_004.ttcn new file mode 100644 index 0000000..87405a0 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_004.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_004 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + float a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(1.000001 .. 2.0)} //float value is out of range + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1.0} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_005.ttcn new file mode 100644 index 0000000..1e12261 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_005.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_005 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + float a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("a".."f") length (3), //character is out of range + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(1.0 .. 2.0)} + } + + v_testMessage:= { + field1 := 2, + field2 := "akc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1.0} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_006.ttcn new file mode 100644 index 0000000..1203b1b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_006.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_006 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + float a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_006() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2), + field2 := ("a".."f") length (3), //character is out of range because of an empty character + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(1.0 .. 2.0)} + } + + v_testMessage:= { + field1 := 2, + field2 := "ab", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1.0} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_007.ttcn new file mode 100644 index 0000000..8dfbe3e --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_007.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_007 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_007() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..!2), //value is out of range because of exclusive upper boundary + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 2, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_008.ttcn new file mode 100644 index 0000000..7f7b51d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010205_value_range/Sem_B010205_value_range_008.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 433 + ** @version 0.0.1 + ** @purpose 1:B.1.2.5, Ensure that the IUT correctly handles template matching of value range definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010205_value_range_008 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2, + RecordType field3, + UnionType field4 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010205_value_range_008() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (!0..2), //value is out of range because of exclusive lower boundary + field2 := ("a".."f") length (3), + field3 := {a:=1,b:=(0..2),c:=true}, + field4 := {a:=(0..2)} + } + + v_testMessage:= { + field1 := 0, + field2 := "abc", + field3 := {a:=1,b:=2,c:=true}, + field4 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010205_value_range_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_001.ttcn new file mode 100644 index 0000000..8916276 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010206_superset_001 { + type record MessageType { + record of integer field1 // superset definition is only allowed over set of + } + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010206_superset_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := {field1 := superset(1, 2)} + + v_testMessage := {field1 := {1, 3, 2}}; + + messagePort.send(v_testMessage); + setverdict(pass); + } + control { + execute(TC_NegSem_B010206_superset_001()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_002.ttcn new file mode 100644 index 0000000..1428513 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_002.ttcn @@ -0,0 +1,41 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010206_superset_002 { + type set SetType { + integer a optional, integer b optional, integer c optional + } + + type record MessageType { + SetType field1 // superset definition is only allowed over set of + } + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010206_superset_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := {field1 := superset(1, 2)} + + v_testMessage := {field1 := {1, 3, 2}}; + + messagePort.send(v_testMessage); + setverdict(pass); + } + control { + execute(TC_NegSem_B010206_superset_002()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_003.ttcn new file mode 100644 index 0000000..645a7df --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_003.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass accept, ttcn3verdict:fail + ***************************************************/ + +module NegSem_B010206_superset_003 { + type set of integer SoI; + + type SoI MessageType; + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010206_superset_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := superset(1,10,3); + + v_testMessage := {1}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { // mismatch + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + + } + control { + execute(TC_NegSem_B010206_superset_003()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_004.ttcn new file mode 100644 index 0000000..bad6357 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_004.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010206_superset_004 { + type set of integer SoI; + + type SoI MessageType; + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010206_superset_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := superset(1,10,3) length (2..5); //error:minimal length allowed by the length attribute shall not be less than the number of the elements in the SuperSet + + v_testMessage := {1,11,5}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + + } + control { + execute(TC_NegSem_B010206_superset_004()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_005.ttcn new file mode 100644 index 0000000..41a2dd8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_005.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010206_superset_005 { + + type set of integer SoI; + type record of integer RoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010206_superset_005() runs on GeneralComp { + + var SoI v_testMessage; + + template RoI Template:= {omit}; + + template SoI mw_matchingTemplate:= superset(all from Template); //error + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010206_superset_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_006.ttcn new file mode 100644 index 0000000..d5a05d0 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_006.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010206_superset_006 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010206_superset_006() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= superset(1,2); + + template SoI mw_matchingTemplate:= subset(all from Template); //error + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010206_superset_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_007.ttcn new file mode 100644 index 0000000..e86a021 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_007.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010206_superset_007 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010206_superset_007() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= subset(1,2); + + template SoI mw_matchingTemplate:= superset(all from Template); //error + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010206_superset_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_008.ttcn new file mode 100644 index 0000000..73e6711 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_008.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010206_superset_008 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010206_superset_008() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {*}; + + template SoI mw_matchingTemplate:= superset(all from Template); //error + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010206_superset_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_009.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_009.ttcn new file mode 100644 index 0000000..5241288 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/NegSem_B010206_superset_009.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010206_superset_009 { + type record of integer RoI; + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010206_superset_009() runs on GeneralComp { + + var SoI v_testMessage; + + template RoI Template:= {permutation(1,2,3)}; + + template SoI mw_matchingTemplate:= superset(all from Template); //error + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010206_superset_009()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_001.ttcn new file mode 100644 index 0000000..73a99df --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_001.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010206_superset_001 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := superset(1,2) + } + + v_testMessage:= { + field1 := {1,3,2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_002.ttcn new file mode 100644 index 0000000..ab021b7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_002.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010206_superset_002 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := superset(1,2) //no match for element 2 + } + + v_testMessage:= { + field1 := {1,3,4} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_003.ttcn new file mode 100644 index 0000000..5911d36 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_003.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010206_superset_003 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := superset(1,2) //no match for element 2 + } + + v_testMessage:= { + field1 := {1,1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_004.ttcn new file mode 100644 index 0000000..7e5a2ed --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_004.ttcn @@ -0,0 +1,52 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + //Restriction c) +/*The member type of the set of associated with the SuperSet template and the member type of the template in +the all from clause shall be compatible.*/ + +module Sem_B010206_superset_004 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_004() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {1,2}; + template SoI mw_matchingTemplate:= superset(all from Template); + + + v_testMessage:={1,2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_005.ttcn new file mode 100644 index 0000000..2875e36 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_005.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + //Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module Sem_B010206_superset_005 { + + type set of integer SoI; + template SoI Template:= {1,2} length(1..10); + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_005() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI mw_matchingTemplate:= superset(all from Template); + + + v_testMessage:={1,2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_006.ttcn new file mode 100644 index 0000000..863e148 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_006.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + //Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module Sem_B010206_superset_006 { + + type set of integer SoI; + template SoI Template:= {1,2} ifpresent; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_006() runs on GeneralComp { + + var SoI v_testMessage; + + + template SoI mw_matchingTemplate:= superset(all from Template); + + + v_testMessage:={1,2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_007.ttcn new file mode 100644 index 0000000..6574bd1 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_007.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + //Restriction e) +/*The individual members of the SuperSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, the individual members shall not resolve to AnyValueOrNone and individual +elements of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module Sem_B010206_superset_007 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_007() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {1,?}; + template SoI mw_matchingTemplate:= superset(all from Template); + + + v_testMessage:={1,2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_008.ttcn new file mode 100644 index 0000000..7a8aca7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010206_superset/Sem_B010206_superset_008.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of superset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + //Restriction c) +/*The member type of the set of associated with the SuperSet template and the member type of the template in +the all from clause shall be compatible.*/ + +module Sem_B010206_superset_008 { + + type set of integer SoI; + type record of integer RoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010206_superset_008() runs on GeneralComp { + + var SoI v_testMessage; + + template RoI Template:= {1,2}; + template SoI mw_matchingTemplate:= superset(all from Template); //Template is a record of integers + + + v_testMessage:={1,2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010206_superset_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_001.ttcn new file mode 100644 index 0000000..431e5ec --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_001.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass reject + ***************************************************/ +module NegSem_B010207_subset_001 { + type record MessageType { + record of integer + field1 // subset definition is only allowed over set of + } + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010207_subset_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := {field1 := subset(1, 2)} + + v_testMessage := {field1 := {1}}; + + messagePort.send(v_testMessage); + setverdict(pass); + } + control { + execute(TC_NegSem_B010207_subset_001()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_002.ttcn new file mode 100644 index 0000000..12d333c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_002.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010207_subset_002 { + + type set SetType { + integer a optional, + integer b optional, + integer c optional + } + + type record MessageType { + SetType field1 //subset definition is only allowed over set of + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := subset(1,2) + } + + v_testMessage:= { + field1 := {1} + } + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010207_subset_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_003.ttcn new file mode 100644 index 0000000..ce64e28 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_003.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction f:If the length matching attribute is attached to the SubSet, the maximum length allowed by the length attribute +//shall not exceed the number of the elements in the SubSet. + +module NegSem_B010207_subset_003{ + type set of integer SoI; + + type SoI MessageType; + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010207_subset_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := subset(1,10,3) length (1..5); //error:the upper bound of length attribute contradicts to the maximum number of + // elements imposed by the subset argument + + v_testMessage := {1,10,3}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + + } + control { + execute(TC_NegSem_B010207_subset_003()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_004.ttcn new file mode 100644 index 0000000..9dbfa93 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_004.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of +the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010207_subset_004 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_004() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {omit}; + + template SoI mw_matchingTemplate:= subset(all from Template); //error: Compulsory item cannot be omitted. + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010207_subset_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_005.ttcn new file mode 100644 index 0000000..5db6ff7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_005.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of +the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010207_subset_005 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_005() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= superset(3,4); + + template SoI mw_matchingTemplate:= subset(all from Template); //error: The "all from" clause contains a matching mechanism. + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010207_subset_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_006.ttcn new file mode 100644 index 0000000..e72f3fa --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_006.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of +the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010207_subset_006 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_006() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= subset(3,4); + + template SoI mw_matchingTemplate:= subset(all from Template); //error: The "all from" clause contains a matching mechanism. + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010207_subset_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_007.ttcn new file mode 100644 index 0000000..58360cd --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_007.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of +the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010207_subset_007 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_007() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {*}; + + template SoI mw_matchingTemplate:= subset(all from Template); //error: forbidden matching mechanism. + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010207_subset_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_008.ttcn new file mode 100644 index 0000000..f11ef98 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/NegSem_B010207_subset_008.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions + ** @verdict pass reject + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction +and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of +the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/ + +module NegSem_B010207_subset_008 { + + type set of integer SoI; + type record of integer RoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010207_subset_008() runs on GeneralComp { + + var SoI v_testMessage; + + template RoI Template:= {permutation(1,2,4)}; + + template SoI mw_matchingTemplate:= subset(all from Template); //error: forbidden matching mechanism. + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010207_subset_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_001.ttcn new file mode 100644 index 0000000..49581e0 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_001.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010207_subset_001 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := subset(1,2) + } + + v_testMessage:= { + field1 := {2} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_002.ttcn new file mode 100644 index 0000000..6dfb7ca --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_002.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010207_subset_002 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := subset(1,2) //no match for subset elements + } + + v_testMessage:= { + field1 := {3} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_003.ttcn new file mode 100644 index 0000000..b538475 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_003.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of superset definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010207_subset_003 { + + + type record MessageType { + set of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := subset(1,2) //more elements than subset list + } + + v_testMessage:= { + field1 := {1,2,3} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_004.ttcn new file mode 100644 index 0000000..9a9b3c7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_004.ttcn @@ -0,0 +1,50 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction c) The member type of the set of type associated with the SubSet and the member type of the template in the all from clause shall be compatible. + +module Sem_B010207_subset_004 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_004() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {1,2}; + + template SoI mw_matchingTemplate:= subset(all from Template); //subset(1,2); + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_005.ttcn new file mode 100644 index 0000000..1f4a9b8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_005.ttcn @@ -0,0 +1,53 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms length restriction and ifpresent).*/ + +module Sem_B010207_subset_005 { + + type set of integer SoI; + template SoI Template:= {1,2} length(1..5); + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_005() runs on GeneralComp { + + var SoI v_testMessage; + + + + template SoI mw_matchingTemplate:= subset(all from Template); //subset(1,2); + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_006.ttcn new file mode 100644 index 0000000..1cb961a --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_006.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction e) +/*The individual members of the SubSet's argument and the elements of the template in the all from clause +shall not be the matching mechanisms length restriction and ifpresent).*/ + +module Sem_B010207_subset_006 { + + type set of integer SoI; + + template SoI Template:= {1,2} ifpresent; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_006() runs on GeneralComp { + + var SoI v_testMessage; + + + + template SoI mw_matchingTemplate:= subset(all from Template); //subset(1,2); + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_007.ttcn new file mode 100644 index 0000000..160c6cc --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_007.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction e) +/*individual members shall not resolve to AnyValueOrNone and individual fields of the template in the all from clause shall not resolve to AnyElementsOrNone or permutation..*/ + +module Sem_B010207_subset_007 { + + type set of integer SoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_007() runs on GeneralComp { + + var SoI v_testMessage; + + template SoI Template:= {1,?}; + + template SoI mw_matchingTemplate:= subset(all from Template); + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_008.ttcn new file mode 100644 index 0000000..659cccb --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010207_subset/Sem_B010207_subset_008.ttcn @@ -0,0 +1,51 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.7, Ensure that the IUT correctly handles template matching of subset definition + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction c) + +module Sem_B010207_subset_008 { + + type set of integer SoI; + type record of integer RoI; + + type port loopbackPort message { + inout SoI + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010207_subset_008() runs on GeneralComp { + + var SoI v_testMessage; + + template RoI Template:= {1,?}; + + template SoI mw_matchingTemplate:= subset(all from Template); //Template is a record of integers + + v_testMessage:={2}; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010207_subset_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_001.ttcn new file mode 100644 index 0000000..0d84abf --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_001.ttcn @@ -0,0 +1,83 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010208_omit_value_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6 optional, + UnionType field7 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010208_omit_value_001() runs on GeneralComp { + + template MessageType mw_matchingTemplate:= + { + field1 := omit,// causes an error as field1 is mandatory + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := *, + field7 := * + } + + var MessageType v_testMessage:= { + field1 := 2, + field2 := omit, + field3 := omit, + field4 := omit, + field5 := omit, + field6 := omit, + field7 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010208_omit_value_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_002.ttcn new file mode 100644 index 0000000..ab5979b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSem_B010208_omit_value_002.ttcn @@ -0,0 +1,83 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010208_omit_value_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6 optional, + UnionType field7 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010208_omit_value_002() runs on GeneralComp { + + template MessageType mw_matchingTemplate:= + { + field1 := ?, + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := {a:=1,b:=2,c:=omit},// causes an error as c field is mandatory + field7 := * + } + + var MessageType v_testMessage:= { + field1 := 2, + field2 := "test string", + field3 := e_black, + field4 := {a:=1,b:=omit,c:=true}, + field5 := {a:=1}, + field6 := {a:=1,b:=2,c:=true}, + field7 := {a:=1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_NegSem_B010208_omit_value_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSyn_B010208_omit_value_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSyn_B010208_omit_value_001.ttcn new file mode 100644 index 0000000..9a633f2 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/NegSyn_B010208_omit_value_001.ttcn @@ -0,0 +1,20 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass reject, noexecution + ***************************************************/ +// Restriction A: It can be assigned to templates of any type as a whole or to optional fields of set or record templates. + +module NegSyn_B010208_omit_value_001 { + + type integer My_Int; + + type component GeneralComp {} + +testcase TC_NegSyn_B010208_omit_value_001() runs on GeneralComp { + var My_Int v_int:= omit; // not allowed. It can be assigned to templates of any type as a whole or to optional fields of set or record templates +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_001.ttcn new file mode 100644 index 0000000..4e1f67b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_001.ttcn @@ -0,0 +1,83 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010208_omit_value_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6 optional, + UnionType field7 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010208_omit_value_001() runs on GeneralComp { + + template MessageType mw_matchingTemplate:= + { + field1 := ?, + field2 := omit, + field3 := omit, + field4 := omit, + field5 := omit, + field6 := omit, + field7 := omit + } + + var MessageType v_testMessage:= { + field1 := 2, + field2 := omit, + field3 := omit, + field4 := omit, + field5 := omit, + field6 := omit, + field7 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010208_omit_value_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_002.ttcn new file mode 100644 index 0000000..3b2f4c7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_002.ttcn @@ -0,0 +1,85 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010208_omit_value_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1, + charstring field2 optional, + EnumeratedType field3 optional, + RecordType field4 optional, + UnionType field5 optional, + RecordType field6 optional, + UnionType field7 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010208_omit_value_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := ?, + field2 := *, + field3 := *, + field4 := *, + field5 := *, + field6 := {a:=1,b:=omit,c:=true}, //omits the optional field + field7 := * + } + + v_testMessage:= { + field1 := 2, + field2 := omit, + field3 := omit, + field4 := omit, + field5 := omit, + field6 := {a:=1,b:=omit,c:=true}, + field7 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010208_omit_value_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_003.ttcn new file mode 100644 index 0000000..54a7dfd --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_003.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010208_omit_value_003 { + + type record MessageType { + integer field1, + MyRecordof field2 optional, + boolean field3 optional + } + + type record of integer MyRecordof; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_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:= { + field1 := 2, + field2 := omit, + field3 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010208_omit_value_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_004.ttcn new file mode 100644 index 0000000..e36ebd1 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_004.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010208_omit_value_004 { + + type record MessageType { + integer field1, + MyRecordof field2 optional, + boolean field3 optional + } + + type record of integer MyRecordof; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010208_omit_value_004() 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:= { + field1 := 2, + field2 := omit, + field3 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + v_boolean := match({2,omit,omit},mw_matchingTemplate);// matches and returns true + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010208_omit_value_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_005.ttcn new file mode 100644 index 0000000..d356dc0 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010208_omit_value/Sem_B010208_omit_value_005.ttcn @@ -0,0 +1,71 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles template matching of omit values + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + + +// formerly: NegSem_B010208_omit_value_003 + +module Sem_B010208_omit_value_005 { + + type record MessageType { + integer field1, + MyRecordof field2 optional, + boolean field3 optional + } + + type record of integer MyRecordof; + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010208_omit_value_005() 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:= { + field1 := 2, + field2 := omit, + field3 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + v_boolean := match({},mw_MyRecofTemplate); // does not match and returns false + if(v_boolean == false){ + setverdict(pass); + } + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010208_omit_value_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_001.ttcn new file mode 100644 index 0000000..3709f6d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_001.ttcn @@ -0,0 +1,68 @@ +/*************************************************** + ** @author STF 487 (updated by STF 521) + ** @version 0.0.2 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles content decoding + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction a) +/*It can be assigned to templates and template fields of bitstring, hexstring, octetstring, +charstring and universal charstring types.*/ + +module Sem_B010209_decoded_content_001 { + + type record MessageType { + bitstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010209_decoded_content_001() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template MessageType mw_matchingTemplate:= { + payload := decmatch Mymessage: {field1:= 10, field2 := '1001'B} + } + + v_testMessage:= { + field1 := 10, + field2 := '1001'B + } + + Message.payload := encvalue(v_testMessage); //encode message to payload + + + + + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_Sem_B010209_decoded_content_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_002.ttcn new file mode 100644 index 0000000..f8eb6e7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_002.ttcn @@ -0,0 +1,64 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles content decoding + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction a) +/*It can be assigned to templates and template fields of bitstring, hexstring, octetstring, +charstring and universal charstring types.*/ + +module Sem_B010209_decoded_content_002 { + + type record MessageType { + hexstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010209_decoded_content_002() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template MessageType mw_matchingTemplate:= { + payload := decmatch Mymessage: {field1:= 10, field2 := '1001'B} + } + + v_testMessage:= { + field1 := 10, + field2 := '1001'B + } + + Message.payload := bit2hex(encvalue(v_testMessage)); //encode message to payload, hexstring + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_Sem_B010209_decoded_content_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn new file mode 100644 index 0000000..30b8f69 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_003.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 487 (updated by STF 512) + ** @version 0.0.2 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles content decoding + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction a) +/*It can be assigned to templates and template fields of bitstring, hexstring, octetstring, +charstring and universal charstring types.*/ + +module Sem_B010209_decoded_content_003 { + + type record MessageType { + octetstring payload + } + + type record Mymessage { + integer field1, + bitstring field2 optional + } + + + type port loopbackPort message{inout MessageType}; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010209_decoded_content_003() runs on GeneralComp { + var bitstring v_enc; + var Mymessage v_testMessage; + var MessageType Message; + template MessageType mw_matchingTemplate := { + payload := decmatch Mymessage: {field1:= 10, field2 := '1001'B} + } + + v_testMessage:= { + field1 := 10, + field2 := '1001'B + } + + Message.payload := bit2oct(encvalue(v_testMessage)); //encode message to payload, octetstring + + + + + + + messagePort.send(Message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } + +} + +control{ + execute(TC_Sem_B010209_decoded_content_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn new file mode 100644 index 0000000..8159999 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_004.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles content decoding + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction a) +/*It can be assigned to templates and template fields of bitstring, hexstring, octetstring, +charstring and universal charstring types.*/ + + +module Sem_B010209_decoded_content_004 { + + type record MessageType { + charstring payload + } + + type integer MyInt with { encode "32bit" } + + type port loopbackPort message{inout MessageType}; + + + type component GeneralComp { + port loopbackPort messagePort + } + + const MyInt c_input := 1633837665; + + template MessageType mw_matchingTemplate:= { + payload := decmatch MyInt:c_input + } + + testcase TC_Sem_B010209_decoded_content_004() runs on GeneralComp { + var MessageType v_message; + + v_message.payload := encvalue_unichar(c_input); //encode message to payload, charstring + + messagePort.send(v_message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail,mw_matchingTemplate); + } + } + } + + control{ + execute(TC_Sem_B010209_decoded_content_004()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn new file mode 100644 index 0000000..43dbb78 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010209_decoded_content/Sem_B010209_decoded_content_005.ttcn @@ -0,0 +1,56 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.2.8, Ensure that the IUT correctly handles content decoding + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +//Restriction a) +/*It can be assigned to templates and template fields of bitstring, hexstring, octetstring, +charstring and universal charstring types.*/ + + +module Sem_B010209_decoded_content_005 { + + type record MessageType { + universal charstring payload + } + + type integer MyInt with { encode "32bit" } + + type port loopbackPort message{inout MessageType}; + + type component GeneralComp { + port loopbackPort messagePort + } + + const MyInt c_input := 1633837665; + + template MessageType mw_matchingTemplate:= { + payload := decmatch MyInt:c_input + } + + testcase TC_Sem_B010209_decoded_content_005() runs on GeneralComp { + var MessageType v_message; + + v_message.payload := encvalue_unichar(c_input); //encode message to payload, charstring + + messagePort.send(v_message); //send message + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail,mw_matchingTemplate); + } + } + + } + + control{ + execute(TC_Sem_B010209_decoded_content_005()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn b/core_language/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 0000000..08cb6e7 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0102_matching_mechanisms/B010210_enumerated_value_list/Sem_B010210_enumerated_value_list_001.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 521 + ** @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; + } + + 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); + + 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()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn new file mode 100644 index 0000000..f3e89c9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_001.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_001 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "test s?ring", + field2 := '10???'B, + field3 := '8?A?C'H + } + + v_testMessage:= { + field1 := "test string", + field2 := '10101'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn new file mode 100644 index 0000000..cf6735f --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_002.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_002 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "test s?ring", //attempting to match a missing character + field2 := '10???'B, + field3 := '8?A?C'H + } + + v_testMessage:= { + field1 := "test sring", + field2 := '10101'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn new file mode 100644 index 0000000..59fbbcd --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_003.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_003 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := "test string", + field2 := '10???'B, + field3 := '8?A?C'H //attempting to match several characters + } + + v_testMessage:= { + field1 := "test sring", + field2 := '10101'B, + field3 := '89ABBC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_004.ttcn new file mode 100644 index 0000000..a1ed347 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_004.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_004 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := "test string", + field2 := '10???'B, //mismatching string lengths + field3 := '8?A?C'H + } + + v_testMessage:= { + field1 := "test sring", + field2 := '10'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_005.ttcn new file mode 100644 index 0000000..38a49d5 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_005.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_005 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := "test s?ring", //literally interpreted string without the pattern keyword + field2 := '10???'B, + field3 := '8?A?C'H + } + + v_testMessage:= { + field1 := "test string", + field2 := '10101'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_006.ttcn new file mode 100644 index 0000000..8b7518c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_006.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_006 { + + + type record MessageType { + record of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_006() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {8,?,10,?,12} + } + + v_testMessage:= { + field1 := {8,9,10,11,12} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_007.ttcn new file mode 100644 index 0000000..ec193d5 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_007.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_007 { + + + type record MessageType { + record of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_007() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {8,?,10,?,12} + } + + v_testMessage:= { + field1 := {8,9,10,12} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_007()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_008.ttcn new file mode 100644 index 0000000..edfb351 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010301_any_element/Sem_B010301_any_element_008.ttcn @@ -0,0 +1,54 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.1, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010301_any_element_008 { + + + type record MessageType { + record of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010301_any_element_008() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {8,?,?,12} + } + + v_testMessage:= { + field1 := {8,9,10,11,12} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010301_any_element_008()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_001.ttcn new file mode 100644 index 0000000..49ec079 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_001.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.2, Ensure that the IUT correctly handles template matching of * symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010302_any_number_of_elements_or_none_001 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010302_any_number_of_elements_or_none_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "test s*g", + field2 := '10*'B, + field3 := '89*ABC'H + } + + v_testMessage:= { + field1 := "test string", + field2 := '10101'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010302_any_number_of_elements_or_none_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_002.ttcn new file mode 100644 index 0000000..e21461d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_002.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.2, Ensure that the IUT correctly handles template matching of * symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010302_any_number_of_elements_or_none_002 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010302_any_number_of_elements_or_none_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := "test s*g", //literally interpreted string without the pattern keyword + field2 := '10*'B, + field3 := '89*ABC'H + } + + v_testMessage:= { + field1 := "test string", + field2 := '10101'B, + field3 := '89ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010302_any_number_of_elements_or_none_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_003.ttcn new file mode 100644 index 0000000..16a37d2 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010302_any_number_of_elements_or_none/Sem_B010302_any_number_of_elements_or_none_003.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.2, Ensure that the IUT correctly handles template matching of * symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010302_any_number_of_elements_or_none_003 { + + + type record MessageType { + record of integer field1, + record of integer field2, + record of integer field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010302_any_number_of_elements_or_none_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := {8,*,10,*,12}, + field2 := {8,*,10,*,12}, + field3 := {8,*,10,*,12} + } + + v_testMessage:= { + field1 := {8,9,10,11,12}, + field2 := {8,9,10,12}, + field3 := {8,9,9,10,10,11,12} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010302_any_number_of_elements_or_none_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_001.ttcn new file mode 100644 index 0000000..28c00f9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_001.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010303_permutation_001 { + type record MessageType { + set of integer field1, + // permutation can only be applied to a record of type + set of integer field2, + set of integer field3, + set of integer field4 + } + + type port loopbackPort message { + inout MessageType; + } + + + type component GeneralComp { + port loopbackPort messagePort; + } + + testcase TC_NegSem_B010303_permutation_001() runs on GeneralComp { + timer t := 1.0; + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate := { + field1 := {permutation(1, 2, 3), 5}, + field2 := {permutation(1, 2, ?), 5}, + field3 := {permutation(1, 2, 3), *}, + field4 := {permutation((1, 2, 3), 2, 3), 5} + } + + v_testMessage := { + field1 := {2, 1, 3, 5}, + field2 := {2, 1, 8, 5}, + field3 := {3, 2, 1, 8, 8}, + field4 := {3, 2, 2, 5} + }; + + t.start; + + messagePort.send(v_testMessage); + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] t.timeout { + setverdict(fail); + } + } + } + control { + execute(TC_NegSem_B010303_permutation_001()); + } +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_002.ttcn new file mode 100644 index 0000000..2c83a0d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_002.ttcn @@ -0,0 +1,36 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that all from operand can be a record of or set of only + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Besides specifying all individual values, it is possible to add all elements of +// a record of or set of template into permutations using an all from clause. + +module NegSem_B010303_permutation_002 { + + type record of integer RoI; + template integer t_source := 2; + // t_source is not a record of or set of -> an error expected + template RoI t_perm1 := { permutation ( 5, all from t_source ) }; + + type component GeneralComp { + } + + testcase TC_NegSem_B010303_permutation_002() runs on GeneralComp { + if (match({ 2, 5 }, t_perm1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_B010303_permutation_002()); + } + +} + + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_003.ttcn new file mode 100644 index 0000000..a16d1e2 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_003.ttcn @@ -0,0 +1,35 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that type restriction for permutation elements is applied + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Each individual member listed in the permutation shall be of the type replicated +// by the record of type. + +module NegSem_B010303_permutation_003 { + + type record of integer RoI; + + template RoI t_perm1 := { permutation ( 5, 2.0 ) }; // float value is not compatible + + + type component GeneralComp { + } + + testcase TC_NegSem_B010303_permutation_003() runs on GeneralComp { + if (match({ 2, 5 }, t_perm1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_B010303_permutation_003()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_004.ttcn new file mode 100644 index 0000000..45e3348 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_004.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that type restriction for all from clause in permutation is applied + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The member type of the permutation and the member type of the template in the all +// from clause shall be compatible. + +module NegSem_B010303_permutation_004 { + + type record of float RoF; + type record of integer RoI; + + template RoF t_source := { ?, * } + // float value is not compatible with integer (even though the actual symbols are + // generic and would work with integer elements too) + template RoI t_perm1 := { permutation ( 3, all from t_source ) }; + + + type component GeneralComp { + } + + testcase TC_NegSem_B010303_permutation_004() runs on GeneralComp { + if (match({ 2, 3 }, t_perm1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_B010303_permutation_004()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_005.ttcn new file mode 100644 index 0000000..4eab618 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_005.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Verify restriction on individual members of all from operand in permutation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// The template in the all from clause as a whole shall not resolve into a matching +// mechanism + +module NegSem_B010303_permutation_005 { + + type record of integer RoI; + + template RoI t_source := ?; + // The source template resolves to a matching mechanism. It should cause an error. + template RoI t_perm1 := { permutation ( all from t_source, 2 ) }; + + + type component GeneralComp { + } + + testcase TC_NegSem_B010303_permutation_005() runs on GeneralComp { + if (match({ 2, 3 }, t_perm1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_B010303_permutation_005()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_006.ttcn new file mode 100644 index 0000000..56d7afa --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/NegSem_B010303_permutation_006.ttcn @@ -0,0 +1,40 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Verify restriction on individual members of all from operand in permutation + ** @verdict pass reject + ***************************************************/ + +// The following requirement is tested: +// Individual members of a permutation and elements of the template in the all from +// clause shall only be expressions, templates, and the AnyElement and +// AnyElementsOrNone matching mechanisms. + +module NegSem_B010303_permutation_006 { + + type record of integer RoI; + + template RoI t_source := { 1, permutation(2, 3) } + // The source template contains a matching mechanism inside value (permutation) + // that is not mentioned as a valid content of the all from operand in + // B.1.3.3. restriction c + template RoI t_perm1 := { permutation ( all from t_source, * ) }; + + + type component GeneralComp { + } + + testcase TC_NegSem_B010303_permutation_006() runs on GeneralComp { + if (match({ 1, 4, 2, 3 }, t_perm1)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_NegSem_B010303_permutation_006()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_001.ttcn new file mode 100644 index 0000000..8f89ddf --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_001.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_001 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), 5 }, + field2 := { permutation ( 1, 2, ? ), 5 }, + field3 := { permutation ( 1, 2, 3 ), * }, + field4 := { permutation ( (1,2,3), 2, 3 ), 5 } + } + + v_testMessage:= { + field1 := {2,1,3,5}, + field2 := {2,1,8,5}, + field3 := {3,2,1,8,8}, + field4 := {3,2,2,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_002.ttcn new file mode 100644 index 0000000..1b2b9c4 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_002.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_002 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), 5 }, //3 is missing from the match + field2 := { permutation ( 1, 2, ? ), 5 }, + field3 := { permutation ( 1, 2, 3 ), * }, + field4 := { permutation ( (1,2,3), 2, 3 ), 5 } + } + + v_testMessage:= { + field1 := {2,1,2,5}, + field2 := {2,1,8,5}, + field3 := {3,2,1,8}, + field4 := {3,2,2,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_003.ttcn new file mode 100644 index 0000000..eb3551a --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_003.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_003 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), 5 }, + field2 := { permutation ( 1, 2, ? ), 5 }, //there is an extra element in the sequence + field3 := { permutation ( 1, 2, 3 ), * }, + field4 := { permutation ( (1,2,3), 2, 3 ), 5 } + } + + v_testMessage:= { + field1 := {2,1,3,5}, + field2 := {2,1,8,8,5}, + field3 := {3,2,1,8}, + field4 := {3,2,2,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_004.ttcn new file mode 100644 index 0000000..e1037dc --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_004.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), 5 }, + field2 := { permutation ( 1, 2, ? ), 5 }, + field3 := { permutation ( 1, 2, 3 ), * }, //wrong order of elements + field4 := { permutation ( (1,2,3), 2, 3 ), 5 } + } + + v_testMessage:= { + field1 := {2,1,3,5}, + field2 := {2,1,8,5}, + field3 := {3,2,8,1}, + field4 := {3,2,2,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_005.ttcn new file mode 100644 index 0000000..f8e085f --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_005.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles template matching of ? symbols in value elements + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_005 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), 5 }, + field2 := { permutation ( 1, 2, ? ), 5 }, + field3 := { permutation ( 1, 2, 3 ), * }, + field4 := { permutation ( (1,2,3), 2, 3 ), 5 } //wrong set of elements + } + + v_testMessage:= { + field1 := {2,1,3,5}, + field2 := {2,1,8,5}, + field3 := {3,2,8,1}, + field4 := {3,1,1,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_006.ttcn new file mode 100644 index 0000000..30a7510 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_006.ttcn @@ -0,0 +1,67 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that the IUT correctly handles permutation within arrays + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010303_permutation_006 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010303_permutation_006() runs on GeneralComp { + + var MessageType v_testMessage; + var template integer mw_field1 [4] := { permutation ( 1, 2, 3 ), 5 }; + var template integer mw_field2 [4] := { permutation ( 1, 2, ? ), 5 }; + var template integer mw_field3 [4] := { permutation ( 1, 2, 3 ), * }; + var template integer mw_field4 [4] := { permutation ( (1,2,3), 2, 3 ), 5 }; + + template MessageType mw_matchingTemplate:= + { + mw_field1, + mw_field2, + mw_field3, + mw_field4 + } + + v_testMessage:= { + field1 := {2,1,3,5}, + field2 := {2,1,8,5}, + field3 := {3,2,1,8}, + field4 := {3,2,2,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010303_permutation_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_007.ttcn new file mode 100644 index 0000000..86041be --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_007.ttcn @@ -0,0 +1,37 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that all from clause can be used inside permutation + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Besides specifying all individual values, it is possible to add all elements of +// a record of template into permutations using an all from clause. + +module Sem_B010303_permutation_007 { + + type record of integer RoI; + + template RoI t_source := { 1, 2 }; + template RoI t_perm1 := { permutation (all from t_source), 5 }; + template RoI t_perm2 := { -1, permutation (0, all from t_source, 3) }; + + + type component GeneralComp { + } + + testcase TC_Sem_B010303_permutation_007() runs on GeneralComp { + if (match({ 2, 1, 5 }, t_perm1) and match({ -1, 1, 0, 2, 3 }, t_perm2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_B010303_permutation_007()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_008.ttcn new file mode 100644 index 0000000..f2e9a9c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_008.ttcn @@ -0,0 +1,39 @@ +/*************************************************** + ** @author STF 470 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that all from clause operand can be a set of value + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +// Besides specifying all individual values, it is possible to add all elements of +// a set of template into permutations using an all from clause. +// + +module Sem_B010303_permutation_008 { + + type set of integer SoI; + type record of integer RoI; + + template SoI t_source := { 1, 2 }; + template RoI t_perm1 := { permutation (all from t_source), 5 }; + template RoI t_perm2 := { -1, permutation (0, all from t_source, 3) }; + + + type component GeneralComp { + } + + testcase TC_Sem_B010303_permutation_008() runs on GeneralComp { + if (match({ 2, 1, 5 }, t_perm1) and match({ -1, 1, 0, 2, 3 }, t_perm2)) { + setverdict(pass); + } else { + setverdict(fail); + } + } + + control{ + execute(TC_Sem_B010303_permutation_008()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn new file mode 100644 index 0000000..dc41942 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0103_matching_inside_values/B010303_permutation/Sem_B010303_permutation_009.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.3.3, Ensure that all from clause operand can be a set of value + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +// The following requirement is tested: +/* Restriction d) Individual members of a permutation and elements of the template in the all from clause shall only be +expressions, templates obeying to restriction c) above, and the AnyElement and AnyElementsOrNone matching +mechanisms.*/ + +module Sem_B010303_permutation_009 { + + type set of integer SoI; + type record of integer RoI; + + type record MessageType { + record of integer field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + + template SoI t_source := { 1, 2 ,?}; + template RoI t_perm1 := { permutation (all from t_source), 5 }; //using all from with ? + + testcase TC_Sem_B010303_permutation_009() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := t_perm1 + } + + v_testMessage:= { + field1 := {2,1,3,5} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + control{ + execute(TC_Sem_B010303_permutation_009()); + } + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn new file mode 100644 index 0000000..df67e06 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_003.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 409 + ** @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_003 { + + + type record MessageType { + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010401_length_restrictions_003() 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} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_NegSem_B010401_length_restrictions_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn new file mode 100644 index 0000000..984059f --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/NegSem_B010401_length_restrictions_004.ttcn @@ -0,0 +1,65 @@ +/*************************************************** + ** @author STF 409 + ** @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 { + + + type record MessageType { + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010401_length_restrictions_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + 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 := {2,1,3}, + field2 := {2,1,3,5}, + field3 := {2,1,3,5}, + field4 := {1,1} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_NegSem_B010401_length_restrictions_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn new file mode 100644 index 0000000..9f31b97 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_001.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010401_length_restrictions_001 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3, + charstring field4, + bitstring field5, + hexstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010401_length_restrictions_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "test s*g" length (6 .. 13), + 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 string", + field2 := '10101'B, + field3 := '89ABC'H, + field4 := "test", + field5 := '101'B, + field6 := '899ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010401_length_restrictions_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn new file mode 100644 index 0000000..f497f2e --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_002.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010401_length_restrictions_002 { + + + 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 + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010401_length_restrictions_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := { permutation ( 1, 2, 3 ), * } length (3 .. 4), + 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} + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010401_length_restrictions_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn b/core_language/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 0000000..832596b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_003.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +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 + } + + +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 - valid, but never matches + 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 string", + field2 := '10101'B, + field3 := '89ABC'H, + field4 := "test", + field5 := '101'B, + field6 := '899ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010401_length_restrictions_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn b/core_language/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 0000000..da9116c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010401_length_restrictions/Sem_B010401_length_restrictions_004.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 521 + ** @version 0.0.1 + ** @purpose 1:B.1.4.1, Ensure that the IUT correctly handles template matching of value length definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010401_length_restrictions_004 { + + + type record MessageType { + charstring field1, + bitstring field2, + hexstring field3, + charstring field4, + bitstring field5, + hexstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + +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 := 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) + } + + v_testMessage:= { + field1 := "test string", + field2 := '10101'B, + field3 := '89ABC'H, + field4 := "test", + field5 := '101'B, + field6 := '899ABC'H + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010401_length_restrictions_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn new file mode 100644 index 0000000..b372c01 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/NegSem_B010402_ifPresent_indicator_001.ttcn @@ -0,0 +1,67 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.4.2, Ensure that the IUT correctly handles template matching of ifpresent indicators + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010402_ifPresent_indicator_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1 optional, + charstring field2 optional, + RecordType field3, + UnionType field4 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_NegSem_B010402_ifPresent_indicator_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2) ifpresent, + field2 := ("aaa".."fff") ifpresent, + field3 := {a:=1,b:=(0..2) ifpresent,c:=true} ifpresent, //use of ifpresent on non-optional field + field4 := {a:=(0..2)} ifpresent + } + + v_testMessage:= { + field1 := omit, + field2 := omit, + field3 := {a:=1,b:=omit,c:=true}, + field4 := omit + } + + messagePort.send(v_testMessage); +} + +control{ + execute(TC_NegSem_B010402_ifPresent_indicator_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn new file mode 100644 index 0000000..a3845b9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_001.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.4.2, Ensure that the IUT correctly handles template matching of ifpresent indicators + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010402_ifPresent_indicator_001 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1 optional, + charstring field2 optional, + RecordType field3, + UnionType field4 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010402_ifPresent_indicator_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2) ifpresent, + field2 := "[a-f]" ifpresent, + field3 := {a:=1,b:=(0..2) ifpresent,c:=true}, + field4 := {a:=(0..2)} ifpresent + } + + v_testMessage:= { + field1 := omit, + field2 := omit, + field3 := {a:=1,b:=omit,c:=true}, + field4 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010402_ifPresent_indicator_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn new file mode 100644 index 0000000..37bc068 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0104_matching_attributes_of_values/B010402_ifPresent_indicator/Sem_B010402_ifPresent_indicator_002.ttcn @@ -0,0 +1,76 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.4.2, Ensure that the IUT correctly handles template matching of ifpresent indicators + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010402_ifPresent_indicator_002 { + + type enumerated EnumeratedType {e_black, e_white, e_green}; + + type record RecordType { + integer a optional, + integer b optional, + boolean c + } + + type union UnionType { + integer a, + EnumeratedType b, + boolean c + } + + type record MessageType { + integer field1 optional, + charstring field2 optional, + RecordType field3, + UnionType field4 optional + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010402_ifPresent_indicator_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := (0..2) ifpresent, + field2 := ("a".."f") length (3) ifpresent, + field3 := {a:=1,b:=(0..2) ifpresent,c:=true}, //element b is present and out of range + field4 := {a:=(0..2)} ifpresent + } + + v_testMessage:= { + field1 := omit, + field2 := omit, + field3 := {a:=1,b:=3,c:=true}, + field4 := omit + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010402_ifPresent_indicator_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_001.ttcn new file mode 100644 index 0000000..af01753 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_001.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_001 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[pqrs]t[0-9]", + field2 := pattern "test[^a-z]", + field3 := pattern "[A-Z]est" + } + + v_testMessage:= { + field1 := "test1", + field2 := "test1", + field3 := "Test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_002.ttcn new file mode 100644 index 0000000..74f4958 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_002.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_002 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[pqrs]t[0-9]", //mismatching set + field2 := pattern "test[^a-z]", + field3 := pattern "[A-Z]est" + } + + v_testMessage:= { + field1 := "text1", + field2 := "test1", + field3 := "Test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_003.ttcn new file mode 100644 index 0000000..92d6d3c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_003.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_003 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[pqrs]t[0-9]", + field2 := pattern "test[^a-z]", //mismatching negation + field3 := pattern "[A-Z]est" + } + + v_testMessage:= { + field1 := "test1", + field2 := "testx", + field3 := "Test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_004.ttcn new file mode 100644 index 0000000..1f6f7c4 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_004.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_004 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[pqrs]t[0-9]", + field2 := pattern "test[^a-z]", + field3 := pattern "[A-Z]est" //mismatching small/large caps + } + + v_testMessage:= { + field1 := "test1", + field2 := "test1", + field3 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_005.ttcn new file mode 100644 index 0000000..b9d8e69 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_005.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_005 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[pqrs]t[0-9]", + field2 := pattern "test[^a-z]", + field3 := pattern "test[-]string" //mismatching literal - separator + } + + v_testMessage:= { + field1 := "test1", + field2 := "test1", + field3 := "test string" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_006.ttcn new file mode 100755 index 0000000..373bfe8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010501_set_expression/Sem_B010501_set_expression_006.ttcn @@ -0,0 +1,57 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.1, Ensure that the IUT correctly handles template matching of character pattern set expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010501_set_expression_006 { + + + type record MessageType { + universal charstring field1, + universal charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010501_set_expression_006() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "test[\q{0,0,1,113}]", //accepted \q character is ű + field2 := pattern "test[^\q{0,0,1,113}]" //accepted characters are: anything execpt ű + } + + v_testMessage:= { + field1 := "testű", + field2 := "testb" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010501_set_expression_006()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_001.ttcn new file mode 100644 index 0000000..85c64a8 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_001.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_001 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort; +} + +testcase TC_Sem_B010502_reference_expression_001(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_001("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_002.ttcn new file mode 100644 index 0000000..074378a --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_002.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_002 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_002(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", //mismatch in this reference + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference ", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_002("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_003.ttcn new file mode 100644 index 0000000..2b36f8b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_003.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_003 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_003(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", //mismatch in this reference + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference ", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_003("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_004.ttcn new file mode 100644 index 0000000..7bba84e --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_004.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_004 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_004(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", //mismatch in this reference + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference ", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_004("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_005.ttcn new file mode 100644 index 0000000..6f7334b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_005.ttcn @@ -0,0 +1,80 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_005 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_005(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + template charstring m_RefExp_p1 := pattern "{m_"; + template charstring m_RefExp_p2 := pattern "Ref}!"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", //mismatch in this reference + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference ", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_005("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_006.ttcn new file mode 100644 index 0000000..ed55d74 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_006.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_006 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_006(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", //mismatch in this reference + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference ", + field6 := "constant reference!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_006("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_007.ttcn new file mode 100644 index 0000000..0bf21a1 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_007.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_007 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_007(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", //mismatch in this reference + field7 := pattern "{v_Ref} and {c_Ref}" + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "{m_Ref}!", + field7 := "variable reference and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_007("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_008.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_008.ttcn new file mode 100644 index 0000000..8f062d9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_008.ttcn @@ -0,0 +1,78 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_008 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_008(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{v_Ref} and {c_Ref}" //mismatch in this reference + }; + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := " and constant reference" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_008("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_009.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_009.ttcn new file mode 100644 index 0000000..c457407 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_009.ttcn @@ -0,0 +1,55 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_009 { + + + type record MessageType { + charstring field1 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_009() runs on GeneralComp { + + var MessageType v_testMessage; + template charstring m_Ref:="a-z"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[{m_Ref}]" //mismatch as {} looses its meaning inside [] + }; + + v_testMessage:= { + field1 := "x" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_009()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_010.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_010.ttcn new file mode 100755 index 0000000..325225e --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_010.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_010 { + + + type record MessageType { + universal charstring field1, + universal charstring field2, + universal charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_010() runs on GeneralComp { + + var MessageType v_testMessage; + const charstring m_Ref:="abc?def?"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{\m_Ref}", // this should accept pattern "abc?def?" only + field2 := pattern "{m_Ref}\q{0,0,1,113}", // this should accept pattern "abc?def?" only, with any character in ? + field3 := pattern "{\m_Ref}\q{0,0,1,113}" // this should accept pattern "abc?def?ű" only + + }; + v_testMessage:= { + field1 := "abc?def?", + field2 := "abcDdefGű", + field3 := "abc?def?ű" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass,v_testMessage); + } + [] messagePort.receive { + setverdict(fail,"Unexpected decoding result:",v_testMessage); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_010()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_011.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_011.ttcn new file mode 100755 index 0000000..364a90c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010502_reference_expression/Sem_B010502_reference_expression_011.ttcn @@ -0,0 +1,61 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.2, Ensure that the IUT correctly handles template matching of character pattern reference expressions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010502_reference_expression_011 { + + + type record MessageType { + universal charstring field1, + universal charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010502_reference_expression_011() runs on GeneralComp { + + var MessageType v_testMessage; + const MessageType m_Ref:={"1","ABCabc"}; + const charstring referencedConstant_1 := m_Ref.field1; + const charstring referencedConstant_2 := m_Ref.field2; + + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{referencedConstant_1}", + field2 := pattern "{referencedConstant_2}" + }; + + v_testMessage:= { + field1 := "1", + field2 := "ABCabc" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass,v_testMessage); + } + [] messagePort.receive { + setverdict(fail,"Unexpected decoding result:",v_testMessage); + } + } +} + +control{ + execute(TC_Sem_B010502_reference_expression_011()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_001.ttcn new file mode 100644 index 0000000..3d1b23b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_001.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.3, Ensure that the IUT correctly handles template matching of character pattern expression multiplicity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010503_match_n_times_001 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010503_match_n_times_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[e-t]#4", + field2 := pattern "[e-t]+", + field3 := pattern "[e-t]#(3,5)", + field4 := pattern "[e-t]#(3,)", + field5 := pattern "[e-t]#(,5)" + } + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010503_match_n_times_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_002.ttcn new file mode 100644 index 0000000..624f3d5 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_002.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.3, Ensure that the IUT correctly handles template matching of character pattern expression multiplicity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010503_match_n_times_002 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010503_match_n_times_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[e-t]#5", //mismatching number of characters + field2 := pattern "[e-t]+", + field3 := pattern "[e-t]#(3,5)", + field4 := pattern "[e-t]#(3,)", + field5 := pattern "[e-t]#(,5)" + } + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010503_match_n_times_002()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_003.ttcn new file mode 100644 index 0000000..5f66d84 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_003.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.3, Ensure that the IUT correctly handles template matching of character pattern expression multiplicity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010503_match_n_times_003 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010503_match_n_times_003() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[e-t]#4", + field2 := pattern "test[e-t]+", //mismatching number of characters + field3 := pattern "[e-t]#(3,5)", + field4 := pattern "[e-t]#(3,)", + field5 := pattern "[e-t]#(,5)" + } + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010503_match_n_times_003()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_004.ttcn new file mode 100644 index 0000000..d4dddd4 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_004.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.3, Ensure that the IUT correctly handles template matching of character pattern expression multiplicity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010503_match_n_times_004 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010503_match_n_times_004() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[e-t]#4", + field2 := pattern "test[e-t]+", + field3 := pattern "[e-t]#(3,5)", + field4 := pattern "[e-t]#(5,)", //mismatching number of characters + field5 := pattern "[e-t]#(,5)" + } + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010503_match_n_times_004()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_005.ttcn new file mode 100644 index 0000000..e45680f --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010503_match_n_times/Sem_B010503_match_n_times_005.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.3, Ensure that the IUT correctly handles template matching of character pattern expression multiplicity + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010503_match_n_times_005 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010503_match_n_times_005() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "[e-t]#4", + field2 := pattern "test[e-t]+", + field3 := pattern "[e-t]#(3,5)", + field4 := pattern "[e-t]#(3,)", + field5 := pattern "[e-t]#(,3)" //mismatching number of characters + } + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010503_match_n_times_005()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/NegSem_B010504_match_referenced_characters_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/NegSem_B010504_match_referenced_characters_001.ttcn new file mode 100644 index 0000000..a262135 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/NegSem_B010504_match_referenced_characters_001.ttcn @@ -0,0 +1,69 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass reject + ***************************************************/ + +module NegSem_B010504_match_referenced_characters_001 { + + modulepar { + charstring MOD_REF:="ef"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort; + const charstring c_Ref:="s"; +} + +testcase TC_NegSem_B010504_match_referenced_characters_001(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", //reference length is more than one character + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te[\N{m_Ref}]t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + +} + +control{ + execute(TC_NegSem_B010504_match_referenced_characters_001("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_001.ttcn new file mode 100644 index 0000000..99fb2b0 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_001.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_001 { + + modulepar { + charstring MOD_REF:="e"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_001(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_001("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_002.ttcn new file mode 100644 index 0000000..0ad3e3d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_002.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_002 { + + modulepar { + charstring MOD_REF:="e"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_002(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="x"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", //reference character mismatch + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_002("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_003.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_003.ttcn new file mode 100644 index 0000000..47b058c --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_003.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_003 { + + modulepar { + charstring MOD_REF:="e"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="x"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_003(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", //reference character mismatch + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_003("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_004.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_004.ttcn new file mode 100644 index 0000000..6fa4e2b --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_004.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_004 { + + modulepar { + charstring MOD_REF:="s"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_004(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", //reference character mismatch + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_004("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_005.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_005.ttcn new file mode 100644 index 0000000..26be7cb --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_005.ttcn @@ -0,0 +1,75 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_005 { + + modulepar charstring MOD_REF:="e"; + + type charstring CharRange ("s".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_005(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" //reference character mismatch + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_005("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_006.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_006.ttcn new file mode 100644 index 0000000..2631c76 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_006.ttcn @@ -0,0 +1,75 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_006 { + + modulepar charstring MOD_REF:="e"; + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_006(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="s"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", //reference character mismatch + field5 := pattern "te\N{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "test", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(fail); + } + [] messagePort.receive { + setverdict(pass); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_006("x")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_007.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_007.ttcn new file mode 100644 index 0000000..6f64b16 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010504_match_referenced_characters/Sem_B010504_match_referenced_characters_007.ttcn @@ -0,0 +1,77 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.4, Ensure that the IUT correctly handles template matching of character pattern reference characters + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010504_match_referenced_characters_007 { + + modulepar { + charstring MOD_REF:="e"; + } + + type charstring CharRange ("e".."t"); + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="s"; + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010504_match_referenced_characters_007(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="s"; + template charstring m_Ref:="{c_Ref}"; //assuming dereferencing is only done once, no chained references + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te[\N{v_Ref}]t", + field2 := pattern "[\N{c_Ref}et]+", + field3 := pattern "[\N{MOD_REF}-t]+", + field4 := pattern "te[\N{p_Ref}]t", + field5 := pattern "te{m_Ref}t", + field6 := pattern "\N{CharRange}+" + }; + + v_testMessage:= { + field1 := "test", + field2 := "test", + field3 := "test", + field4 := "test", + field5 := "te{c_Ref}t", + field6 := "test" + }; + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010504_match_referenced_characters_007("s")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/NegSyn_B010505_pattern_compatibility_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/NegSyn_B010505_pattern_compatibility_001.ttcn new file mode 100755 index 0000000..e8be2e6 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/NegSyn_B010505_pattern_compatibility_001.ttcn @@ -0,0 +1,24 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.0, Ensure that the IUT correctly handles character pattern metacharacters + compatibility rules of template matching + ** @verdict pass reject + ***************************************************/ + +module NegSyn_B010505_pattern_compatibility_001 { + + type component GeneralComp {} + +testcase TC_NegSyn_B010505_pattern_compatibility_001() runs on GeneralComp { + + template charstring mw_matchingTemplate:= pattern "??riable reference"; + var charstring mw_matchingTemplate_2:= pattern mw_matchingTemplate; // error: Cannot assign a template to a non-template variable. + +} +control{ + execute(TC_NegSyn_B010505_pattern_compatibility_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_001.ttcn new file mode 100644 index 0000000..7aa440e --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_001.ttcn @@ -0,0 +1,81 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.5, Ensure that the IUT correctly handles character pattern compatibility rules of template matching + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010505_pattern_compatibility_001 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + universal charstring field1, + universal charstring field2, + universal charstring field3, + universal charstring field4, + universal charstring field5, + universal charstring field6, + universal charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010505_pattern_compatibility_001(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + template charstring m_RefExp_p1 := "{m_"; + template charstring m_RefExp_p2 := "Ref}!"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{m_RefExp_p1}{m_RefExp_p2}" + } + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "{m_Ref}!" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010505_pattern_compatibility_001("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_002.ttcn new file mode 100644 index 0000000..951af3d --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010505_pattern_compatibility/Sem_B010505_pattern_compatibility_002.ttcn @@ -0,0 +1,81 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5.5, Ensure that the IUT correctly handles character pattern compatibility rules of template matching + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B010505_pattern_compatibility_002 { + + modulepar { + universal charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5, + charstring field6, + charstring field7 + } + + type port loopbackPort message { + inout MessageType + } + + const universal charstring c_Ref:="constant reference"; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010505_pattern_compatibility_002(universal charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var universal charstring v_Ref:="variable reference"; + template universal charstring m_Ref:= pattern "{c_Ref}"; + template universal charstring m_RefExp_p1 := pattern "{m_"; + template universal charstring m_RefExp_p2 := pattern "Ref}!"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "{v_Ref}", + field2 := pattern "{c_Ref}", + field3 := pattern "{MOD_REF}", + field4 := pattern "{p_Ref}", + field5 := pattern "{m_Ref}", + field6 := pattern "{m_"&"Ref}!", + field7 := pattern "{m_RefExp_p1}{m_RefExp_p2}" + } + + v_testMessage:= { + field1 := "variable reference", + field2 := "constant reference", + field3 := "modulepar reference", + field4 := "parameter reference", + field5 := "constant reference", + field6 := "constant reference!", + field7 := "{m_Ref}!" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B010505_pattern_compatibility_002("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_001.ttcn new file mode 100755 index 0000000..48277ac --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_001.ttcn @@ -0,0 +1,88 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.6, Ensure that the IUT correctly handles character pattern compatibility rules of template case sensitive matching (@nocase) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: +When the "@nocase" modifier is used after the pattern keyword, the matching is evaluated in a case insensitive way +*/ + +module Sem_B010506_case_sensitive_pattern_matching_001 { + + modulepar { + charstring MOD_REF:="modulepar reference"; + } + + type record MessageType { + universal charstring field1, + universal charstring field2, + universal charstring field3, + universal charstring field4, + universal charstring field5, + universal charstring field6, + universal charstring field7, + universal charstring field8 + } + + type port loopbackPort message { + inout MessageType + } + + const charstring c_Ref:="constant reference"; + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B010506_case_sensitive_pattern_matching_001(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + var charstring v_Ref:="variable reference"; + template charstring m_Ref:= pattern "{c_Ref}"; + template charstring m_RefExp_p1 := "{m_"; + template charstring m_RefExp_p2 := "Ref}!"; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern @nocase "{v_Ref}", + field2 := pattern @nocase"{c_Ref}", + field3 := pattern @nocase"{MOD_REF}", + field4 := pattern @nocase"{p_Ref}", + field5 := pattern @nocase"{m_Ref}", + field6 := pattern @nocase"{m_"&"Ref}!", + field7 := pattern @nocase"{m_RefExp_p1}{m_RefExp_p2}", + field8 := pattern @nocase"var*?e" + } + + v_testMessage:= { + field1 := "VaRiAbLe ReFeReNcE", + field2 := "conSTant ReFeReNcE", + field3 := "modulepar ReFeReNcE", + field4 := "PARAMETER ReFeReNcE", + field5 := "CONStant ReFeReNcE", + field6 := "consTANT ReFeReNcE!", + field7 := "{m_ref}!", + field8 := "VaRiAbLe ReFeReNcE" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass,v_testMessage); + } + [] messagePort.receive { + setverdict(fail,v_testMessage); + } + } +} + +control{ + execute(TC_Sem_B010506_case_sensitive_pattern_matching_001("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_002.ttcn new file mode 100755 index 0000000..c0d45bb --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B010506_case_sensitive_pattern_matching/Sem_B010506_case_sensitive_pattern_matching_002.ttcn @@ -0,0 +1,63 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5.6, Ensure that the IUT correctly handles character pattern compatibility rules of template case sensitive matching (@nocase) + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: +When the "@nocase" modifier is used after the pattern keyword, the matching is evaluated in a case insensitive way +*/ + +module Sem_B010506_case_sensitive_pattern_matching_002 { + + + type record MessageType { + universal charstring field1, + universal charstring field2 + } + + type port loopbackPort message { + inout MessageType + } + +type component GeneralComp { + port loopbackPort messagePort +} + const universal charstring MyCons :="A"; + +testcase TC_Sem_B010506_case_sensitive_pattern_matching_002(charstring p_Ref) runs on GeneralComp { + + var MessageType v_testMessage; + template charstring m_Ref:= pattern "abc"; + + + template MessageType mw_matchingTemplate:= + { + field1 := pattern @nocase "{m_Ref} \q{0,0,1,113}", // expected value: abc ű + field2 := pattern @nocase "\N{MyCons}" // expected value: A + } + + v_testMessage:= { + field1 := "aBc Ű", // with @nocase - this is also valid + field2 := "a" // with @nocase - this is also valid + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass,v_testMessage); + } + [] messagePort.receive { + setverdict(fail,v_testMessage); + } + } +} + +control{ + execute(TC_Sem_B010506_case_sensitive_pattern_matching_002("parameter reference")); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_001.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_001.ttcn new file mode 100644 index 0000000..53be9e9 --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_001.ttcn @@ -0,0 +1,66 @@ +/*************************************************** + ** @author STF 409 + ** @version 0.0.1 + ** @purpose 1:B.1.5, Ensure that the IUT correctly handles template matching of character pattern definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0105_toplevel_001 { + + + type record MessageType { + charstring field1, + charstring field2, + charstring field3, + charstring field4, + charstring field5 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0105_toplevel_001() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "te?t\?", + field2 := pattern "test|string", + field3 := pattern "test" & " " & "string", + field4 := pattern "tes\w\b\s\d", + field5 := pattern "\[\\\]" + } + + v_testMessage:= { + field1 := "test?", + field2 := "string", + field3 := "test string", + field4 := "test 1", + field5 := "[\]" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass); + } + [] messagePort.receive { + setverdict(fail); + } + } +} + +control{ + execute(TC_Sem_B0105_toplevel_001()); +} + +} + \ No newline at end of file diff --git a/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_002.ttcn b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_002.ttcn new file mode 100755 index 0000000..b8f25ff --- /dev/null +++ b/core_language/B_matching_incoming_values/B01_template_matching/B0105_matching_character_pattern/B0105_toplevel/Sem_B0105_toplevel_002.ttcn @@ -0,0 +1,60 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:B.1.5, Ensure that the IUT correctly handles template quadruple and USI-like syntax matching of character pattern definitions + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +module Sem_B0105_toplevel_002 { + + + type record MessageType { + universal charstring field1, + universal charstring field2, + universal charstring field3 + } + + type port loopbackPort message { + inout MessageType + } + + +type component GeneralComp { + port loopbackPort messagePort +} + +testcase TC_Sem_B0105_toplevel_002() runs on GeneralComp { + + var MessageType v_testMessage; + + template MessageType mw_matchingTemplate:= + { + field1 := pattern "\q{0,0,1,113}", //"quadruple" notation for character "ű" + field2 := pattern "\q{0,0,1,113}*\q{0,0,1,116}", //"quadruple" notation for character "ű" and "Ŵ" + field3 := pattern "\q{U0171}" // USI like notation for character "ű" + } + + v_testMessage:= { + field1 := "ű", + field2 := "ű1234Ŵ", + field3 := "ű" + } + + messagePort.send(v_testMessage); + + alt { + [] messagePort.receive(mw_matchingTemplate) { + setverdict(pass,v_testMessage); + } + [] messagePort.receive { + setverdict(fail,"Unexpected decoding result:",v_testMessage); + } + } +} + +control{ + execute(TC_Sem_B0105_toplevel_002()); +} + +} + \ No newline at end of file diff --git a/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_hostid_function_001.ttcn b/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_hostid_function_001.ttcn new file mode 100755 index 0000000..afa82b9 --- /dev/null +++ b/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_hostid_function_001.ttcn @@ -0,0 +1,46 @@ +/*************************************************** + ** @author STF 487 + ** @version 0.0.1 + ** @purpose 1:C.6.2, Ensure that the IUT correctly handles the hostid function + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ + +/* The following requirements are tested: + * check that hostid function correctly evaluates the IPv4 or IPv6 address of the host. + * The output of this test must be manually validated. Todo for future STF: automated validation via external function. + * */ + +module Sem_C0602_The_hostid_function_001 { + + type component GeneralComp {} + type charstring IPaddressV4 (pattern "[0-9,.]#(7,15)"); // size of charstring is limited to 7-15 and contains numbers from 1-9 and "." + type charstring IPaddressV6 (pattern @nocase "[0-9,a-f,:]#(1,37)"); // contains numbers from 1-9, a-f and ":". The size of chastring is limited to 37 + + testcase TC_Sem_C0602_The_hostid_function_001() runs on GeneralComp { + + var IPaddressV4 v_ipv4hostid; + var IPaddressV6 v_ipv6hostid; + + if ((lengthof(hostid("IPv4")) == 0) or (lengthof(hostid("IPv6"))==0 )) // in case of no ip address is given + { + setverdict(pass, "No ip address on interface"); + } + + else{ + + v_ipv4hostid := hostid("IPv4"); // check IPv4 address with subtyping + setverdict(pass, v_ipv4hostid); + + v_ipv6hostid := hostid("IPv6"); // check IPv6 address with subtyping + setverdict(pass, v_ipv6hostid); + } + + + } + control{ + // execute(TC_Sem_C0602_The_hostid_function_001(), -, "127.0.0.1"); //not supported by TestCast + execute(TC_Sem_C0602_The_hostid_function_001()); + + } + +} \ No newline at end of file diff --git a/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_testcasename_function_001.ttcn b/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_testcasename_function_001.ttcn new file mode 100644 index 0000000..ec69155 --- /dev/null +++ b/core_language/C_predefined_functions/C06_Other_functions/C0602_The_testcasename_function/Sem_C0602_The_testcasename_function_001.ttcn @@ -0,0 +1,29 @@ +/*************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:C.6.2, Ensure that the IUT correctly handles the testcasename function + ** @verdict pass accept, ttcn3verdict:pass + ***************************************************/ +module Sem_C0602_The_testcasename_function_001 { + + type component GeneralComp { + } + + // add a second testcase in order to see that the right TC name is returned + testcase TC_Sem_C0602_The_testcasename_function_001_other() runs on GeneralComp { + } + + testcase TC_Sem_C0602_The_testcasename_function_001() runs on GeneralComp { + var charstring v_TCname := testcasename(); + if (match(v_TCname, "TC_Sem_C0602_The_testcasename_function_001")) { + setverdict(pass); + } else { + setverdict(fail, "Expected TC name TC_Sem_C0602_The_testcasename_function_001 observer " & v_TCname); + } + } + + control{ + execute(TC_Sem_C0602_The_testcasename_function_001()); + } + +} \ No newline at end of file diff --git a/core_language/C_predefined_functions/NOTES b/core_language/C_predefined_functions/NOTES new file mode 100644 index 0000000..b781742 --- /dev/null +++ b/core_language/C_predefined_functions/NOTES @@ -0,0 +1 @@ +- NOTE: The contents of Annex C are tested by the tests under section 16.1.2. \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D01_macro_module/Sem_D01_macro_module_001.ttcn b/core_language/D_preprocessing_macros/D01_macro_module/Sem_D01_macro_module_001.ttcn new file mode 100644 index 0000000..97c6626 --- /dev/null +++ b/core_language/D_preprocessing_macros/D01_macro_module/Sem_D01_macro_module_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:D, Ensure that __MODULE__ replaces the module name + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// The name of the module is stored in __MODULE__ macro +module Sem_D01_macro_module_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_D01_macro_module_001() runs on GeneralComp system GeneralComp { + + const charstring MyConst:= __MODULE__; + + if(match(MyConst, "Sem_D01_macro_module_001")){ + setverdict(pass);} + else { + setverdict(fail);} + } + + control { + execute(TC_Sem_D01_macro_module_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D02_macro_file/Sem_D02_macro_file_001.ttcn b/core_language/D_preprocessing_macros/D02_macro_file/Sem_D02_macro_file_001.ttcn new file mode 100644 index 0000000..8456e3e --- /dev/null +++ b/core_language/D_preprocessing_macros/D02_macro_file/Sem_D02_macro_file_001.ttcn @@ -0,0 +1,28 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:D, Ensure that __FILE__ macro stores the path and file name in a charstring + ** @verdict pass accept, noexecution + *****************************************************************/ + +module Sem_D02_macro_file_001 { + + type component GeneralComp { } + + testcase TC_Sem_D02_macro_file_001() runs on GeneralComp system GeneralComp { + + const charstring MyConst:= __FILE__; + // will match file paths of the form .../Sem_D02_macro_file_001.ttcn or ...\Sem_D02_macro_file_001.ttcn + template charstring namePattern := pattern "*[\\/]Sem_D02_macro_file_001.ttcn"; + + if(match(MyConst, namePattern)){ + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_D02_macro_file_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D03_macro_bfile/Sem_D03_macro_bfile_001.ttcn b/core_language/D_preprocessing_macros/D03_macro_bfile/Sem_D03_macro_bfile_001.ttcn new file mode 100644 index 0000000..b574924 --- /dev/null +++ b/core_language/D_preprocessing_macros/D03_macro_bfile/Sem_D03_macro_bfile_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:D, Ensure that the __BFILE__ macro replaces the actual file name + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// the actual file name is given in __BFILE__ macro. +module Sem_D03_macro_bfile_001 { + + type component GeneralComp {} + + testcase TC_Sem_D03_macro_bfile_001() runs on GeneralComp system GeneralComp { + + const charstring MyConst:=__BFILE__; + + if(match(MyConst, "Sem_D03_macro_bfile_001.ttcn")){ + setverdict(pass); + } else { + setverdict(fail); + } + } + + control { + execute(TC_Sem_D03_macro_bfile_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D04_macro_line/Sem_D04_macro_line_001.ttcn b/core_language/D_preprocessing_macros/D04_macro_line/Sem_D04_macro_line_001.ttcn new file mode 100644 index 0000000..6d4f36e --- /dev/null +++ b/core_language/D_preprocessing_macros/D04_macro_line/Sem_D04_macro_line_001.ttcn @@ -0,0 +1,27 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:D, Ensure that __LINE__ macro stores the actual line number when it is called + ** @verdict pass accept, ttcn3verdict:pass + *****************************************************************/ +// In this case the line number when the macro is called at line 15. +module Sem_D04_macro_line_001 { + + type component GeneralComp {} + function f1 ( ) runs on GeneralComp {} + + testcase TC_Sem_D04_macro_line_001() runs on GeneralComp system GeneralComp { + + const integer MyConst:= __LINE__; // line 15 + + if (match(MyConst, 15)) { + setverdict(pass); + } else { + setverdict(fail, "Expected line 15, wrong line number"); + } + } + + control { + execute(TC_Sem_D04_macro_line_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D05_macro_scope/NegSem_D05_macro_scope_001.ttcn b/core_language/D_preprocessing_macros/D05_macro_scope/NegSem_D05_macro_scope_001.ttcn new file mode 100644 index 0000000..6a9e488 --- /dev/null +++ b/core_language/D_preprocessing_macros/D05_macro_scope/NegSem_D05_macro_scope_001.ttcn @@ -0,0 +1,31 @@ +/***************************************************************** + ** @author STF 451 + ** @version 0.0.1 + ** @purpose 1:D, Ensure that __SCOPE__ replaces the actual higher named basic scope unit + ** @verdict pass reject + *****************************************************************/ +// __SCOPE__ replaces the actual higher basic unit + +module NegSem_D05_macro_scope_001 { + + type component GeneralComp { + var charstring variable1:=__SCOPE__; //variable1=="GeneralComp" + } + + type record MyRecord { + charstring variable0 ("1","2",__SCOPE__) // variable0=="MyRecord" + } + + testcase TC_NegSem_D05_macro_scope_001() runs on GeneralComp system GeneralComp { + + template MyRecord Mytemplate:={ + variable0:="__SCOPE__" //Causes an error as __SCOPE__ is replaced with Mytemplate + } + + + } + + control { + execute(TC_NegSem_D05_macro_scope_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn b/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn new file mode 100644 index 0000000..6f10f4b --- /dev/null +++ b/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_001.ttcn @@ -0,0 +1,26 @@ +/***************************************************************** + ** @author STF 451 (updated by STF 521) + ** @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 { + type component GeneralComp { + const charstring MyConst := __SCOPE__; + } + + testcase TC_Sem_D05_macro_scope_001() + runs on GeneralComp system GeneralComp { + + + if (match(MyConst, "GeneralComp")) { + setverdict(pass); + } else { + setverdict(fail); + } + } + control { + execute(TC_Sem_D05_macro_scope_001()); + } +} \ No newline at end of file diff --git a/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_002.ttcn b/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_002.ttcn new file mode 100644 index 0000000..6a7b845 --- /dev/null +++ b/core_language/D_preprocessing_macros/D05_macro_scope/Sem_D05_macro_scope_002.ttcn @@ -0,0 +1,35 @@ +/***************************************************************** + ** @author STF 451 + ** @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 +module Sem_D05_macro_scope_002 { + + type component GeneralComp { + var charstring variable1:=__SCOPE__; //variable1=="GeneralComp" + } + + type record MyRecord { + charstring variable0 ("1","2",__SCOPE__) + } + + testcase TC_Sem_D05_macro_scope_002() runs on GeneralComp system GeneralComp { + + template MyRecord Mytemplate:={ + variable0:="MyRecord" //MyRecord is a legal element because of __SCOPE__ + } + + if(match(variable1, "GeneralComp")){ + setverdict(pass); + } else { + setverdict(fail); + } + + } + + control { + execute(TC_Sem_D05_macro_scope_002()); + } +} \ No newline at end of file diff --git a/core_language/NOTES b/core_language/NOTES new file mode 100644 index 0000000..4298b54 --- /dev/null +++ b/core_language/NOTES @@ -0,0 +1,11 @@ +The @configuration port:XYZ directive in the header indicates the type of adapter being used. +The two possible port: values are broadcast/loopback. +For historical reasons, the absence of this directive means loopback adapter. +Example: + ** @configuration port:broadcast + +The following example indicates external functions used in the test case + ** @configuration external_functions + + +- TODO: check that each match operation is used correctly (must not be used to compare templates!!) \ No newline at end of file diff --git a/core_language/PROGRESS_FILE.txt b/core_language/PROGRESS_FILE.txt new file mode 100644 index 0000000..032947e --- /dev/null +++ b/core_language/PROGRESS_FILE.txt @@ -0,0 +1,105 @@ +This file is used for tracking progress of implementation of new test cases. +The exact description of required updates is in /trunk/standards/4.7.1/part-1-changes.txt + +3.1 Definitions (Tomas, implemented in 5.4) +5.4.1 Formal parameters (Tomas, done: 32 new tests, 29 positive, 3 negative) +5.4.1.1 Formal parameters of kind value (Tomas, done: 48 new tests, 18 positive, 30 negative) +5.4.1.2 Formal parameters of kind template (Tomas, done: 54 new tests, 34 positive, 18 negative) +5.4.2 Actual parameters (Tomas, done: 345 new tests, 200 positive, 145 negative; 14 CRs) +6.1.1 Basic string types and values (Andras, done: 1 new test, 1 positive) +6.1.2.5 Pattern subtyping (Andras, done: 3 new tests, 1 positive, 2 negative) +6.1.2.6.2 Using length restriction with other constraints (Andras, done: 1 new test, 1 positive) +6.2.1.1 Referencing fields of a record type (Tomas, done: 16 new tests, 13 positive, 3 negative) +6.2.3 Records and sets of single types (Tomas, done: 24 new tests, 16 positive, 8 negative) +6.2.4 Enumerated type and values (Tomas, done: 21 new tests, 8 positive, 13 negative; 1 CR) +6.2.5 Unions (Tomas, done: 9 new tests, 3 positive, 6 negative) +6.2.5.1 Referencing fields of a union type (Tomas, done: 13 new tests, 5 positive, 8 negative) +6.2.5.1 Option and union (Tomas, done: 1 new test, 0 positive, 1 negative) +6.2.5.1 Nested type definition for field types (Tomas, done: 1 new test, 1 positive, 0 negative) +6.2.7 Arrays (Tomas, done: 36 new tests, 17 positive, 19 negative; 3 CR) +6.2.9 Communication port type (Andras, done: 1 new test, 1 positive) +6.2.10.2 Reuse of component types (Andras, done: 6 new tests, 3 positive, 3 negative) +6.2.12 Addressing entities inside the SUT (Andras, done: 3 new tests, 3 negative) +6.3.4 Type compatibility of communication and connection operations (Tomas, done: 5 new tests, 0 positive, 5 negative; 2 CR) +7 Expressions (Tomas, done: 11 new tests, 6 positive, 5 negative; 2 CR) +7.1.1 Arithmetic operators (Andras, WIP) +7.1.3 Relational operators (Andras, WIP) +8.1 Definition of a module (Andras, WIP) +8.2.3.1 General format of import (Andras, WIP) +8.2.3.8 Compatibility of language specifications in imports (Andras, WIP) +9.1 Communication ports (Andras, done: 11 new tests, 3 positive, 8 negative) +10 Declaring constants (Andras, done: 2 new tests, 2 negative) +11.1 Value variables (Andras, done: 2 new tests, 2 negative) +11.2 Template variables (Andras, done: 2 new tests, 2 negative) +15.5 Modified templates (Andras, WIP) +15.6 Referencing elements of templates or template fields (Andras, WIP) +15.6.2 Referencing record and set fields (Andras, WIP) +15.6.3 Referencing record of and set of elements (Andras, WIP) +15.6.5 Referencing union alternatives (Andras, WIP) +15.8 Template restrictions (Andras, WIP) +15.9 Match operation (Andras, WIP) +15.11 Concatenating templates of string and list types (Andras, WIP) +16.1.2 Predefined functions (Andras, done: 71 new tests, 68 positive, 3 negative) +16.1.3 External functions (Andras, done: remove 2 tests from ATS) +19.1 Assignments (Andras, WIP) +19.3.2 The select union statement (Tomas, done: 11 new tests, 6 positive, 5 negative; 3 CRs) +19.9 The stop operation (Tomas, done: 2 new tests, 2 positive, 0 negative) +20.2 The alt statement (Tomas, done: 17 new tests, 1 positive, 16 negative; 2 CRs) +20.3 The repeat statement (Tomas, done: 3 new tests, 3 positive, 0 negative) +20.4 The interleave statement (Tomas, done: 12 new tests, 1 positive, 11 negative) +20.5.2 The activate operation (Tomas, done: 4 new tests, 2 positive, 2 negative) +20.5.3 The deactivate operation (Tomas, done: no change needed) +21.1.1 The connect and map operations (Tomas, done: 7 new tests, 0 positive, 7 negative) +21.1.2 The disconnect and unmap operations (Tomas, done: 7 new tests, 0 positive, 7 negative) +21.2.1 Test case stop operation (Tomas, done: no change needed) +21.3.1 The create operation (Tomas, done: no change needed) +21.3.2 The start operation (Tomas, done: 19 new tests, 9 positive, 10 negative; 1 CR) +21.3.3 The stop operation (Tomas, done: 13 new tests, 9 positive, 4 negative) +21.3.4 The kill operation (Tomas, done: 7 new tests, 2 positive, 5 negative) +21.3.5 The alive operation (Tomas, done: 1 new test (negative); added not validated tests from STF 470) +21.3.6 The running operation (Tomas, done: 1 new test (negative); added not validated tests from STF 470) +21.3.7 The done operation (Tomas, done: 5 new tests, 1 positive, 4 negative; added not validated tests from STF 470) +21.3.8 The killed operation (Tomas, done: 5 new tests, 1 positive, 4 negative; added not validated tests from STF 470) +22.2.1 The send operation (Tomas, done: 10 new tests, 3 positive, 7 negative) +22.2.2 The receive operation (Tomas, done: 45 new tests, 23 positive, 22 negative; 2 CR) +22.2.3 The trigger operation (Tomas, done: 44 new tests, 22 positive, 22 negative) +22.3.1 The call operation (Tomas, done: 15 new tests, 6 positive, 9 negative) +22.3.2 The getcall operation (Tomas, done: 2 new tests, 0 positive, 2 negative) +22.3.3 The reply operation (Tomas, done: 2 new tests, 0 positive, 2 negative) +22.3.2 The getreply operation (Tomas, done: 27 new tests, 12 positive, 15 negative) +22.3.5 The raise operation (Tomas, done: 13 new tests, 4 positive, 9 negative; 1 CR) +22.3.6 The catch operation (Tomas, done: 15 new tests, 6 positive, 9 negative) +22.4 The check operation (Tomas, done: 3 new tests, 0 positive, 3 negative) +22.5.1 The clear port operation (Tomas, done: no change needed) +22.5.2 The start port operation (Tomas, done: no change needed) +22.5.3 The stop port operation (Tomas, done: no change needed) +22.5.4 The halt port operation (Tomas, done: no change needed) +22.5.5 The checkstate port operation (Tomas, done: no change needed) +23.2 The start timer operation (Tomas, done: no change needed) +23.3 The stop timer operation (Tomas, done: no change needed) +23.4 The read timer operation (Tomas, done: no change needed) +23.2 The running timer operation (Tomas, done: added corrected version of not validated test from STF 470, otherwise no change needed) +23.2 The timeout operation (Tomas, done: 1 new test (positive); added corrected version of not validated tests from STF 470) +24.2 The setverdict operation (Tomas, done: no change needed) +24.3 The getverdict operation (Tomas, done: no change needed) +25 External actions (Tomas, done: no change needed) +26.1 The execute statement (Tomas, done: no change needed) +B.1.2.2 Complemented template list (Andras, WIP) +B.1.2.6 SuperSet (Andras, WIP) +B.1.2.7 SubSet (Andras, WIP) +B.1.2.9 Matching decoded content (Andras, WIP) +B.1.3.3 Permutation (Andras, WIP) +B.1.5 Matching character pattern (Andras, done: 5 new tests, 4 positive, 1 negative) +B.1.5.6 Case insensitive pattern matching (Andras, done: 2 new tests, 2 positive) +C.1.31 Octetstring to universal character string (Andras, implemented in 16.1.2) +C.1.32 Universal character string to octetstring (Andras, implemented in 16.1.2) +C.1.33 Value or template to universal charstring (Andras, implemented in 16.1.2) +C.3.3 The IsValue function (Andras, implemented in 16.1.2) +C.3.5 Matching mechanism detection (Andras, implemented in 16.1.2) +C.4.1 The Regexp function (Andras, implemented in 16.1.2) +C.4.2 The Substring function (Andras, implemented in 16.1.2) +C.4.3 The Replace function (Andras, implemented in 16.1.2) +C.5.5 Retrieving the type of string encoding (Andras, implemented in 16.1.2) +C.5.6 Removing BOMs of UCS encoding schemes (Andras, implemented in 16.1.2) +C.6.1 The random number generator function (Andras, implemented in 16.1.2) + diff --git a/dist/.project b/dist/.project new file mode 100644 index 0000000..b88c222 --- /dev/null +++ b/dist/.project @@ -0,0 +1,11 @@ + + + dist + + + + + + + + diff --git a/dist/15102010/15102010-t3ats-tps.pdf b/dist/15102010/15102010-t3ats-tps.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d426016b3c69491ee1ba07227d7c89607d3753cb GIT binary patch literal 1390166 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

P(4u1z04h{TfbN(OAU84t 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

aisPq{FARiMk1IA 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�KST?en7qV3)4 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 z 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

Sd`a{mY}{i98;?%O+L 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

SyElX5#} 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¥3=RkA^zAz2@&q2nA|_#JX?)~4-@8Hb4M4{C7!k* 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 n5MxMKkPe*TF86hrv2`!O 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%0D1L|5IPzJ{%|5C0)o{w>7)ZAy)UgYlnJYHalX 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

ZY5c$OZGPi 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%0Ae+!}LEPi(XoDdTENIb? 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

?+n`-M?q(JY26c<3^$pxtf)&*&McXb7W^= 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

O!MB((N4-;b3<_shjvsaRMbn_l@~y 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

l;(MT-&GqB-~Fi=30Ye{`HO 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 -Hbpg+>zC*(G~pj`!#E?*5Igxf zm!Twv2O{80WUQzUUmjkTC>>gz>~*Bxklv&yLI7+Ai324BdYf{gG6TW$_#nJ8SS%QV z)`&}v$Q?)`z}^%|q}h>`-`T{){&_sT2UO$JzJ{`@H1H@y_da0ADsy=) z?0UaOrmVceE1%(3mbHu}qxzOs>O|JUK|9^UTix9)>Qls5ffRYqqpD&T^6aJBrVqP==~7L6(1rE^LvVzQFt=bc-x0^1J$P`J4WbrC3P^W?F%rj)PZ3(XTm6LI`vb(ba+PfhBEWZ z1FVfvgG$jRfO3w9_(eB~Z3Dpfrm4}kQe%sxyXapc>kN||{ME2f#B7~- z&J~It_1Y<$E8EvhZ(|{3GW#!?3P0jfc`~dv!~q%(ch@}DO*~)*Qi~c2OJBaz23iS{ zkK$n4M6@;%M_(3x41XSg)gm!6(j#4~#M|T#){9#*{VeRc)C+#*VNe9FnT$#S-?p2| zY?eJ18AxnA4mlgmQ+cOiB!2qX~vZX74n7gD^?hg&Z;%PjGp3`lu^vv zx#!zt@`zD}t+S3YB~AlN>M2MT!%)T9YRfVPQ_9p}2N)#}<-s##ZBr4!IRG*FO#{a^ zHmK`q9HDrdUfGhRRDz@5J3MDcg&oyfCS$fa196E?IJLO~(z23==XrKbGAzPdO}cZh zx5!SS5Y<-dDow$YJmUt6z`=NZbZexT)K+C)E2MlJx1TCwMemF>+NQp0p;w$p8~=!} zTd=onRNq!;HZFe6=LufpAwogyJu2N+@jJcQCNpfS|5G)MHCnh;c`j?-0nJQfaQS_j z|7Gty0HY|{K0cQo;0Pt5mm>rS5CS2g1%!mq66u6ufp8?3 z6zshVc0?2lf(1oXP(e{aK}9}Z3*Y~lncbbel7wb>@%Hk|?rfQzooC83v-8Ye)?>U@ zK&YV+Z%}0h=N@DZ=P@t(A9??q^3u7e;%1s?mSu|O2Y+=-DGGOS^86t*wj$91tcE4t z(_YD^J(8}$=%=dDlS$9BuC9$ovq-<})V~vzO zQ`#}`4mpP@Jo0Wble^>q1FeO^`|q>W02j&9Cy%s6vU8VjJ}8jxV?*PuqvVAZJQS~j z@*UYzWcn=@W-auZz-xH8CNz^oq=wDVZtdBqL~;yc9i_3(6M(Do(Ptg5$=K^7h@zc$ z;>ey<-B?B+yk4r-gz?s)Zt29Ehg8>}lBcG0tTjB8_cP{hR;f-GQp2@`nn=k;sPx1k zL#0<_&JX3xZa zQ(MWDFV`HQbU{` z$!gQch^bR3ywo)Q4@Z`-iq)k(owGzL9`rJPhSnn^8aSd!A|g}imf=l2kIqK-rbWDM zpwzlVWm`5$)527<2;S17_x!3dp6@6qR*VL0q6?E=lj?dKo{VdshBoA>{v_M_i$=AZ z%11SusW!3lkcN(uK@87{b5=3Qczb|vxtEU zM3CmI$qUWjq%4oqLqpwnS<_}_L$|jnqi{4&y~d12w=IBoMmVdm1tPJ*{M7c&w%r!_zZKEQa6a^kVpa+DXRn+Iy-oZc%>1G5k@} zj<>z#OG1{&oucW0(aYo^}T z>C{Y4w%Xf<=MX6}s>7`0q zmY3X^g|n>Aw!DKz_RA_yXg4BAZNVvxRwery$sykAgqP|1`{7(?iAxzVrgy~fAa~Tl z4wVstCA(+d&2DZEd+DOf9PU}kyC+CjMSVilCBff1k^OY0yRTeD@)>V7-WBBQDB9Q+ zOxq%7Wid^$BK8?Gs91Fk&CR^|bjD2bi6VG@vAcAQ!yGuRjH6y@&BD;!38fCBGi(<1 z{y?RJPYy8Brra{W$#aVnquV6enpsrbfo21geZUlyvO?z-We(_RS{!KO&-lD8r4D0U z2u}iHcw@YEbfJ?sN40yF&Ma_fdC#o}C*C@!4EekRRJ0svB5is>Z4R%lfaf|;D^8-9 z8OA^l?i8eI{I#M`9~+l)1!{51}`t_7bu{=g}gZHZ2sIwd4!ayQzugXqygVl z4vH>rE!|J$gShx`Q#q7y8pU%#5mjo?3n&gnQBuy_O4h-0_>Gth#8s4AI$gfgqn9jH zR*1<1upuSUA+APx_K3>i11|BdF}s8(DPE7up)^`H<2AG>J4%gV8hWiO zW<})nByYv$^Vhdx5EGp?jo0?F+;PyEIpRzs$0@nlOF)JFG1nn7m?u zjtymok8>)R$+Zb+9N9Di1kWi)ofe90qKORa+%mNSm4?*vEf$|(!a;*gTyCSbWw;?L z*`eHnp1!(ak*X>nnWM0i_Hp$i5$cE0UKRm&BU)DaKRhv=tEoWdw0vkaJdIMtgR9flG|q zMUh5@9UsW9=`%buqBJnxi0Bb%bi>B-`7*PM@@UdU#n_!}+us z?U|g^>n=ywAalxls=;tMXgqPLI`&~wQO-<#M7p7liEzp>ur4uq8JY`tYB808S^bNX z!*Mj1As4wruYerJh-M{VdCo%Pj>RZjI&i-W9Hlrf-bQnOibxh>i`9o&sKa5D&>Llj z9CU<;XzT5EqUJK)%_?KvZPpxFEGWfBuJ)=_i+^*?qqkw*ghwfh?BMA&mo~R_=lKP7ZH_ditjNraNtk0v-*3>=}P4J(n&o2~W&84aN{ z@*|XNkpac9~}QtrSUl3+hxd$IWwyZk5o`ep(8w%wvvnl$I51bE)FuA;K?P zseJSb?msmPe=hPP9S5v(n|I>yC|{T0>7_`2)13u5*)&RzPux`s1zQxD$ipP&!~5$hzFsxf=jcr@Hf>yW2B?B1X`P% z#u(R=WnW35D7`D?(Tpr&sy#bB2bT{hE9B}@1y|)};g2R&cJSeCbVY1i_3pWq^apnb zkOdj7l{yAH3iC?yxmT$LrBJeq#VjxJ)ZJt+D=2MSfrs`i{Gs5XNz-{^=YHu;BYw4L zgNiEGYwqQJRH1036KTUnqUqhKM^;j|tfBqj*%+D?kn0e=`XQ^@B8HA=3p#hW_(7+1S3SFc2 zGZ&vWwfGb{VEDMKA*pFu>HT<)wk3M@T~_cw#aZ~%qPRcA>kw7{7-~6IaIGT?f6(@_ zhfSd_OX{`JdW&S8#fR`slAVIQbyQGbly0gGtFTkhM&iaHxJ(Wt6b&dXgNp{T$$*M?W~ld~c^!S+p)_0Vtn%^L&O(#A$GcXH8}P^0j3C5g z+bb&ZZL#9v`o!7V#fe9-6*#$JN3PWD=#fZ9g(8$~O$LTgC4{16)H7mMCw_ld#Q~5{ zotPZXZCUsrTuL6ihtZx*GtOuOw5V;QsE2$!Jnx+(1!*ev4af7IZ9cZm+nmAH)WVsX zdSfIQP1{!Nkx;Wy=P13aL#PLfd6hMFPWCa|Xr|R1QmWKj#F;zCO|v0+??{%@?{=1N zSX~a2f7-BHE`Az)$VZ&>!N$VCNj2)!b!>IeFSSU}B&Tu7ZXzr@I)~{n;UCz8^jsXaA>;PRmqctGMJIB7K;*cmtoDp!%ZjoxO=;fRxJWtA_j~n z)5~ajLg|78A&zs{IipxEg!86{Gb z#@i5J5~K*O7>zLr&np7QyAPaGHRB&%h0633Z%Z%r@@U%FXAzZhcrG6{QDI0j%_EBy z&uK)z6aLI}CBS-Q%W3D?IlwT`N&MDJ%K$Zhu}$v-f*c# zb(#?#O`%#q6A5}mvYgM9OHho#5gk?2_*|r#<&5!^6d>o+Jl~2;?c%Ux{qSKj7ss8X>!2!rloILl*WgOEtW{ye75|m7=yidrJ}6 zu3A#by@N$Dm0q79cxICfver{}Z|O6KlWL7-_ZQikN0s>QCaaZK+%jU!?--$8?J-sK zsfhi%d7)A)$*_J@bq7$J9Ix;p&k-A?zEgypQbLhpED-sd=dVIUR7ZA~AuwlKTUZft zd$UcWvn+CDgqx=VgSe_um4INGIW?WOhqsxJLTW|>^mg5CbiL&c1_Fi-O|Dl+m+8h? zmg5gJF?O)TKu{yslGlEsN{7O+dG-!Hm#o^a(p_!YwX&szNhRecIsBchTP%Op`a{cI znj>O_^*m`SM$d2wOOcXl=*Cke(8z)m$pN2YAHT|iZ`USu7|DAe)8^brvC#tEl(@l; zZD~XQIV0|tNu4~Nvvzo&HoHHMUfOjla$`oh1Tv7FC9R(ZjanXm0q<8Slm6Ipr^N#x zCSOXu2G2{!TG2~-lvU@C8FDGTJ+=_aOO_h?c5>U>gq4`$gf&c8d8(%GQ%hXlgFk~ ztd>p2P1QMA?MIH91U6-jOxG#x+%fm4N>_xjh@VtOiWjds2HaUq@1-^uannNZpoIqw z7zRy7JBxeWDH-%;!XgR}sT%}-$Y=3nNM8JNV7h3j&Wpiz$(~2!j10)5p{~M)^+j$N zrHKrt71kimlHqq&3Z07u+d8pkO+( zo#FFVG*7TSEf;9v6|?ag=##rLq>u#k)BEDJGsFDI=P9dJ0>_B0Ph#IsR4toY2wPX~ z7!vL;Wa{~wErT#g)R=99vS( zHtRQNvX5+Dd5(Xl9oHTl>iLtsocHYvrz))hHxqGaT~zN*SL8LQ%=|msf>{X$DN8|^ z0&x>o(WsXAfte=7L1P_Qt=h3jEyPrdD8aS2XzNfGARG?-Q8@lwghPiZhu zZ*1Q5S!BXxp=?V*I!fC?Ru$O;*Iidpn5yV%lAL%I4u3SzEU!hzF#6GYxUw=)Wi3?DYIF8Rt zusFEl`XrHZU=^|)?(d|2^QU;% zs&$mz&(Yye>j?ZUh3Phfe0?Ts*L`0$h=#p>SXYZgJaMX|f}P}4>88HQUM8$?+Q9DV zNO``|AaYs}_PrU>wrpwNuX#a}4Bp(4mLC$g%4O4%?-fY~!)B4g!49{o5td z$Hw=khwdKVyAnK_U>_2`m?vP}h*`L5jq(1C?6UMIWVcjycW)tS^?OARZvBLDJmuUi zZ6s}Yu4s%(PCG`P`Ya7w8%}BUONS|*;Ma>PcPq8_zHMVWed*B2-6S=`g_L_r2N@>E zjZXyJ;oGO=3~pVpJ80|sp_+}JCvLIod1X;BLJ+j{h><+&Nz0bIZLPA60!j})mb0~a296c zik67^zqnTrRQvSHnSqJR4K&nlq4jr5L0LD;$;U|tt%alW337;oP+`0x3nqM{vD(z* z>cX)nnLc@`RV2!0=wVC9{K8XZ8?8e({crkwD?cQBE|Iu+#UZecV#Y87aY4t1w& zcRRh2meUyhna=<+J0=^9%mIZ6dC|McyW=iv_}Thmf6{l-q}oQ>9m)Fh_CABb7D0Dr zKf$bE4iUMoiD{eKGgA+v6YCik@vT4H6E!wM3Z-hyWA+Um{7X1o&vjaZn_y1G__;#) zGUZg_PZKP1f6(M;uw&~=9rLz$wb2q(Jg;s&d`j$zui(8WDZQxZT`Is#P8NaCw3)iZ zQ@I_ev$W|+&lb7gFK!#~+ls91-)}Yh!er?C!!!21tISH<7&9esWu-`~3we!Q&-hHr zb=VE$IB^w=3)qK?0Q8nl1H06BDsk$`F3B#qqcZ7qDno^UN?q}eve9dsqTUwoNy z)m-s8rWwg@kufnOWTkYMC}`MWxXh7N1&oa{Z0z)<%zyI+oEVF2xMINYNMxV>}73WeKvxxJVgy4CYXd*FB;r%0Guv*E{4HseNP2Mw(a}s#V zRmG0xu;!4cG~BcQsJ#X^`Wf?n)AIrCVj#u=l0=2XBkQziiImgfa4r zG%Rhx-Fm0=x%dWYm85K`N_S|~-1hExoqA(H7Ks@;&cAJilOqLBXM;(Je?EK%uqvak zv))samTktoD7>^9(ZuD)|mrX2G?sCMpRZ@?=T(u;dlh%wQ%6snlVcaKc z7ix>c@=9D+1*oK<6vh139MOC)G5foiiw1RhPzpM%Q=-J&^5m}lYE>wp6##(kCRRVX zYf8iG-Mo%}KSRIr)OnK(t49A}p=DHbd@L*9Bf8j!E$hd@@e5FET*p%-SDltf|BIL= zs3a+FvJWvYoS~#~AoqR}jLxdRv}1&$yHn4(THMp=4K1F{x~^lO%7cI7sc;c{p!IRw zy`e_h7U=Po^0Vvc_jK{m9xSs1X*8Ffc5BQ&0>AEFqv}gu1&jXaCsfiohAw5mHw#gz zrhw)X%qqEDSa*5VZmb5q@4|T2ISWK4i4gET`D`;#bWI~c`>H?Fh^XW|Hi@1I?Mn0W zbXJpYnpOB-)+lC2zRm7XB$WVl)bZfO)*7A+?|IC0t8GFfYo}wAgln`?Cjp;TNF;!U zyrzz$T86+F4+G|#A1)WvZ*k6Pq6X-z9I7KYtR9LOw6Pwp8WEQk|9*RT@QAwkx$z ztM3BXz8NVl+x@;!tLtK;OsWkKI9DX)t@*`rw_4vrAT#ll9W3FCa5L^tG#Op7*>YEx z#GZ7u%n7}0%QXKRbu(J&{Ehh^2Y~5IWaj5ujb--?4(KEGdWxZjO7Ukk zVQ=sk@ABX#+}TX-4;x^52T3doS2ACDx{r^#jpD4KIBcqC^lg3%9<#Ec+SG2L0aij*HNFWZeB3@@?XsxHYTlZkvn`WAEY^NY{13QbgGOXcn^NBkB`Cv_6? zg(D+F$!mgo{MhjV2=kIYMU}J=!Q`Eo4`GMm1&xAC2Zj|sy%!9k=4*KYtxa`$59gJ- z>G%wJ@=F+Ys>*H8cRaR<_ zI#um{wspn`7Nh1CL2`rA)Y;nP&V;d=_{4lc2c77kK#WApXTs}xcxvBC?#K?ZP@zqz zKQKRYn2ykt#EFj3XL|TO+2k`Q8VXc+Uoi|gf9vo+izLfp97jl=e&J&F zsR(TF$$lJPQDqT1dt_5Z)B|?A$sl(W?`H#^m{;^&tLBp=J7;*EJBS0~7$I3l_2Wp-$)#`xX9# zYMUDhRh(+NC5oQO)7K;hNiu-lfSG`9JoeZCp@oncvDp_Fq^3D!1HCzlo`j_diDyaeit> zuBv!t*z6PID?un*!Zr0|nkFjnRhh;w@bjtbXb$*kz>@-71>@YiP{-PWvW}_;$L5#( zF|oKc^ zd5?WC8kr{qlpCPE=b5h~%D4pH_bk+5!?hOH)hP3dzkB@%?Gfa;(ayKNrdPhyIo>zP zh58iNaM@jz4yhm>ocUFQT!CQSqowI)|NoF)Miq&_dyWQSd=lRvL+%sfRuKL*|HLy5 za|_qmBawqH9sArvAA^J}j!BO|(*ysj*Ruw?7Dmk3gmwzOkuH{HprgFUPi!nG){IBb zB&Nr8g2-J5Q6Nne`ru3LCwyfBXr)mXfUNsQ`CwiTp>h%2mhubvL(n@!X);s%4N1!%KfbwlY~z zN543?0;~o&^v?_|b%5+wq6p~S9vY5`kA=bjx&@6HF1+`SLwEyi(bv4!8RSue)Il+~ zig$^yjB@W+-NS3pEgQTw*6_H&>(#YVdzdavTu;^UG{vcs5dQERp zbbvjk*>Ry_QpAB1`DIJCVxJ}12YcJrzG|s+Yf0z^tDt8B{XwWI@tIV$yIp~^5$0me z`soG!W6l!)lML8ly5ug21n48q!|RGS2jwx-+nFRFs{6Ip>4exYj|CkY&}uM^hkEtG zf|P5tlZf>L-g0EH6@xM!_k;Dj-c1jahTS%sZ<4XWauu4j2SwcB)u}F#*1zA0mVUh6 zU@(M-jCFTUmb)AMdUxL$DS4H^E|zY7x5J3jSGoSXE@O}OTZ(Ev|1v-5gl?fks@x6R zo>Kd*@^s%?__r!}gAkSVp^I=aX#65vOT;txHY)`oYuE(4Gq9SB^lkOioyJm)2d3Q{ z?m-roGTSe%K`-Jblsi01!22W{-NEr*=|iKF+ZD38@0 z#|9?bKW$=~2Z}|ED+Qq_K-GY|g|q^?z1JLs!S^}JHy;G)K~m`C&w~2ltCb@h0&AH= zeuR$TcYBbK<+I*>F&DkL_PTix&C~rbgL3P29{47I2DE_~quXli@4E@VE1K})+4`?4 zS-rInUoE$%9$Nh-E9&G{X?DkFS!6?(-UH`sVn3xV)HxCgWjmu!9>BMr8z;wl?TKvX zZx=B=eF$OY_MPBp57}78YHA_RvA^Jbtu>sbp%}~xrolOkuQ+^StRt}Ty*LUmItJ`5 zWX#aK{-z+pOXg+dO*s1ix1JXR#AU=Tn3rDYODaCNcQ_z)P)dz2KTj^(pJai4CXniX zximb`Phgrx1cp4IC#htzCp25`^yL`tO$3AKVM|b3&+~pX_|g7uHdS^!)&=})#V(3J zv?b@)BBxXvx${)4NVNnB5Qmg5IyT~w$csEwWAd~5Aji%uPHC*xP*$lTN%*yA1r|di z)u7?m|FWkTUb_cjwhX%a# zKQtHWRh9QlYuhGvPC1;a{Fh#fIM%}Y`DEjnw?xisA1PAZ%zLv5WuYedaHqeH9EAAt>qrdY*g$ee|xhHHG{2rbo zCRh47+$=&`w5dGDo&6$YguKSOP(DsEl9c7!NNDm(8ivu0$UTUeY`w01$1?eym!4tPk$fn15i9K*Fh2uKwsf<_74GBmn3GicVd4 zJYR56_VA^k=i|{*Hp#{n>)WQg$DHv)rFK8CnWa4mVm8X{6RS0uA2NTFq|I7rY{j}C zOUAl5a!Bcf9%ZgaQbAgMd_Z@8>wUy~?uN{MUCqxMF8D^$5t+=R)AFo$9u~G^y?wIA zTEGXPR=%H2eAcVPL5USf8z_ zsQ~Brv+kPLwZFS0mrJO8ktnW+y^?c$&xoi$;HYAab-aabDMs1BZ`?v~z)|@gPEYg) zma2!j2CD=0-rtxaNAMMfv^`lJ{k1~ChfjIfZ!FUcxmR!DYQ^JpIw=Q@zFWVXTe=$4 zLObCk0csGB2K|grp0VQ<|4qy@TA{yCscWJA6Ja;?e#f`5XNDT7v5dWTRKRDCcNn`f zzc$$ah-4@riLXtft3VK04eBe}JIXs0&`$(bfyWogfXbcx6yZbk0U=I1QW)d=VM_t| zp8I*TfgLxy&H5fMPju(|-R&0|-osAMEUBVyi|ci*Hz=Khaf&;ePqeohd@i<5 z+Aq*$T3NNpfJ5ukw>DFCvz9SyVS1XsUZcw2S;|)xHc39S!WM$g&w~KnLCnK<-?VFZ zjl2E18Dex9Z-Ft1v?dj!j$|62Ju0E6KK~iNNc{7thW>kZ^u9DoxU9c?iX_9tAS#|uxG%w0UQC6q~AZkAR$rscIbY1JParpaTsX?1_KOfL_(0!SAu^~ zoV@}L_$|a0h*Hop!TJ+ktFaBmWrgRFwWhT}G!^2K<4i-=k+%&d>#VhyU2`d)v(#Pk@s_9s$MH_#{)5pb@xM!gDc|xJ zPrg;ybv-e2$8i(Z$0{I*BYsu=t;e6}ta67%wwr~bu={(oR*GX)UtbW%!5SMc#RO?{ zfnuZ&EQ#LdifZ8Zdu6OjE65;U zF)wia(DS0b01?K({qknr5N_wDlwZ5DGH_~RoY?x%=-p5-8&trJM1?yF_PCfol zNl_`LV^>`2>n9Wc*Ev~O)l>?=NVncR;V3Zg3(#9}&;Im03UaX9T^!>f5~^)*%GueEQc}a}BJP{BI4Nhd%0opLS0Wip)DO!~02J z;Yl=P&l|l3|3Cez+3PO7(v0t>z4_>Sd`Bq|n18w}3L`ht<)bVxqE5O}wmUnDhhbXf!a;VF(56_r{9;&{VUEvRdv3fuxNZSD> z;>VwCr~o$efACHIHCGYBh^_&>(oooR3Fdo;Ydcd9rx;!4o?m~T8`QzC>+Pc{F9U*C zaVQP@H5wNyo_)=N_T@tCTJtsT;XFp+gGdb|`UIpDU0Nk;YX!RnLi{p^n+J<<)j^Z9}F?X`{vYzEyQfQKO%SD4T=V8yxTwS zf20$5r@p|>2@j|>ae$|XMQWW!>X89)V=yd8s* ze9w9II{SWDct&#(7?Uw4hR{MF`!OeV+@7)>jXs`3aL?YZMMd}Iow_iYVR`)o3n#mu zGRCsal5WQ#fEdwH54uMvz^AT6+s?}lX9mc{+qL;&@W%)5#Js1W8lb$zwwxIuUILH% zK%bH9Jt2e$_}w0p8VqLs;_K$&m;cpvz^o(N!Ge3nL5&}ci%9?Pi|?NRpI!X|D5%Nh zvw*Do-D_+>*Z%-n|IlcmOv6UNCub=?RUhpoL!KysaW^;$P(=sf4}xyv4}yns?^IZ? z|LeF9*?*)lL6DcjQO4NT>Ixg==KBYowtCp(crA8JD(H@Og_5tg4w6L$|AQwPOpw2! zflv#Uj*Hwr&^Ay1{lEAu`NM+*E-97~HU*2X<$qs~Lta0ye^Ra?1|azS3A++npv#td zg6#hvlqi_rV#*lk2mywND(}SY{||k<2-sxbQ3J}B_l&Xbit_)1{a?*i%^zfA2t!H3 zso?XUOB$h-7mMt_c0Nzp_}A#Pnio)lAA&jEbe=-QR42+Qytu@&`d-rKgR&^ivV2(= z*}LPK?4W+Il6PW*T}aB-G6(cyo#)q6lRs;zmVmgDxu21dDW;I0zXE|$*3hv?Am$>X zUoFx!fQ26wX<@1oN>gjNR<$*UIx-0K*AM?97o@8;hYacPIbA=`x579&2NEQotwn)j zrl|CvgpBIEo`1MJHsw9LvFuMdm#n#{Y7f%yOWE=DCCro4-ZOgPgx9J*H?F$B+&ley zljVjQ6d{FhhMT80`_=&($%ue}Qa|`aC&5S-Ywx zOKX<_LtlY+p{?se;;x#5>flXf|~pFcct_Vhn~mfyI%KnZEUWdz3v8!^#QNjFXWpwcKvPKOiLAe zJ4mI;5H)c5W1He;BtW;@L%qvY!sPNUOdR#;dF7Y}u;JsbZRa7_u1Qdy3^X!=TG{vvr&sLhJw#X5G&=0?szjR?c3g^jK0f<$s^27o0+9o*>S^cl;;)@rz@Q zXo$?7=);%p*VflYC+`5}H3-dh^!eEbrMlI!m38Ir9=m`1hsm<-RUg}ZFMPjeiv{|S zcfU$JvANuHgQ%qge7bBAj2WaqT?DL|v)_XfBZNP{b>Mhjyf|;nN|(w@#mW!wjqwA# zKx@6pIf?&_(YW5u5R-v-INh&5-?^o;=8N*~XT=O8ZnGde~1Z^peWqNEu_krIw*(uOY;dn*_jccW0%PAff zWeBv|C?mQ`wSIzH*aWUu?~f}|P>(fx+T39Mm6xh^40SiM@2CZ>;!(9-% z7g+dL6LvZ*q7qJBans;x0r?dFX2pfAiq`tbiFTc*w}w^M&wkOQ8!M-7=25bf|H-a== zxq+6upY&`yxy%UklLv(J5-64$v#S%B4qgP68f+g36nc?L_B>0)MaQ{Rio9>s^x!Dg zU=dZlbf3yqQDkb&P+|9lKNo%SoW8P3;J8Oc18Ecf!tV^^T?2ax=hZ86iTgYY{bCl1E$eZ-* z=H@l1t$9gD^x>Jw?;dD(oHol%erDWpn~xZ@IJaYYO9y;htq@u0WBy2zEB9rk=JSvwR0eyH7v7Jo z*1y3EpUFq$v$|A89lI~3nc`YqBXsiq@t&~cN7&ChC%H>WSbJY|r6I1LbfWDRoPL<` zM!9OVCQQQt0>37IvA)wKIV&kuv_kzt#w*x=LZXm4@a}$PqJk`U;rqWf*7;zKB$;;U zzbD2*=J5Z%E(nO|FJ38|km}QeADK)@fx;SJz;~7B$0nw#e0BM^|Rd?xlYk`3y(FUh|h& z{5IZVd3@p1E+n*B_+8B^d|2wkrkgY_f*!7kw@|gPD;<&pT~cc!CDv`!W=S;1`ddS7 zJWfZ}=On8GNgg>MPkh`o+}}6}7Xe9L5`o8EXwJxeN59NL{NC(saz37P%_qgfXzqSh zrpge#E}XoC%-7pQrgh2|D0n(7=`u(APVN4V{e+g)MB=2 zog#Cl>GnSko$4n8q1lZ3OKHPRvQU8%D}QFV+)vOa|JrKLnf>m1)X*#1RrV*^)jo>q zM^WFO@KV{B5UiI|^|<+4*5PsZQH)eKg-RLi^#W;h4$GLg1=LNEmRcEQS|(LB`)Jfm zk&-nMX>^QKlN>_-e=C$eTKxP^3)PQTR6bt8V%z4)3QSjT+ZGP-aJA!Grshg5g+8m? z&YTRYkJUIdo>C#){;Z{BwL**RMd74voC8l-PVl@RG&3f|5^{HM;O#dL*W2Kt$>AbOpa=I zNTxUg+*L}Wdoq0)8WPoz@U!b?@`Zm!ZjG+#QVBF{1Z5AJ`(iF6A?LS^1=ut2J|^7= zKfW(N40nm%ztsYL27LxqZ4wc?JC>{Y9(@`QaCX&69EDf^@gHX zS=v{{d&1myt+TmVww^V_O9Q&kd;-(A-O=*)qSE!kqx4Dy#et%N<3aZbjTv|Zx5!Na z{!)m@lz1822^V2z_=Jpmu0lE^w)Pl{e&T-BF@p4b4u5h)N(0y<14K{XYhL=#(cAxj zZt(6GHv8-_4IzTh6~R{*7AMYiDK8oHKQ=|=c%w7>tFk}xjAqe!&bN0+$oYn3po&v3 zd!=Ut($`&v3MXo;Vo+0i*kf;g$KS@(mLz!!I6}`84SA<{{EBzKIvJ^2|pWvdc_W!rWGf6{BT^ZdH-H9 z1h*cLuzHuFS%^>~!>4X2EK8TuQuzwxu;xs~OZj=`h*&@o`Ag=oTfn6Go8|D=_~H4A zI-MSLF62DI#NJF+|p9q$x)BbtEFt=I2Nb z72$ua=n?Xev1ebL802SvF4{Emw_d2P7%>v^0wYlP0lgotCdfg4AFAp6B>3;?{yo4^r4g%6+La?Ry}=Il zNuVs?)|WZ3%E0Ig4?cE$?dFBJ-_U{8S9G2Jzl9?J z+9FTg4>bfzYRZ)@drMX*Qd1HKJ9shDfUpH={c}=)b`P?zY>%C>5n7e1>_2SDn|~G1 z*1e=4xtb`&^6=XB|9Ate!+xkj{9Znc%i@<9?gTxPpLfEthTw;LX8N%0E~_EFvm z%U6+QXjcyQV!ny1>kkXksnJfr0hhj$vq?=i2A+SHyN^y#CCmMV@y^Q;7t$iH?7t$H z|M`HVrr3oa?7YQ>R#%Xl8SUI=_hLHWy!H){=ytPTh2CxL3xC_|JYItb`il1I|M@(f zVUX}7^@RqPa(_AI8l{$%9k`L-S4f7^l#zgvh)B5&4S@Hi^AvWkOi%a5>%MeD(?(ZpVY1u+O~A;O?8z zy^j2m`PZzpQV4xsEi4$yH6Q-k_+o8+=ZRvJ37(nObm0ztiCr7M|DucSsnKxQTHx(zm1Ewd5#tF{9@=rJcdtN1vh$CX!3lRi zX>|xMac?@$^_P12c;VY7hR^99#K*8?-J@&3Aq&B!Pj4pkyL2k$g$f15fTaV znap40(d$A0!cnWcBZCW|bnI9Ip`Xa_QF%Jj;#uf^T{13vDk6RvBWJos8qEZY!a;XO z_&o@NJ<%27Nfc@18#E%K;6lceK_z7$eh>UbZiR2RyK4Vj=Ud=)UI?PjuwsTG_}?EI zbFb;IOTw$gQ9wtd`ZZO44(PqDD=m4S%+33T313ffJd;wyz>7u9fb9K+9+zJAV7bro zrFQjoA>NIDs;wp=r(O?;gwY@Qnz%}p@W=%CnW* zl+}$b3U(K3J%Kvnju_PW;;ho!r|h|u?5!oE{>r&W$a{5cnFxscSDP~nSMbGxj_VEc z#TVB1en_`bY2YC+@dBT54DB6A2Z10><94BiQ zn?;m*EDbt;*(C1BRm;!43+5s6Jl#PEh%Q_je>4Eu!#>=K&I9FF*DNu;$)#;$oOHAE zHeuPcwwMYI@Auv|cD?>xJi9kH6iiobQ8WM2nrG*zwGGzBZfXQCF$lX_zecIKxf0Ac zNw3RkgYSjY8m*h#91XN(`lpwF-dQzx)Ywfeb}y#QGnO7qu-BK{+j+=qn2ewG4$ch2 zqAA-(m?Md^V~RZ;8FH1AH^~+x8U1DL6`jWGZVHXbp-nbmNG632((%V>UB?3HvNpm@ zM(P~wy6u^4&8bT)3@ z$3$$?wpx6T1+@hUr%joSjqIRZm9h2EV(sb z&37>LUavhxP{YAv4H|Mi4iE_kXOOM1Qy5$Hbw#veXLmeWBtHebxR49(ZSR?VCq}2) zB(DKD?D>8t{QhiS$aeJ5+oL|qfk1NJUap_twPG2d1pJ66=VUrICc^S;bMkf|L9VAV z4Gz|G@znA>JDn*xj61K4V>?e;&evMn-01%K>-gTrXshbM?R?Et;#+hu$D;ik$)`Uj9RvGzHc$RUGWXrksJ1Ww)J$GV;XINWwMxfKhuAIA) zXpqbH&hGX(g@)yMs9@E{-lJkApC#K$pxyLm{B4pgk(-T2j^S`pIZ;7#N5OkR(j9oh zu9fNfE~$AjGGw&E*+bUk4BuEJ%wqKfvhspfLLcXPmX(!?raCA5eUkq$BVdn21w#Q7 zT0#X5=PMJ!K!&cfm^vnv0Sr4OV-URJl5YyG^JL0XIibqp0_s-t!}-(2cIJ(&3!r>c zVL|od8ecI*5GJtxt~x{6zh)4lh*W8rA-=)o`h_>`GL(5vOPstu@D=Lj$NG3*D85~& z6SAk3YG}Xv_USjBf%P5xz{NgG1Du&~k>9QbvX-FW6Lir#PZ%SDbeAl~H*Tzw6m$lh?<4=Cqk+uGvR-ZKyiX_SN$q{Z;E$bZ^Py z=%GPV!lB13FlVzV{?d;$+ugJ~Fo)DDz9Al-=J4MvR`MJdxDB<&&YE({JMJjai`99_ zn8Rz#Im%rx}c&Ti?#m-cDIP%2u=P zEgD2lx@N4>*SN-?s=S$p+8)#C1lm*i`Bu^x`P$NS>e0D24U?@BtOZA>`wx7fZQmq; z&4nLE>2O8Q=zmei2Ps-dBAj~F@pgMf&Rd|Cdy2Qw)r&vvmgtMMGw%h3Wtr8bWt9bn z`JGCY=}oaGCTAOC>W%%0>wl^k{w<8gsn62vshzOKIW9RT2rUZsv(AwZ+_GbY!+e(U zty09-T6n}|;LsE=Nku^3_(yiLJE6XN!`$c2JyL9+gBM+|!(rd~@28I94lBI@?ST{l?lMe?FmKgTvdDX|3-qexZ_hyQP zPkWiCv?+@EztQg|G7D^*_R8M*jKe*W70o>l%ew_tTq!S*iXD`KRV;eFcE_NbOpb{19==H%aV zv~<#lz)?h(&l^}@d8zv#I+x$|8$k>rGveo)C@{nV8J|*ipJqf?`e*bPgy$}rz)oA4 ztcfDZ8RQ=5f8ws9+!}7K9Yc;WOho^2j@U&>{XG+SkWTlud#eEJ(rIwFoz??RUe|X5 z;$sKthTWZ49RmmtE*Ei{<#`6r{AGn~o{6SvR;~UF!Eh?^OmUtXmf30;y_SpDZzBgt z2QVPOdn$k4JU-Q0QY&ji)IUxTOBQ3=ghp*Mh|m#^fbE9Kls@@qR{R6)0V7AB zf+;_ADdX@~HQrzOS&b2tIi>y4W9I%zu%rR;t!gc15CNWXMHpe4q(RFQ-f3N+@I}l5 z%cf+y5}<0s=G_5t65Z!?4py~5M7ZbiMP#G(cW2C=97Xm4Rd$j4mgmhW`NAh_Ykqr4 z2yiL=Zsx+WJ|e^Oug+hY8j`Smn6gMWwc7#k{t(g^Q^rt*E4p7JfBbwL$T+jQST^O` zMm(|W_n-P`2R|a3C3ZgIaYI+-9rqHK>-ufX-1T}A=Cmj}3rx==3L1#u+%$MbpVjgA zpfr$&E(so7(>-USc5@qj2YiJ&_m#!ghwxc;)a|g-NMKZmu*SojQ`_?Y7Tx~CK z7LT4~nv=6i^#fc!u7rng^)jN-=0|1b+jFtsTEN{W+P9GxP6JIdrmsAbsQ*J4WoZG3x4FinuJ`x$@{#viacji9 z@=Kz9!NSA7;Hsp^vSinBcf9;Nd9r+nk9;~<;hBl0@E$9_*k;3i4--H&^@*)iD8mgX zPgcz{C9g>A0r%K^EqnMjcYXVdXno#s}do94DmKgfNIVUT;WahjWgX_^~hR^fWzyu$UO#U+=E7N4At zTWTYuI9{|+wbL^hXI-It!fJ+^yrqr&G1DW=U_%UC)51W$;&U)Y<_I%f6fe_>x~V`2 zm#L=Xgw7Rg5Gr|(qk7&YCuBd*S-eW$P=0>ke8M#3K48LR#h=1l<(`IfHqcc0>PN}n z_>sJsH18YwNK46YOI9D|$0e&W@*g(htDiA{yJVGirTn&J-P-0U$+mj#3&e5A@1Bx^ zA9-%kmA~z?-stzVrR(WA+P_BxV#i<;<}ZWcrb>}~ShsoA z*}q9oDUj7r3SOsJ8FElk78(dE!|oB8;m>h4Vm#7k4!rL5AXZN`VW*gNJZJd=e1$3|n52UdnZ_7(!72`TIW~!^ z+~XvLKFx9(fz3+tp(W~gcw(#NV$9`3d)jCOmOB*sl)F^9_w+d6nCf-GD#7=eahX4@ zTNbFTRu=3muM`@^vSD3mrSN27S@=L?x%)^XTzE~88D39ShD9=Ep~14LA(qNY!Lpi4 zfin7)ey>bYed4SVI-Idjbq{kXb~f=Sws-IkBo@fIqjKU6tI$o*f+s?8Ju*0NM zcq7VZV|Z*tGt$T>6ec6famS5CY}hkNWyr6J3Bili69TX6Cit&2M(rm{vDYcP{qA-y zgo~m_Plw@Nq)h^{++`oqC;?e+II^6gN2&5Q=TiAocCRH1o8)`n_kB1S@jiTNSdq_$U_0k*Gj`Ju6bH7?EF+5Etbj+Gu+7T(z1jf zl(&+5WorZ6UnRg2*iV&F~M!yA|cPBh|D*_fSzutXsvpY_^?u` zY`9#kVuQF@C6Z~@NP@AtR{?3%2usXQF%nyUnPNwG1;TBo>V8jE?Q-vCgH*pU=9K}x zZ7YL*aZU{h^ehWC@=Xm}8K@L4A6gcUhqDo!{6F^lt59mW4!VC{V#)mrmQxO6BSgVv z;a2`i;oCZ}VRbG_p?&Sjg2$MPgBBWy1I#rOd^agodil%r^k{@)*L#H6F^AvNM!<_{ zwcJ{r9Da%VJ)&7D2{z05%als|lp+~(%@shw0HZ#dVZ?3QI6;_86K>OC9dEN=6SgKO z5LW z$|)vMqY*aiNG&HpmLqKrN_sl%lJDuVU4`&a)Dn9s7!ba1O%wdDSeFG}a!d%Wa<2^8 z?ahX%1So||LNde0hW(l4?vql>g=qe{<>dbb%S}cStU;FZL6&>hAvH|dRVlQyoj7C~ zvfLqLxm?Y1-*P3wd!UTib3IITJ%TLPi(hWjjFq%lt{F?z>BWy#4%kiZ_NU zdNknfPItbp=2Xab|Pni&Vx*OD{xrSi`trOGoHN@G1-t78I5qxHygGmzz; zA5q2;A5%+RS^0NrU@C-CItp z)gx>>C^?wFmZ{g5WzVTwKs)(jIt^H~jyN8R&4MYon&L5`m)2(BZ8TI;V7Xs$q{9@A zNY_*Pz8zG}pZoN(TNPmD3WEoGy$Ct)?;N%#xJUS^u;y?s4L^R?a8#;?VMi6euf4i9 z+EZ-P`#0ftelPmRTjajz_p~`eSfW2exK=Bdh){b>Mkr~3BDqjeoa7-J$u!8U02T6a z)MBMLB44#YV5rfA|D=WCc{)v)tzID3OCQ5-AlyU}=I91u{@P7gp~gC1wQ3WN?h&}k zW5h*C95sq*0`Z`k8AV3QoDfh7tMCXF8(yF+V2tf8|Gti| zeZ{U*ynA}w^-T40b0>VeyCnE$IF<#@v`YwnWL+6D){+gIW3Ci_-83_NiwPTHi(qBS zMyxa|3$L?K3eT`+!y@gJLNicVb-|@9(8VLce~}mATkb3NS{Sh3-7mP$quU7rs&vFL)YE`9Ht8#f_>hJP|@;{g-2=wFXUlJn> za}JS-;Lz%V=-5};gnwB!UK`mydo0onCfh1o%S2h08%hqJYPNVFHzGrtR&LA)g$elF zAdwDy=~swl+Hn2;Kz{CO<<=n-+_@4Yi-j)MI;4ivWvLc|HHJM#es{=PI@Da6ceWT} z*mg_QB1I*#j@{=oT>rx)ed!s#RogRMpYK7$tpuHMNAl)M2fYoD>k%WM)ttW%mG+XNA0kr?3ApKlpJmQsD4%m z+Tn599iy<{-u8Rq33$R~*daWsc`R}Y8oLiNsop3`F&2m8D3tz(rR3zK{N*p2f2(xf z53cLjIXLFp_eRY8kI^CgM`wO`;s@0A?zV^)w`{rhFAuD3r~hNrp1;~sd;V&tf0lSW z-WNZgJaRGQ_P+IZ{Iid9PxOvFR2A^zhH-M2kysZj14~25#D=1O?kLsfR_RsJL7({N zp`UHGx#~fnV#|0+oZt%uLYyy{Gy>DczRuCXT3KMxSihDDGTG>K1PX_ukefin4Grcd zr8yuzI3^VGa2`qE!q!$Q);5EV<^H0u;pm>^*2yk*hApu}LV$Dh!`QvCEEK?em|!%&S~*7~<+h<|`PXH9vjNp17E(eo3U z|76sDbF=I>M_4Qzd6D#6=_$wuwXxWiFuTRGBwxOnu8savS_Y-3v`lQ1`s`nyQ1-t} zyp}AIjty*`iS~C%7Q=a*iMVR~x1->HM4ayXe%Y4B8;lB&J}t9a|9<>!=d=8kd$=t9 zd0_cJG5?M$l)1tEKZ^g4=D*>s^WQqQI81iSEIjM)G5G;0{|EBFMaWW?Zu7Wel*e_G zAe|rxdD8h<#$1CFfkprb=&^)xohA$d+jv?Sy>LBRyxPgb#c`617h6qNyuXE8%(Y6`FLIev0O9U&PbUup>f-Qm_f<1x* z0@sP=gy4+eg5ZkahTx9if#8YI0l^EwyQOQ0>q5XVKLmfSV+bLTC!Hq~j1YnliV%hn zju3$m$!mEKW1SGVL1$42+~k8U2r&q;Jn8(Jt_a-_x+BCR^gu{J=!uYskc5zoz`bbc zjgW%CEhUi3lRlREA@oN`<4Iq>rXyq^WFibi7=)08kd2UoFc^XB<{gSK3}HCJ2!xRc zqY!d=(mBE0>p-r1g!7rtT?V{wd{`j>$>NUWS8f@YfSklY#1+V(#e=y)I);Q8(`=o4 z%I$NLsMv4jTyeRrWg)JXd?&)a*_jeGRL=KW z9sr-Wxm0ot%D_y=KN`9}^~umF z0$})+6HnSr@+Earo?o}vRvBem^}?k~2mJ-n(iv4B(4Dm{3X}4~TdsJA3%^tgq{sO! zC96K4d($`y-FsCe!rq7!F_zKA^chRcm2t&7Gr?FNrVBQjNy6qa>DYQ^Bv#2x#m+Db zu=~s!>=RRp$+G(}L$(%kXZQ2n*+RZ5JA?m*$>yJ7y79L#KKvPsIlmtx&-Y`RaZTnP z{zh~fKP{@nH;Ojl`JzR5yeJ>H7vwEDB-Hi-s^bvzjqy zPBO8~CuTHb!4@(JYz;G$ea=*}%Iq`Not-S~~= zBw8oF1*eGj!Zh(h7%9$xwqif1C{~5<*eBpBTMeq&#b5(F0L*5+z%W)8^kf_9V0H&> z$4;O%*l3z$_37u#GwKRcN&Ui1r^=Z)YBi%n&0`*sc}zK(&5R|JnLsj{VaNdH6yePL zL|8Jhgg&D|s594v3d|azgy|=QjFpgNUI>KDPJ~eclJOSM3?YC_EnkM2%U5Dz`I?Ld z-;lY1TQVDPXC@Q(V;t~~%m-cqbBH&9nZg^*bmGlmlzGdUYuFZM9d?Mx#LhD=*kcC6 zrbATbKzFPo9F94_GE4EgiVP?pkr&lp6i>|&4X4UQ^Qp_CZIpmH zMHw?ssW6762QpUlJSLLf!3?77nYr{kW(Tdx*3<6nK*pU7V3b)6<~j39beyRb6)|f> z| z{7iZne-!P&pGv>Pm(bhs4RkiXhql8{(a(9e=xx0BbT&^0IPgrtYs?RnV?Du0Y$R~U z7NY8*J1Q;|C~xc;nTOSqhp`PL#hXfo^7@gpc%kGOo+YV*%ac9ucf@MEk+_c^Cv5l? z#4vslv7bMmAOsVMNWlnVi6DcxA?QPx2@{AR!fwQVVGO|#F+?m8N30>b5zmN3!h`Hf zOeM33dNP+Vpk@*|)GFd2_1}3>J+1;8aWC))?*rcA(*eQX0%ZC1K%4&_nDe!vE8hP5zJzy3N|w<1vN~$;4X7qAYiWxwApt8cXkKm&d#UQ*`d@2R8llB zu2co1NiAe})L`Zo*_k;;S~A6?h?z^?5e+4)L_NvnB7btY$eipfk|#|?9|*qaHgOT2 zB(}i{Vj3(YlHnY}8IC4c*q3MoF+>IMBc=m;A`$2j_CSsh0zS$uuY~LAJHiq4MPV3y zNcfi8D%?P=5q6{I3u$Vaa3`53>`#sss*%HmwZu?iE`kj)Qg}-^Mz}~gQ5Y(mE#wK8 z2)7H?3i}Jngj#~b!ZZBy!s+~nLSH_Qc#o?PTX9<=4G$v>@V>+qUOusiS4c$h4ihZz zHt`Dv$b8I-^u?l(saW)Iz9k-v?1j{k{Q$`8h8@E71| z{2O=(--d6_AI+EWYxzyMhTtlmE~vrx3CeJ>a4nuJT!e2I&csP#0^XI##fym%IG-Gf zcOysO#bhonq$c9=)NFh^wE}18V!RK%AFrf;1W4qus z>|ET0J&EhFV!j3&&R1rq^A*@yz8nh$a%`wTft@Z;WNQU#EF;umBZWrnT%i^FtI&m2 zApF@_B8pu`B(YbCELM-4!1f^*up56^`u^4WQVeQI7ifHyylq|KtK{k}l8dnOLK{#g zOa$2onZg{f2Vtvl2}ngq67B%I5K4uOKo!9UUHfOb`unlTx5P$aqX`>u4RJY#ViO{- zzlXT$qnzM_wzClaGwz}m?gA`{v;i(;Blv(g>XZLzT93AHOU6zReZdK$4?=Hn9Hs3z zk$}(*)DUstSPNo6H4zP}h|ZuAVK>4Kge~Y;3BqP{ej~bWJ-TN-5s#37&>J1=gUB=u2t`P;a`1*Yh|V7e zjYK`DCoZFOG=d7^7UF#e%tPT=;yTD78bE*I1V|>TK>{je;)%@&E5ZC0{EScp782_b zHY02Si-{dzIpSS_u3b&+M!a^T^zTKo>_zF^jri|I@>L)?E0Db92s^+*VjDs++Aad+ zi0^u$0P$G@rl9nWASNSw4ns&rX^BDmAz(b=1*W6=#zN!+g@h&8Mwp}f&5;b|NM6Y2sb2W01%KJ0YP>H6xsKOR{X0a!1wYSpH@*obprNh8=+7Hyw?qCP)2-eWHEi%tU_|ts! zhuS-cI2=Vdi?nwKY41Jl3>1MUutxERfzF^WNC1;SI!en-jz%QsX(aE_|5|%Z zh{Hz&8tF?N*rJ~^2tnFQLE6g$9YF!I`ZZxTpGwvR@?5R{L+fFaVQ9I!`u%Nlvgf2zHJ7VYU^=D-s1 zu|zuKyv-i@xhu#-u}ng?T7}}=gKT#WWPqn27f^5x(1Jz425HX&o&|yM2?&NP%t6S2 zk3cd!0V3fJ;D+*(9-IsaI27DRxu*_s-2x(zOn#_!;0}5LN3>_#;^DU7zqLPxbpMhf zL^mm1bdvf6E2uYc74;nEQ+Hv1>Jp5gPC`4X5~@%okVh?r56DUI0+|78$!K_pbVjWz zRTRDlwd6H$fvg6P$jyLHEd***KCq**Ku4-K7(m5<$y69vMfrf;lq)zz*@K&uHF!x` zf=>v~5pGhp=(r=;OSyw0Dgex(I)dR;JV>VcgD`3&aHM7cU8(?xsU3hv)qp1S9DYK6 zLh-4h7M(kMOZI>yH4G|I^PnZQ9{N$cVLVj>hf){dEb2B~Pd$Z|NVe0|2Y8#pkjw(n z2PF4@r@bSH!+r$RZWOIXTxU@4;9%+{>_$C+p44@yOPz&$sv6!ScfdMw72HYAfNRLX zZ~++yr<1O55=#Aa@-0|EUIc5%N>GNL!FA+3aEHuATFe02R043PI)gYW2xL)SU>fC& zv}g~uAnol%T04lqh1~vXbbJod?kJ??-bmYFR2;BJ+E=4;fDl>Z3Aq?tLe{B8R@#rO zwG&xwJBoj2ixp##MF+u4BXt$_rS8FT$SdX}`HGO7<;YvA z{%h^cLmXxxj6>SXKwRUHZM=~7^r*)u1=o?UokgiS0!ztqq_ILcnw$muA?8w-)7%UF33jlH3CCl2yp^r=SLP89E~EMIh}ZBkc`Ea^@rL&H9hE_qpte zM;zi1IwEdfDCb%t?g}WD_vBr8oxFr{WgT2c?u9eSjc_Qr5GIjhkhW5wKN$o)Nn_|u z5>OFAnKXymWF)jC)1fbtpgXevVC1iJ$ZDkdbI5ORz(?d`NK>zoWj;VxBtZzWSj-)f8ZjsanGo?h(oO*=3`84pNc7x7TA@cA!U<8#5=Am4&kxE24AsSplc6*NO zN1!L95_&=!peLjiD&y@C%n-EDz6c$Ejr`yWy6zy#RYfRwO+)u*Py<0Um4|ZMLSR5` z26EI9KvIpMnH0c}NLxw381?{u=xLq+gTYYf3}!%mR7+q{Euo1%2(Qwo;1T*NET-?l zMW~K70o4+6P%R+^)e5?!GBy?=5n%wTHRPh>KcVxR=$Gi8d#J8;6=LW)rw$H6NA#SF zK+m}pR7)5N(qJBlfYX2_oB>4e@3h?h*oW8_%?dGDApvED0Qmw39Bt!&A(qd*_W$tG zZ|(FC&_A&LY0KJ>Evr-i#rKaS=M=4jLWEdUORVWFugZsic@HdIZ!QPx*RlrOkIA_8 z{U`f3;urrW{%Da|ckEh|H#IEDgt-NmoE`Lh);(8yldh`zEhT;v|F=}FCtVTpN9kK@ z_S^k$_4`@A&&2IBx)`?GOuEABkNCFbr`d*2;x~M!e3R}U$?<2@R^Q)C$G6vUZ|m7M z>G@CTGr!OBY-;tRYg*L#g19Q)xBm7=>EiA?WhPzGp7X!oTyOO!`>i4O_MaQHG_h5_ zZ|(VQh+_@tpK2k7Vg9c8?eu?x1k#BoL~D8f;_knlpmzFiNS@y^hOZ07OAo>X83=WH&6Cqb(3|b2sE=S!`fsPNo!Y6L{%48%{($g1bJw_s!}q>FFuS#t!JX&6JHXw! z5|j2na0@eXeSKW3lk5HC7G38??{eQg;`#=-swMZfoBIw?%hcpnUiv)g`~hw}HrJOF z*4mQd#!qwYlHRQ?8g9HZ*HgfaYvwvBxbe%}cSk1kr0KXRkhVCb4V>)XZFBdA_v_U+ zDP@3mY|4OaZa(6dYtZp;x4E=LWM-u&4Y2H;nS*6>$GF)e{?Spv+EFRJvQl!Avic?E za9{4yY}JJ=78T5G%VEF!_JoV2we*`~pXqno=gJOqEyuRod<^^2zk{`gLae|@s?mYMX>6Z35 zCT;g~wUfE;GIMW~4`EW? z+{_rR{m;Fh{C&H=we4#z4L`SyKZitXXe&cwt?QfqFw~TM{Z<|(l1PQnY-JMNFK0l? z7uH{*Z*OzPZ?});!f;NkigRhH{3%CW-T2@aZ zuyH)px|dY)M3`3V0_Ad;?lZ3O%q@J*y`BH^0r&B?82MBcUCtL+bm(Prs{G_=cb^^a z)qU$aHDj+^+u;&F?$Y726Lr*{K1RpBy>h17*L2QA=Y3cVn>-^KOS~S9?cq8UJ`KB2 z*cHadb}92b@iFefL%zbjbt%2qMFmSb-_8@wH!o1pnfvqV3A2J^Wah{pmw%BzH>AJV zOs=O(-*@N4^^4Iq1!PnQrArH?HqAVN5}AQ=PuY z1GS%)DB>$}_YS$$uumhtdFR?Cndxg^?b&i>)6K=HuFQmr3neq%{OTj3POn%q$oo;q z!E^o3o$FukxThiZ)CK=5OZ$%qf280_EL!!_Y58sEN6y{yqaw4r$ZcLf!Y^&(g}!s{ ztE5k!`s=S}z0&uo7H{s{xP6pE54R0hey!VB*lkC*jhAmdKDlJKzkJVqDz|ShnsF)Y z#V*wp%`R3;9z>JbW&M-bsN6micBNb@s#8&@lWAP{V*Qp2UDJCz!x?c#2Zz@jvh$V)BHH2Y*^8CUAsE3{1v3q%XAi!I(FJxE#^kT8}*IX z@iM>qDF+usI0m@oFM1q*urMO3=;)N3V%HLvruFef(@cjPHufF820!bquz5q5T_9)S z`cD~imONUpG4e9;IK`=U`RxbZi|x*opPcfv#|`^e;X}=@Di<9pDvY|jdYOV}>Y!aG z*s!NvCwq*NwK-&jKX_|@;K5^qH-{}I;6r6LWli#3pvLyP?3OgPyKcc?r=trpChn=9 zF}IePeQQJfvd(XlOMa18>oWaKkb}&NGya}k({HXmqwg8yaj<7c%Q4+F`b4f9pt$Z` zDH+}CT+ryWtDCb1XuaAx!}R>^`++qvOX)_7V%NCNgW%cR7p%jHO(pLZ&FIo=+xmBP zRJ4{_dB6K3xg9?5cdM>fm^aVLw8zr? zU5@y{?JM4Fc&(gqM)jIP_z~^BqJX=Bi97Z&b@$9xR?K01XB;c74Vu_lPjktVQ`YAn z;x4zNI`;SE9p99w+}}fBwz<#1Ixtpo2sT}NRI*c^*$_BvS-zL*NW5%o#L8!yC&xAA zISs=fHfmaZxLJL1aL>$`#(ny)MqVNln!?XHmb%@FP}C7`iyl7FV&TFDy5B%v?j8sC zqm#VURxlpJd52zv&OZF4+WeDw@wH=%PAD~Yc%!+ewnoNZuW0? zG~D>n& zv+HzI^Sj;OQ*7vJV|sXabiQ-viaL`!?!`kr5B7^-Uk^?=61d#Euk-a`@=uPW^i2i} zyabPV9pahPYvD)pqm{{zEA4Xdo_%>nDIRZv`di0;()PVIsH@44njXo^YbBw*W9Jw! z&z4-Oo7dZP*21biCGICi98*8nh3&mO#rIsN+cjmD=Mbv z@YB=hbwBRsa!%b!%PIBf#={r0^0tJ`bS$e`a5!nWzt#K)uhg=(=aTNl9R$s1T&oPz zvFY`Py%&{@J=E7I=TU}CagWM}va8S{Y|MaO0oUwqOCF}z9a>l$A7&#?n%H$_!|lrvGaG(s=o{cR zvey32go=|Di5Y`37FW+K8GN~4|Ff~1H^*$)tx!mGJ=TBv{K7tQ75DiYgVMMEawfNC zNac>lLrc0RJtkys_n9{Ga&)J{ca!Bd%sBtE>a_e2C6f(51#a+g54x2Vxc6Aivgmy^ zD*Kh(WZaMUtJ2fx@ToMa+Pvte<%jYHcx3dkvzb(#q?k6Naq%?YuJp@3-B;?>Oz7w+ z(M+6G)nod&V7G@G_I6&eQrW2X*&edLDT?vkTr-nHAEUK|^ON0vXi-tTqp zg8q^E6G{iY?mF`4y+`XxcQ<4Y$g6XVb9r48vto2Xm%d~ADPG)G3x^m*r8-R~1}uMO zJhJ-k;Uy}*4NmXm%Q~J&vbwu_@vMYjUiaHy)PL5~h;I7z4)y1Dlx(WI&~vkS`uM@| z4^l3dIF%=y+gSVRoz05{`wl-$?!5#~7rby=JxwLK%-U#?=k44V1p&PtsP&q#m~vQq)>S1#V)zadYBt45>Z53&E?rBcm6w&H}qqdHdt0$Ue&(N{G z`X+h=XVbS84s}bt`3v8cIG3!un_Bna_U1nL_V^~*g2zk!PVSgjT>NOz#r_X2+gy16 zxLf+n_jwB*JJ!ox_I}s%QuVtRk7M7R&KSLV`NfOWpgXGKib*rD`Xd7#zP47|wXJr< zT@>RZu7gxxeqk!cP!m`qG8OCI}KHjm4>L5YmU6|=wQOYtG)6roi=Y^ zuBkkh?A!lw(a7ZWX|HFjOBAhHqBrwb4-!2YCv|M5T^Ag%YIr;RQLoOA9wr6$YcBP@ zw$eiqAQy1Kq;&aHr}rAlA->v!||%W}P}y)q3Kv^9M)f05l8+{wN$ zJ92li%%QEST~@`MZC0;J$P^5^pyMcFx9Ch5=Io`ep2(+0ubN!FKf&tfRkQu8EEVau z6VfNRA8@_jJ@jbdvsw3c&CfXzq8O^|HMwY?j{OR+dUleA`JCH9KM$XGT{(1IlsQwk zHRnyHBVD{jw6m(u0SiZQ&b~#Z%g&z{)OY30&>AZnBdUHVU)>4se!lCH-J;v42Fbed zO&$vLOMN9rKoaI*)2plHb>E|}Z|EJ!iaQ!3lSLQozi2MLvby4GQQE?->Gt)GQ^%0E zw&vZq6!0Q*^@p;KE4mwB4WHm{ocMrFyF1Edz|X^Dw~G6&7@Fu>?KU&q=;|7o8^#Oz z_8*#m%v{~JYg#ue!GbN?aVPM5pS*t2nVrQ>%o?%eYT_f~6LpC%67~=8Is4M;s!~_8 zo(1}>ZuOCsYX{v~_O)6I7mptp~-0SW70+(JJ>Q%1i#7fMy%@r#4kqL9rS{>C(H&D%-WN8QcO^fl{NqN7n#6>mJzq%{A=2T5|0 z;n~6KC6w=eaq`N}LnhhT;;)YlDfKQJudZ_A_;9vr-k2T=ChJlz9ln^fXKc)eWdo-x zTj?F%*gI{V_|f%FQ!Cv34p^_Wa#3bOwKdA33f~!+PkN%GWqM8j($AHOj)%IRR5a5j zDkt^+Alv80kht-oNgg&)lj(u-BMiF%FVcG@Y|@H<9n16 zF;y35hd+!QF9`ZsMEG={Jf6JP6{9Al-CQU8%M0UM5034=CjNiqJ$qbK)w*l%c`!T_ z22epz1{eoLL>K{)P=)~%h&LnVYn&NCAr%nN5KVzIm?ZhGJY_11_OzpE9j~b=DP^b9 zW2df_rv&dg+UcaAW>hBk`_|qAdj<%!?(hC_hTmpyhW$O(_g-tSy;g`m^Dh-Ye`z{a zlk=L2h~GW#!j5YQFCW!x=XND~*RYkE^`FNcT%AxquXfU9)8Md%?SE(&ANJj`Q`!8b z!9$um@AiAT_z#=L9;n}T(LDR?&Kug$v?^C`*|1Rdb)!OO6rJ~Gp2<#4nIR7|46gd7 z;wPUq$)=;*w@pb;+1cb-B7XK{@N)}Cj9hc3@n2qtA9YpNPaQUU&-nc}Ort`g6Mh<| z8S~njcTacZY)d&9uxWOyK^!_VVP>uT%13ppV`O_Ld#7A?sChEx?^t0llqk}7(X1g#~8b%xw?|*5C z_Na7AQ|#rshSz7_cIEdT4oERL-eYtA?Lwtu5JfwPw`Nlau{K+647& z*Y=P(@$Z)Zb;L7k*B?kdTE2f{; zZcnVbZt{)}R<|(iOvjVaA@Oou#^Tbt8J|=RI=KA_;9OGQKvt zNw96MBEnD(X{f&m{x9qe<)KUjdhnw#a`>OJ0e5B+TyXnzxlna9ocp5K_9HR=VQ2( zeJZqa&7ID<^_{nap4vMkS9W}KO-bb|;>`H(N52uMU$dYisnXUoiplppIM>r`wDOBTzIsM;F|~4a>d|?=zeuKguHGHE$8);psoN(UM;%slWY5m* zj5#~)>+?(BE)4k7t`U>hUH2KYS&^KwZ^Q}m+`2h!ZYwlvUC*0qKRta(QQ`7)ocQ>Q zc7|bzXFl6lm-_OBn+?g|9t}GA$xYeyO)oClAH8ASOK*L&D|u{f;C^4-%rh4bg{%qL z7_vR^Pj!FWnR?~FZcaOTHTszgk4GK<;YKaHDB;F0SFat9*%r9};Kr)#T>&50Oe=|q zyw=k2`iEa9e0@&(<9`3lr{4MT`kn99=dJ~>dF=D55l8H#FRVDZ>M{42U(P-I&8Oe5 zCUqX-|EKqEe~ z@K#s@_}njj;RoNp$>ZOdw|Hp+5QuE6Tiu1}8^NULry8N>8!lDHVV^N+WyCgriaDHK~ zvAnRjNHIE9mpz8UpqgUSvgkD~bdZ!0q)5tG77?T<=b(cWI$c~^kYaJMsc=zY`Eo+K z;0S;1!t*s_UStS;lZXEv$2U!t`GsX=-7uk{5nXNRet#!@KCqTgU*jQ`_jdLy|8nj7 z+`BqkZzoM}S6wSuPqkY3?9(DEtcoI4}1HSfAuoaD}RyI zM6aIHzqozhEV@(h-$wGX){yR<>QFZGGLquwC8i{$J)GSoqgXhvWI6nZ$A=7|=O;zBx=ADhXpaY|Vj9DP;odSjH_(=L0hvM1_I=O} z?LoVQQYojKe)UG1+m5La{>r7_jqloqX&&6Ul=94B=;o>?U;gkv;oL!6zJl(XuX2#s zc=)cI=B%Y~W&Ky*GD;w6^epOwmm$6A2Y-6w!nUowee~kzAqOzvkIsVio5VCW4&)ff zr-ZdWZ2$LbpMlc&y*~F#??L#xAKCqC&f z;-W-Xy0%O?oKdeCfU3Qdg)`>e&y={thzue$#=;`VX;|fBO@%dvd*fjet|SwcBvMHx z#j_+)3AG51Sq4~T<$!rBVJOC}0*r&mC5X6~`^soez)kn&0}TbuDe(~BBuYlAWSq@K zV!3(q&u)!vl$tWni6J5@ni>_7O>0I6?R0`VP7g2!fbk}A$x4!*%#utvY`MxJtVRym zJ`1?o+%H$Sk1np9=tg-!IcZc3Pm@rk#3d_;mWVXIaF-TvZs`{%?k!~xxx%fn0;9q>gB2ww!jOelr+VLpt4j5ToBi4@ijU@^}p6B*T4@_=9? zX**=l4yc;Vs4Y7^oD60fyP`nu)dS{Z66M1laL6bhv5K3W4af&$f%SxH(FAZvb1owNCro!lJLp;6iE;nDz?)H2-3RN_VC49iTV`x08DnnPt;NvWa~ ziYQG^s;&?%ESB44w$T3J8ehhhNuyOi;wfSK#uG_nksR>UI>^l{zDEz$!?gjfMI>BS z4LvG1h(CTz{ebXc{D}t6ApQ($mJsH}Q4WL6FGC=j$jZ%Ue?eyrRrZK_bKw>}++u)R zyr`dW@uq9-E*f)iWv?iZFGFolERb&k$t2j1bK~gB2zx|c;?J;-M7S!Lg4`><*%`|y z1iBHES!5bmTq@OG0r7#hW-$cP z?VTn#3)?Y^V4v3qG~#LAI@wE=;jd(RqvB8FWj`dqqK1)brgVT76;3T`SXb=o3S59^ zsAdyWgLnpD0bvx6M=zE+l?>4|Fq;R6X9C6JNh~?cl9$lJ-NC|l575HZ)WU}Yo@|la zy#KCSBlH5`+5p#_=LHi7aPc>oU_nf>qa$&7fUSbJY6xF6iI~F^_=gh`q!JqR?bAtxSZ#Dr6wHrQ~ZX>ytshTBKx* zO32p{;G%a_IrRVq%EQ^*%*f4A_w;Z!z?nuf7qEhR>AtKh8)ntsG`c#wJ@odWIB{>J6ok$a zM!nmQLOmydN~iSvIC{lmRHGiws6v8cviF>0Sv5OaKuZLYjfLt2W#tdDVvS0ci_Q$u zvXMRROrg9e`ML>Nv*v6EL>wcV#qJP54i;p9BKYCPak-7R(E=8bQPk?DG=r8I$bL)} z<`OTye>#TzwvP^1%k4x{hVwSC(M)?2yG_8KQ=k0dO1moJpmKDa+Gz*uiT}^o!-#k< zy_zj$RXt>$NKm^0gv&Fa#q?OVrWY;75!B*n-r_OuW9;0_&asM}DKvJD1im>Py5^+- zb=%PC0~(crMx}j5P0j{)+gNS_d4!-1268sIPs)Y1eNry8QU8V*!dmIkec2|PyVA%EdRI{QUFi+%1)IAP_`AmOcZFc3Vc*JzSly+ivC0) zrH%>Qc#tIway5{A5JB;b@2Xh3$`ye3B<<`#@l2$6LIBStncS@WK@VpGoC$daX!wd; zMXv~2;12p;N^|Z10FFg)T?BqqW)r(C{uOHRuTBO>7_iXoHsC+E{T>F)`&T2hAk*GY z)F|N9bwIqLuc^V;9C%;roz*{cpWnnPj?7}zRf{wNE(d|-Ia6?1zuwe&1ew2h^wP>F=2mvRp1))-B|Uul-Hgi%t( z)jgsro4NKgNt&;VG$UfZsRRCB1sIbe*jEx^I>ZK6Muyk7)pu}QTG`ioaXc^_8 zRJ6>711+4x!CHZX!DeqLz?$s3xfmPo-CH3x7jDGF;)hwdAHt7Px;3Ilt>iX~Rsdrm zGXY)KJTzHPb4RC_O4EDkhtzzyyzSR#=NvLLjgX=Wn>J1-*n6AANm=jF-99=n&>Oup zD+&AbD_u2>;=4ua9#K4v+DBAZ9cHP)2;pksH$=9zFxs3yd5CzJ?{<2cpB~O^u!lK@Oh);6fR=uhDNa-U@s$D= zCl|GfQXU`%VukDgUV|kOmP1&XP9R46n^w}d6I1~fm>4UVFw!n!#eKtsQ5X%a=&_nd zm~g^~U4I28oWjHsOqG}>vA&EXEh0bhgS3?6Kr7%N1+3UttbQPD9B**~-XNDcw~Mr5 z+g!@^LE_=g#ZoSpE|zk+6d@RKRu2fS_mcn+Y8eNimUTnO#ikw*T)%57Ky=u15FPd$ z1p3kvQ7K5d+X_WAV#L!HOoLFN6OD~W*+*bR7|qoVn?yBYrH$q05X?D=0O1=0`GWXj ztq*6Xu7@Qqf*#D>UdM8{d)yie7<3aFGJp$+MU?n(h~Cqo7t$b(;KxGnV-GZ!L+=@} zEuteQ3kg=HQvw-nAX`#^X)BTB0Ng=wq5#enB$H2{Y30)AKM4OTn4C%qsvx(hu_qvI z5?eGAP1{)P!Y$eB0|R|is*=KAozL`5vIL*+!ZPFj2DFoj}I zdI3Fh7mz~LvEBEaF) zD|N2+a)Q2rMl6Raq$W!wHa3r?&K!D0Il?7JE$@2h#rn8G8=ffDTxyB;0)Ru z2i|3*_J-r@g&_ALp085M*F1uwPmh4)7-@u+-V&(=ETa-HpmQTEdXqxdVdl!1C=v*8 za%q&HJxCL?N#CPSB9a)0z3s6WccftgSf?JaLP?w8cM(xyw2>BBwQ@Shj$uUAo{3W8vS?`!`YinIWQ98fY0Ur0cQX%r}l%@ zy8$>cNu&CNu%$Vl>Zy9JtXfTspr<8LwUtkG!_K0;L?e}Rw{A@UQ*A}hUI2r$3G*l= z7dn<|8C@~Lbu`HZ*iF)CD=l@y#?u)*g>vX^RsEs2q0_qn&kR5Y{Bt@^9oL}RSjVv8-Y z_l_lM?6I3fW99wLy}NLC_wGiY=lMM4{j+?&%ifv2XV1)>IaBV;y zfV==s-f+lElk)P|%INl}H}DhxfV@CX-U!H>sK?8jsK-`;G=#kU2Ey8|?P>u_r9F-0 z2M%B9>YEmP1^ZusvEWy*{{(~Jg>(~98F#cFUnpTj25)zGOpjjw_+8oco5}5jw8u#O7`j&>*X6H z$ResZnULwt@{Wh->X_Y$Fo=VtG+RCr} z`Eb2|<^Gta`2igoM{NCQZTPMxhV_*C8J#!{6n()&uGhp~A=Dk|k1-UsV}>ZTL7dga zQbo^iyh?lQi9R{g+EZ|*K6*eITsxX1@Bd67HfJ5de4}9_C2!hU-m_FshY?K_j40fx z3+n?Jx(oWnQshoDw=R{qF^i;!p(KV{BPFv8V+7wb68uW8JpE~$T^6#La?9n7*itBV zSxekHdLuU_T(7sHPC0OEpLtu(L1|`l-Y7}l3uXB`SoB&9YilMWU5ANpYYr3N*2GaQ z?lB=S$dziRh^MhR7R$kMT!HqR?w%Q%XOlKuJhLNb25 z6sq5q^Gq#K8~SlxRk7>9h>fqB*3n@-^dRzK-b@xGC~rNbm15>J7j-2B{pvfYD)6M8^4O z!}HC^Jl}$>@~shXM-KVbsYZTHa?W?*c3X(PL{~VO{q41SzJ$JExu)Ynv9`;&Tx07+ z*vK@MvqpPw&22;QDLP<{jZd?boz!W;kxs-dX1#uX@wsh;>u%quV|H^j==K@S79e_Q$@l z+wh=Qa^RW3RlhjBtTNU7zy{;O_){rPc3$`PH2kXY@zsmn(so^+UNU`TP_N_d_mx>D z{2Bhh;@t7PFYm+s2W;I2`>ZHx=Cf=R-SW&!b#b`r@aSrXL;6NL4GWe(d;MM5$8}TQ+?sRW$$HUh z{R6)?3qO{6YjD_}ys<~dFJI|q_{Gqy3Cl)Y-4eem`pmLMC;S{%L~Zq*Yi>HJw8O5L zbxo7b95FlFI`V2jZ`Zt)GY7_Bs=44RyPH96&;4l~b167s-HcU7$~GPFJ^odPeR=Ea z-HnuH1kY*P?@sS;R{7lSw7Y0k^6K+7PH*|)&BYHAv4jp7HqV-MW+roPf+#mNIX&4& z@ZK&lBQYg8n^}nQ@peWBoXjF_jrwLtQE70Wot}}sOOCDE`HGq?v2Svy`0UqLFWtR8 zF8JgP%L|L!m~^YR#K2^7@(J%r+n$fCx6)zNm8j}J*Gs!~$m-t1p|(dhPqVnu>TpiS zQME1OUn3vYbvM!p5m!E;Y|o#|^-+f% z_?6~r%KI_3A9w4J=@4nTr`8L{79%qIcnr30IcW9ejSi_XOD}u3TS(~e^Ee_rM>T%{TWv>?p zKl=XC)1QqU&7Es^xYFxG_K9Y$FNQ_T-tgqQ{VSif!=maekuG>quz7dwnZInA_WH)o z$(K4e?>#ml&*jpSpPJDYkY0skCZxzlOzAvSB@rqeSSy|DS%tGh(bU*FfH{CQ>`aU)4 zX>C)#dRC26M+E+U-z&XG&;5@|-M_Vd?Dgc);yr2cTb)C?1~rHbsWa!|yJ;8au5J3G z#5Zupqd$jV@3p%qg)YC|*LgsjZhe>SiF$H-P6k1jc}w*AU; zX~|o=exsih9(3>dfGrme-YXdw>@+3wI$e0xxUJvj18sjfmJ+^esH>*?=%YK$8DapcPcvdrRZ?ImCxwo3xTNGx@sQ8S58`o-k ztYOgX=wGD+ysTc1sFQs{*3&)f8Pxv}XG&)*Wd+s$%z480I=b#uEuhmUPOnsRuX#p3H% zR~_g!_tF=4PDeKFk`R~pzR1^O>ZKRWZ~f5vj@h9#)t@`ASz4!-L8n{u2Znv;bj~@k z`ky*WPi=m4wk#@t&x++Y_C|D@+wVs5xyzA8k*2GYo+g|;cGzq5>1kO@;t~x43Xfhk zy(5|9* zBN_FsbXb)Rv%+*t{BEp#cKD5B=!mjm*}cx6vgvT7zP0|?i<>5Wx%tF3N1qxy56#&) zW|4nMtrK^=ZatU1-LNWn(L49rPZRq|YYwVAPT#=BDD9Qgz6*z9BgYx8^xbkP%*%Do z!Uxey=d}63d(qw2rS_(?_ms>(@$HWjy8c$w^~uY<-s>OSeZRHiB)_=v_u4P6+x?8r z$<=9hTf1A19AT9_DE<7xEf=Qsn_%UbKK@vPpYHXl>g>~F+|MqHd@ndH81HoS`>flS zR^Qq>&Q6wlEq(gS%?s-FNSd5fpgZes)Vr{+m+fd3)2nXI^wjV)zX#vnuHCV2zXAO= zuK(sqy;gO;A5brPe#)~!C3Ctwuh+)uNm9d-<=2+fYtk}({e>PG!w(vyCr(L^Weeh5xtC;jeyVA41GfK=8 z3NI!-iO*=-)#vCKqo4+ht?CYlHqJb5G-=u5?*26_;^)rp+5ODMP4V^X+_i}O$;oK? z=}GN=YCPeOM=^SNI(2T1nwTj4p!dtkhpCHOdWWX8>oVG-Z`NSPO#%DuuK#9zqG9QN z6KAWS1(|NY@7>n=>a?8uLw?@;UT=Gh_wBNUb>B7`bIG*sn3MUYJ`?m>?C5l*hE1Jc z_cra<{KJp=NA_hI#8%mLYy6?;*yqEqy!Sc$&Bq(Bmds7OVxKXy|JM_uqC;lHx*C@1 zcK5$9Wb%gLg9mq;S!CE0sI+r}-~z1863lOuWAEYxxp^=^W6_F`hDp3g$@SYmb|vLo-)RB{QRh>GTr+%ts2+*cIuyF z8r*recdg;*A5ZTuPAgvRQ@T&L-`LGlYS}J%ywuCx>*$0ahc9!_zdZ1EtjG1H&k7R; z96LGdS&sfr+mk&8wfE_jv|*EB!;M=9RB2|iFsyXxhJcfq{_cMFT9&+=(QRa|jrnf9 zaQn6kW_`Qh=KMNi5+~GH&^Z6zHv1D7r|l7K*G$e7eZ7^9fD!AV(ysA65!I$y-ZN=u zwBOgV;Pu!chMAe?c9_j{zdq^o+Vi>vcLGgvCzA(k7 zrghJc9h>Boj@R>CdhqzoT8me=l^*?K$Bv(FkRs_49WT<{RaJh8bX-*hsP^3|UcM5g zo}B85s(qn~mz|FGo{_2~)s9KU>!O$>KQS4qMo{ruC;McRh;F0DmSAFRrbj&?=sPyK zM~%V}?=(0$JEvb}MwpAAx37y+az>xbq<$GGVJ@9xTX==IIOXIfW+Wx1Wo9IYxeQCr zaS3m1V$>+HL7%kjc8OU|5Rj46ATi7(H8(e_fsap4AN+h`j(28Oat7l1vgfPj;xIeK zCn-B|2n466`S|<#2Kl5X_RDZ_>Yd^j=8~4{=i-z*6rYj?_^~j57Us{w{8<=2CHCoq z(#ALB9~2?}ijeZ})K`SmSA+y8LIM;afr^koMM#h$B*?`nHLYL90Hlchb8+gMnHI$d zC_cIPG-kPX6Fi#D8E2Y=Gvcx`3u;{cnSDpG@0=my#%2|GXke6_aRS(^9*cxm$573QOIU?@5Kf9*ii;aZsM#h* zHoKe(#sfAo{T{3({+<*}cRgglL11r6)C9VwxDYMzA@T_!+5+9~LpQG&$N(e2HgFu6 zLZNyf4dj94U>neblI_7%uoT<^Z$Nlw=mwU8AHYrU3hY8+5}G|415wG)7n}i2 zk$^m~AIMU045os8zz7NJ4!#ACL3lspIXD5T^e5^7rhsv2sIr+vE(3|qf&Cbecgi7J z4P?mkjiAXOlpA;snh(Zja4L_eXbSY051mjJT|p0!0FuB#c^R>tA#Cp#+v&kpw{`~! zpbucPEo`ov-TQ&v>4vQrW3!IzN;;eUfm+->37{4?Przm}*=!!vAgDlWj*6{qV)s}X z4n}~Ha$6h?pdz;fV+u{0sJUPs zK(e{#O)mtC0Fuf*SL#df75JL?=TLt`Y^H{P*3=5{Em%qX{ZGClw#J@+{?t0K9&7|9 zU=#7rquK&?5dZ9{t1R7c!wbP$@P`!krw3aH``HFmR9Zg}0^4m3Qb7Tj0A_-Q05QKs5U@#a87J;qc2XGYJ0}sG^V2iqK4?;m_&;<+uv%y@j16%}` z!DC>EhRq1LfhM3CNCcxm9{2|A27AGI@ErUOWN<)kz!Nk8aiAL*1r~xOUIma0|Z8 z9KJ0G?1OK+1MY#r@NWyjVo(YmgXiEcP{jtm0@MY~K@?~Q`hxx-8%zN+z!q>290jMq zO>hT10`J+~Wo(gO_9#a*+-{&4tOBb+IQ(l%=3~Jt@R9Wq9AW2R9#{a};M=@`FE|6P zfNNkBeDVY^3AngISKtMXfV1E{$Z-s=aSkedi?@bD#hD zcTK-#Y+3QHu7mnFMKo7Em-TdpJ|32G7V@`qxDO9a^kOCXfnb9%s zY7_tP1gS3T0EX*IxZkeEJvxE!D()mUjnCfzDp$Vf+em&qSbkZDUoNKjRuZ>(D;X_R zx_p@<+wNq7E?F!W??<6jp91k7Lc!!uzM^rVhzrCwl;eW%=Z{Z*h^sFe$HxYV#0B7t zAengAXe^t8r189FbyGE(h#a84XQR+kp^{}5T-%Aj`3*_ubX@t#L7>RhETYo z7>cA8_(mjr5=*h4T-$iIjZ|x_FSp%+k7u`AV45i0YR3IKOJ}^2 zR?4}j$qVt8s+xPk91^eHd=80w1wMzwtb@-XRwCMRC{Sx`kk;5>t+63mV?zZwuZUIT zqNbPtjWL?Nn#4c5P)iKYIKF*h@v8O`$Y~MC^;cA725~9##b13T`&7*r&Ak$J&o0at z&Aur}i*Ks0#Ww}3=_$+?)t;3wUsUZ=m@lfWnlN9q)j!pqhfo()|02{ywfuy-glf@6 zTOHG8FY0<$=%Siu6}kkd<+V^3ZS{!x@my|MT0GYm&*5%K%5Py}y?6_5GiPt^{A4aB z9^w2_x_E9gQaTr|IYsKJtw@n-&I?ndTAIQXY3`T%tCfmS7gg&K>Y|$SLS0l#Q>csP z)=9mlR_GEa5?7&%s-8k!RMRfhMRUJZ-6Dm$sOGg$7uEa}>Y|!#d$9h2HA#2EeK|NoDdTR4;;<|)zzovPt z7@}ovAy~9*6?$r(TL@OG(-nGZ(uLPkb8j(3OK&k)v}_f6YVIv6+q|lt>V8;Jr$e;( zmk_n{D(bZQ?^V=k^&Xl~7tJFUb(>e@SqPVU@jPSWInDC`;yv>K&Nh9u_+-94Gg?B4p(Q12+La${nbvKkdEqf z6(LQ8ZJotAo21UN0(Gp%i*vD19OLQYG}OSiGsJmSq>kNeaURd+=kXO63gq|3Ci!(< z?&kPx9-qz8v$Zj7!4SK2VZu-Aa}V2K*9EF^bN>8_Bz9wLcEf(QvPXW+kYLVaPi)f? zzjg>F%RLl=)iWpgr4SeSr4Ux{*!H$MfNe;qC%;U>whh2^31&-P#I_HzO)mTcDcBa; z1^}kWJpzDTyI{A#W1ArA%P+66t&0tbZ380;Bet0Zb%?t-!at~jUAJI28DzKBi3IGX zQ0!Ju>;_aYF>b34dvFKa`oL}!%NB;Pg$HbLh+^@9Vvz`2grHa`B6hJ~v3P_nR1jN0 zl0X%UNZ29EM{N} zX~Y&Zu+?GgR(kBAFWZS<;J|ECVL$99`BGDHhM9{KVJS{CJ8>c$H1j=ZjmjWFWmpJC zIcvrbmE$@nL`CpMMYsU+P#KybG4H`n4{?rZV41f#FMP!j^W!~5$QNO8xH_9f*p5nO z(O#S`9n~2i!Uz#AcNXVKk~$>?>WKO9+8VfDC{Bav;`GtL=^5ha&s4{0wm8hUvlXPw zlmAikfxj8&;n~rjN=L5*M;+kEhk&ZRg>3_WDVe{p9D~^5pjvPB)`QVheq1MiPWe( zFc=4Z00+QN;56_@tI!1Gf$3mBI1OZIDXc(K&>2hxbHF}u2IwcC@dieqI&cP_pgTwf zkHPPtAzGR+5Dwac(Vzev0mr}za0zrkk;j24U^cKvg{cKrpjG+~TtJId3Ob`j>I$l$ zRjLY_p=F8!A!wNzfhf=xNYFCrfk)tXV2)PG2Kayg`KrLppb#zBG%yUU*GMoHj0eGJ zy&{1LS}zCC8gvCCzyz=nt=TRRi&iWd3%Fqw__ba^?)*BhXNomm=m&lT-=pnb3(lh^T?D^@XJ9+}csqa;9!L+2LbEXz zOa#-wbGZC4^vODa7|;jw1(U!OPy)7qW$2Tw1QJ-bK6oqdcdZ8Nzyt6EEJQzSF=z%$ zZUIiAzjbvWzovCPSOd#l4{~9tL)cnY^t;Xi5A?I@fiAGj9$-HDT3_b#R{01lM1SjB z&;|XhZomY6EK^Vu&4Lryj%HxTjL)^+`v1ddvb?$SPTg-n4?cOSeD&lm`N~Pfpja`; zRSaHV03%q83kU{#FjDvxbiqhs3FwN^K{z@t$I&72L9ag+i~=jcN$>$|$4KBe5RK8m zAg~;q1n)o{j1DZ@^8?F~AQK~ld~grEiQxy4rN9Wi{xmQdtN{o?rx+DEIr1 zfIfV@H)sp`gGpdsZ+^hbR?Gj1QAl0*`}5!mIDpZ}F%S#i-wk{ZHUJ~E0j8h?>;O&C z7PJD3!E*2dyakaMy|ib@YsOO0B(K6>vqANy0)9YiFq0p^cAoudHQ^LE4Q_&4;5N9g zR73PW1LTAHUBm z>Uxk(TT+cPBUzlpUekHD=57v};@)^P&=_~ay}z@jxQ9dE)UF!$!=LR$bg}5YyuPOM zl4OSi3nY6Vb`Ux5Wk0tdP3IkV`p{5Q+^mG0a7}SdO}^C_x1*6)hemy~?zb1w<%2^~ zjHdHE;%)nAihGfLC~1z{Pa*1YW|R{+Fh$dO9~v(jpeZgk&1#r&|M$Nw5Yba2w>Pzy zE&O%CI30FhFDrJRuW>s1y>QI#@5Ow8H+PPW`gv4^JCna7n3envVTwD0b!aW2jv&($ zr*C_%T?BudGAsFQ%M`aO`z#Usz0<7Z_fk{bL+!Ifh-ZO_2+g^eDk&F{DuIYp$*1O` z_?ap{F4gekx}1nyTZoaVi19`nA`n$YT@<@J<6nPq zq6`i6`MWg!^%q1{5fSB$qzc8Ee7ZOj4dT2>Usm$EY6V5FIgwe05Se9|fMbX> z)gsaxIjStSnu^%VvT6mMuQ;)nWe|H=mVjf3t@bx!y~$9cmod^}Ddm=+Dn+k6MVfMj6}((ZdBH2^ioV>BX)c|J zD&;aFsz63W6;&Aqav7RSXO(fej8(>vvC3FghM`r5sAvev+Mcg!lh?{1gosbO{>5GR@0fRNZOVu7fIVP9d0I?J4fShif5q?H-D{NTXAot z!_9hY*Ooacxwhp_ifOC&x7v#PCV{DFJX72y2@FJ|w#*aBwJrBVOxwziRiy*^&pV(> zOB0t;X=&;*DlJV}Mx~{R$*8n6Wf_&0CMM;7&(g&7sO-L1cHb)m*I4OX(-W+M)#QRdtzfk`bVgblI%NaX+=zT?R%&bfjI=aS^fQeudCU*&j`%5k2`G26^4JZ76Xg~x0YsqmO>02Lmy zjk3aHwozAj%r@W(kJ-jkC3%e(4G0o|GSc8zxgTO`?PQI z&#;n7_0i#qz$fGKPclQrCj)tyH(jmrzG4%$gmqP?jgFKmhvY`}RtY(8Jyj(nz`|5t zIb^(9EtQZL$%Q7$A;o#it0{+!t+K#eIV8UAWlQCd#AY&E<&Z0*qU@DJyb^k=gnZF@ zu#0lY2y1p5C}BvB-&|MakS2zmJyk*m9aRZwl@wH0Ippo2^*+iWzoqx}RSvPu-0!a( zB5|EkUpeG%!&`yMA%FEd6RsRGGB`d$CGEpktAxx?d>yGAQqufjOXZMXJv+8h4oUNH zY^NNu$#ZR2<&e2XN!^u0ddj-=QVuzszQ4C}$RFlK$tq{L#rIPVxk%rrggkBDEJHb@ zc<{U|<&c_P*&|(rAx3%wR6?Xi#)FkZ+@r&WD~C+3+ibW(OGk+{ckk6CIqV^J#u7G| zD)5OM$-c>-$ZkT$s)ZrAD;Ks0VF#;Vc#J;h11q9*jD0#f5-mnowGsMJw>uN{M*pf| zCee|q5^519q5YjC^iUsVWUE6n-E`L?08XUEhRG^faL*EvnMfc2((YY*iXPsw&N~GNq+9rZm9W zlnmOL((n8^A>B~S1vS?~S-8)*))-D!QCDDQ!=v$JJ zjU}z{v84EBmb5F%k_y^dl4}P`S{7?b4#}3(sHzo3SXj}GmR97JWkvUOtm$MEYcgwP zO@~HV(`Bg*4biiq5hgZt)!BxcH?SeY2pd`*V?*~bve|57OHDj%$sod(yhqqlb$vTJ z8fr&#qwGkU0y6FB%fWV(pJzvARqV;u*`Au#v8Szm_S84no<>F3Q%H(a3?WL^_atUk4gL+<^v2tJ65I>a;SvIvvZd4mpl=!rhU)avf>5M-58$tbwwr zL7BcaXh&!batW(JjUsB$^w=6SLZ>G6HLpo`9ct3g&1=%6jx{N=drivjRg(tB*CaA? zqM7zi)FI4?Hbyv6WQ-GC?Bzt~5}YVB!-?{eovB#rLNlwnP@@1BI@idB9>lp&{S+69 zN_8RsEEmce=|TmDwJ0sP7FoBfMYTZmz*^MJ(v_~cyOM*4D{UC!N)1N4Qka<=U9ff| zs|+_vAL2%jJltttu>1dO@4Ta`KDNI9IaDcDP!N!!NRcWX1O!2<9C~lkd#_3}QDRAA z6j9NbM59TJU1KzAuA0~|Y9b+)*t^l#qTW~%;F)vOJju;_*Sp^JK5ISy+&Sy}n_=cR zd(Zr4_MSQCx0#LML^Hwz%s7;0#@Fd)d|PJ5l?pR%3G`x4q?S3~o0#*1wK+?|%vl;| zPF}7#lk&|m*Ro)^js?pcEzl0IAU4PXgJKIF3+z<1!wpx~Km|#h2m?c&bmQ1g+ z=t+XocZOYreIxW_yA)=klyc zHMU`~qYbYm+E7?!gI}Eux2D+euDLCd~><)0`NQ5I_qwEV6W+E?oQihhLAn#a3Un(wvrf+$9|vcY z9G$Vyb3w<*g&VFeRC>EGDA0xGNEh^yT*ydqVQi6$*k8Evi-s#Jf?fG2&6UC|R~oZj z*;47sxM(-tj&oy2iW}E5M4au$Wr4SI-3TdiV@A0f+ne2JAMVagKX;~8y0fF+od+%M z+*a~nsHz9&oIRNB<-yldfiw?R)_9;ccpRhk#&KT5lQ#!?vfRLvSR+p&y*yFR@??;q z7n}jbRG5tCe)f2-6^x)~WFZPptIhg57LY^;oGA9sMG=WuGe#DLNquJk&i7|fs9Ph{796z3y`Qgy$ z$6WlWQuAkwnLm>f{P`i%pTI1CHdp!+S?|xvCVy-OO{7tKB8r9+F=?78=1l_~EhX=99D2TJhL7XxPqBS{) z&5FUOX$8}#8_WiqVD5Sab0IXCM_IvKuMMWXE|{u;A#52I!aa)+Lb5_gEe_#b^-$_3 zgrX1^N=Q>E1`{UnbIBwY^$%l~Ss1#OVJsUL#^TH{tSiGfGFZyKAyU2^BV~|-lsTSK zJaeR!=1Q4cCFO0?aHiXavsa+kE}SWm;oMFM$FNM~*M;M)6v1Zo2x>wiFi(mgC@X^E zx(IftMB<|x$>Xt+{1_WaVtgcR36UfxMN(G~iKH%)iosEIjEoZVI*PFDC|b*-2-J>d z)v#!~Mnp5sHJbeu(L8L3reZ)0Gt6W7#xsV`Cdc4h8$+gMEN3lZnc^6WV|Xkdx5SF| zBo4O`adcV4q30Y&WLO->qT|Sli(_(n9G;DFNG#%Uu8OCG1WJ?=a92sdPCbDSbQ35y zOrYL4fjMRgJa{Pl`(pWGsjqzG(jId2(MPM4|LeiKrDGf_$8tco__*fyGo}uZS zGEQgr_;e)E=?sleXI*kSn}<(E$$K)ZCr##X(q!hVW?(cdgM9N0PL9jKG$w;($r(J( z%3xPZ2H&V<^4p+H(uQZUU7*uGlR0jgZ1vA%OnfH03o_A(%R;9(i_*$0{!x=fzEZZ( zh1opt%SJONn-$gBO^P`^vY3B57qiW~m9teCAT#T+$2}3+e*pXMlwBiyj>y_ecS&B}5DG!I1 zu|dC#aN{zu_bX#rco`S6%BZU?W7JfU-@lxF=H*z7DW`2f1&Kx#v|CjWmQ}&YDHV)1 zti*I=C1Z*9ac9%<`(`lcrj9yz5vVUdOETI=V~h__eZ*9HV;ndDdeSSI^9pdJd-57>TJ%xoyQ~0T93InH1AxM8JdgG>YCul0KMNDOR-c+79OvOaf0EP_&S~n0K z)_`SFgV?_|i1ng@y4(iLiyKHTZ=hA7QGVv~0-Z(_O&b|x+sJp?O{~*zLd~#=58azk zjA_ETq=^iJX2y?drqiq$9nWSwq|Lk)(M*7P3nTnmSRdR%QdkR41ufLKv|yn%4ONqA z=vqyqD`*<6_OG!%=ruAcU!!-#>r{rmPH)=l_$p23aKGs^cuuD}Z#oNVr?XLe2CGKS zV5Zd!4oA(PCv^sMRa^N%qm>CGS~0V0r8B6NM$1K;8|h^u~s z*2Xtj%1kOPX0kD4Cg&q&(w9CHd*xYFYR%$_$t<>lc%HJB(CsH6wBV^5O0Y+*;~Bh^%kSU z-(r38Tc{Phg{kw~{FM4O`-|RYW#ikZTF#|p%v`>=n~S0ATpWDoVjeP=oaDJAHO*ze z- zgZY$?m=EUj8DKx3l|J)vk3phKdo!3XVv(KrWf^qGf^J_;fpq&-r?R*~DPC{}!{?+YN*0pn7 zbs_cr7NTgekj>r;>G500iMWNFN?wS4^+FO`7Bam5BCZTuMCIs3+z4Gn=hQ_M8!qNk z>&4)(m=ALnli#qIO$r^HR_|b-Mh8y^cQC=GgH?7N6nk~BI-rB7&<^rrJJ3$+z_qZ0 z9LW-v2^488AxC=&dkmNG#BK?j0+%o$W(nO%OL#qb35PP4P+hx(Tb(GS%f>mS??-OS6FGGCV_$9$a;Yvt3RZ_;!0w4S7N5OlC{PwxmdE2F2hxH1*~G7bQRT-k9e&35e51mG27`Q z)=&C~6Y(GMW8+8IyMN5|jE~t`_%RV9KVh%yCp;bh37-UgBIe2`>{3`w%)r$g2w%;! zg4LXASWSiGQxa4@#Y**40y95lu)!KGPFTaWz%@LTuHn6`HMHcdA+%}@4^`F@tGAXn z1J)!Ino*o{1N--wN;fOMl+w>Gjnb0fN08__P^$cnm+ ze4)IF8~rx1#&i>@W}CQKv59{)ZNkNDGxcGc30K_02dY~*H+l;b?6(j(b_>g6w{W0k z3+wxT#yI28NEr1QXYxLyRk9Vwp<78e*~-M?tu$6`#oqpNCOCY~F{jVjnDII8EuZtc z_BIBO*v7i3Z8*hmBVy_{k`%V{jmdTf+HGfU$aY-Hwli4!3*L78g0O}!sAdPX?mOto z-NEXb9lW8qlTxFd^w{jA&21-R#_wc!&`y5J+=+(vE*=X68}H)O_+6yN@4|HQF5Z-U z$yvoOaZ>t{?@hntUig<{Z~Y}dTkU4C^KJ@!cHiykG^*~Q-e?a_;`egF_ABbfe#L_Fuf#g{HS;EZjbZrLtgQW-Sjj#t zJ@@gubRSPr_Hm(nAA5)Hr_E(QEztxsPPL>3Ak{RB~ljKgOXLXV~wUax|o!nPG%r3RV>>hL&Tcg9Q9d(#yr^BrCIm~Fu zH;h&KhH`^%P@eP+pGm*rw)zof+aF=I;}JG{9N~wcBiv6u!jY^a*q0n(n)*>L7#+ns z>L~l-j&i5qC@ZHPCByU>z2?VIw-a&8F)nI;OS9IubdLR&DfQnX(fp40biQL-@^_e4 zd`FGKakLbVGg13E5A=@HXn33o>*HJtIxhBW$5ClKPFB-#EOfi*)bC=2c^8Llx=8iy zq9?M8RoPv{3F%?l_;UZ5@U0^cQHpjG1{+cht8 zNbe%koiF0$c9FFL%~2P5hf55VT%tnf61}4?;b(D){;rqM2)%@H+$FwkxWwSmm+5bH zna}GlbGG3!UK&@h7<@&1AH0I`&?~Hny+UTe6@IP1LhkUZ95cC!hv`)=J6$Er|0=tq zu2P?Lm5#|*IZ<*Iuga^0s9a-?+BJelT%+6U8vE0(acRJHM(AJXmcex_M_U^BK92;(yWVGM>m41mMZ*8L*TExpZY87i+<(A;3rHneIoV;PdTdiRIIO0S#0x^Sm{%mGN00%^^}OR zrwmnmhQ97I=36}Dh~qOXGoCS|;u%l+J*PSJIgXLfNl$)GM*edenx6Ao?r(T1{?0!} z{LVs`-*KDpJFAm_=T61%LJoUq8{9+a@E(*#_VCrX9-jI2@Jnb9??m;8y;m<2t$Uf~ z(M!BnFG~dsgL|oz_7WK1%cjY_%&hBWyGkE>2KKRTaGzKk`*293Z_BJTIvefu_f!vkXAeq0kzCM{fl`656QY0Y06v-Xy zMvKKPNA7Odm?$ztUbeUvi%*~Y-%tJ?Brj>nf70)hStz|Qz4&ulc2aMkq0H`9K|w`P zSxH$zQEBEF!QxM$@1;pp3kEDZm1WEn6_msyy4<%8pH~MQfAEr@pPW~LXs3)Xgo}Ew4N%ZfR#cE1bZ=B(-fxYk z)Ly;Mle`>*FnPT^Y6M4P0!1&Y$rlu4RxMpSd=43NY2DDzVZ4{T9jc0I3JS^!N=kiW zxa3#Q-dFAD`=cFYf|jfeIpX^2$&07`$8!_IrX>1d%jM+B?6v%(zU1YoWeEN+MoB!y z7h|oYEGntI=>4TWQ@LlUzxBT4W#2OdS6Q!Q{gAm5RK{0vmM#zUCD)Yl<@c9v*&h%d zdgqN*ZTkYM<%dZ34TZcWne#%~t0g6-qapd%T#c8!ZYlEMFE&g63I7kFRB5(yHd~oC z&B5ufCHf0q;QuH5w{2&C$LSTaahi0lujlVJk}pHQ1i5jR=7YY0l75o$a7{^W($w;o-MqR|L_8^6cLMEaK z7O5B^OC^*GdCib(*Q!628e=XbSSD-cBAqQ#GHp;Rm%~}OcgeQmUYX1f z`x7NuY|L0u>L6lgxyxK*;zW+E91d6s3Cod7Sed9V)3CWBRVlA4<5T@ogBicn{KkS} zxhTmJ`MGlKlJSQVc4I6AH5pG!Oa%W3tVNzIt`&S`>FU4Gw3c&;5l=@dPnQTPnW9YA z-)f<&b%d7Bk>|cxeM~vXh6rd0 zXbTJ#7$%@2perz3Ku@6aWAK2mn!Yi9NF=QSArp1OQPR4FC@S004AzUwC+UczAetcrJQr zaNL~*RF>KH@G0q(?rx;JL%O@WySuwVx{;Rd?(P=p4gowDolDP4%@cbghgXb&UJ~X+O)KEe|sbN4{z+1Jdgqg1OUJR0syf8gWmY-B5DT*eXD$#E-_#}XfEgW z%_(_x0}iN5op3xPWE!o-TY9Ojqd_a9p;3kW^R6FL&G#tH>)Vc}ZVSb=!n>4(rB#b&* zh*3~WVkJXfbN9Q@JZ4L>k(SU~bR@As!{1^k+9GR^3z^-9vzU9gmJ>%#Wb3oLrbjW7 zF7@Cluv6LEf33(l_s%r>6jIwL*TR@f`1B*Kh_!)y-Vo31+XVJvEZjek0#~cwK|z8& zEe-M`1uFjw3V!8{zb^Wj0y7{wc&@Yx7vY3zqimdFB*L=^r?Mu)3BZ=t=S?Nc z^sdsFVIDZl90pG4_4iDX?)W;`p)00w0wjDgrl)V1eVLB6W>RCu7AK!#G%`|~5>I}~ zA5i~+d08ouFi=^~u2|zGz%5_H`swpvzAs|j+Z3RUS_a?kepl9PjJpVS|7z z2k+=JxCk<~wi!aCG&jc+J>fj%wZJg$x7bs|{X=%aew_>1|E8CI9~5A3)O_h4p(uNV z!t#%J-EZO0%?r;(`pVm7fb2O-Elx4`Gt(|{nu1+;W_`_&7JQBvv6D59&@L@An(+<8 zn&UBd29DRTThQ}^SG+P&;7}n{}6mnwE-IN<7KXL-@+r{KDw5qN# zgK#5J@y>f0u_D!%np`sxt1`P2N=*iyyH>AOvdKD1dFhMgq8CCP%bG|sO>~xid@J(8 zy+D~q?Tjpd9^?Uf zKfR|cu;z|kuN_QXShqMWTFkEQsYTqHXauQ=+QG)*i`~py;n|iqC6v~eAp@gz22#y< z@Oo6zob6i69jgY1O&UB3Ln14$KX~dEr!_kxp((}KHrl?M7hKCzFSzb#bHjwdTK@(r zRKMAG^xF3N);5OPc8(T?-*QR9|K>M66+CvY{0~LeM%p&IcDj~^4v&C*<0WSQyO;dr zb$&(s3&7Coe z1ii{kuP6fy6RaWwTT5&es)e}$DC2ZhhjA8<|H#yvP@xxvtZoF8d2x=Rlai$G&MC4u4XHn zh1JeMZW6^vSFj0ZDO(!*l}O&za3s}b?1Nqf0fd__Fgb&%J79;tN!IZN z;TO(1YIo#jH+EX^8eWAu*<}#p%maWouN`p7+|%5++rPZWZftShbXnXdxp4>hbzt*X5z3T5F-B}vEazjQQ5L#rj@^c)t{ zEtsR<*TnAIkGxd>Kv^djNKw4PB$cla_1d6+z?aCKhgCfBlpt?zMaYMNgJB#rF-yYz z6RjpO;VhiY)zD#lNIDSaiwSa;ciKv4&pc{BfpAQ1O4K;7G>WYm5WM}OUDH>{Mcnay z5X1NtF%8LC*%*(+i2cdLFn&|`GciAeB~MW*C2=_)T-{@onyBR_JE7YWl^T0k&{888 z^TnMM0{lhoCRXAjGPkRvE)Jf=Xptv{gvS|Rl^R_7#Yb-Eyxd6RKopAmc>^Ez%u&IU zM~zJrjT&64@!f!qnMMR$G%Iw{uM8SF^(sCVHTS2GL$cj?< zmkuQQw9;lsjEX)GsnSEN$^ZhW4Tk(un{JfUR$ zh>{x5hR_P^UZzLkV|-gYz2H+f)j$nTt3LXcYOMU!c3K5fm^^+5=OB0LP(&-O*eWi&_oGw$X<)*=3JfJFZ&}?{mVMhL8LUEzNKC<0K3)Uc;c( z4s2t7A0#nZB2~iJ+_lgKQNE4E0^MT%l+uLC?~0q9cJekDo^1U zTv0jzCLP;$F&=B!8iww`fVi=JNnuPVE>rO08N{|I!@Dyzqp|)FM$Z7ZLAL=3DcNnY zk=(?ZPc#fOc*4iUA#lh6gA}z(pano*Lj0BxsgT?vzLw;q)vpAb*cZt2TLYzIrdA2v zt=no$Ahgh+i&Jc~1sFbB5HX82c6A1EQgoYX*;W+6Bo)Bn9Sb_a6O_cgn|V<|-Ljh# z&eZ7liYmCFqtF%oktIIE2fTt;CuwQ4u}WVcMpRv?r_tMR%cE*F*&)l>y03lN5n%6; z_l)5-p}r5cSifRxZc5sZ?U60tKbbAoZwh}hQj+42?k;Fzs3KWkooEFVYLNh3F#iXC z*OF38Ib^k*@d9Pv+qr%Uk3ej<68h|d`!-5ANft_IXFLqPBX;c_~j>9aj4+8xGZ)|Cz= ztH_(3dLi2C4M0oYIIs$f@HUSkWWd^37OeIY!6OZvt=cL>oqXfvvP$w^g>3>FW-clG zUYOQ55ZLMlmj!j8FkOf&8KtNiAuIB!B#N|QIi!jRZx!>fEy~JdF@!8+pC^vQHaO-_ z!E9;el%DqD5-n%n8bTU5wA27*LeaBuR65w*#mq{=2>@F2ieLI`Q0}Lkbfp=Y+sSKt@OF+#Up8ke==!o-xU5W zMt{mAw`kJ|QyNB!a~1xWNiN(aHZo>1bdDuKEDCv8RehEnSkD>^zdG7_^&SSSK^fE^ zkaNG60~J80$;}sxsVU1HdWs$B(H#n-jy}4>mp)St>8P%@a1%)Kyz3c8uJ9-a$Y`iQ z7*?>AZxxu(CNf@L65{Jdteedr=v)-=;jIk&5LaU1W9*(%Xsh-BXpIPUI_t)de`Fd} zQzn*m>-qS6NiI_H(I0x&$x|@->d!Jn5riZ5zW|jzFGMd94D7A12a?3)8>@bFl+ktu z2iT%;T7krSM%28*_OYStF&osa&4=wHN2T}JSS>jE2D!w&?^?f%#Eu5Pe2#LbuqWzL zXS!7%7!Fv?fe;Q#>Dn|Dg%O7j%dW4cbSHh^aAR4K^GnES9HNL098^w(q;VT z()HMmZwY^*Ys{>N7Mhz>I$K{^=tIy&Wnx#BMQ)PjVy6EAS(z|_alM9;(3+%4BR+yr`s8{^9QdzoGGvaa9%@-G}t!g&$G`!lE;l7%~-?9 zOMEvFZj(eX-MSSY+tu8S&mdruhLPFA1PfOo0r);8>xFIaS}=Sa2!Rtj?R<1J!clLg zF+fe~EL=Pgh4{)VL>C+B!=@>Z=H`*i3hWY4m%=mnC6PS}LT!;$(rJ&T!u7&at27cs zEGQ|174!m$54-nva{qnVR<}U;6coH(@Z{ z<#cgx>aFWSThwBC)KJ}5(=2nxVkLSti?*}vncQX_YOeHL`;yQ{-6NwpP3(UsaDAPS zLJeAsMR|lv#gm9?WaGuR^j>T1 zBVmZ$yBlHxeSGx_GobO!RW=K{HV=8fKIc9j#{mFUB2ASDlDgb zeTBU}m`l?`Uh?RGYS`#e+_`!$%U_Ew&P#?!9iLZa6)4Cn7UpPVY{pYeoW_yZnUEV< ztBv&f&4IIPPHg1}M4P5s0Aud6FC?xwPUT~-IG8+t@UN?5GUc{rbPs6ch4asOg_^6M zJL2jZg`%mkK9BV_`dW59EnpORZ)-w)*KQ|l{_$v7x==;Ek{ws{~<;St9A2Evi zlQE+IrtqgYzDw#UOVyx#8YLn@9*Gr@oD9#T)e5j{L@uvdvr^Vl^OFCI^P8Dhdw_

@Mi8TG*0}OTga5ECZH@o)e$%c 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/.project b/docs/.project index 3ba028e..e248a4f 100644 --- a/docs/.project +++ b/docs/.project @@ -1,6 +1,6 @@ - Docs + docs diff --git a/docs/drafts/15102010-t3ats-tps.docx b/docs/drafts/15102010-t3ats-tps.docx new file mode 100644 index 0000000000000000000000000000000000000000..1ce399ae633cdc0c78063c59463744f3d30bf063 GIT binary patch literal 317557 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

IMXi5Fn=&2b4A3R82|{{6qRYid8@;7;+{w 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�t5s^CJZv05Vg?`B}&wEzDqmE=BfW!CR%x>Ngj2 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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 literal 0 HcmV?d00001 diff --git a/docs/drafts/15102010-t3ats-tps.pdf b/docs/drafts/15102010-t3ats-tps.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d426016b3c69491ee1ba07227d7c89607d3753cb GIT binary patch literal 1390166 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

P(4u1z04h{TfbN(OAU84t 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

aisPq{FARiMk1IA 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�KST?en7qV3)4 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 z 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

Sd`a{mY}{i98;?%O+L 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

SyElX5#} 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¥3=RkA^zAz2@&q2nA|_#JX?)~4-@8Hb4M4{C7!k* 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 n5MxMKkPe*TF86hrv2`!O zW6|IYYlazNbird%kE765PO5pYkP$Pm)GmbSuEUUH%1qTU>HO_9txo*%SI1kQI2-c5 zP@28m+Z_i$5fGlBA_2iYJRF3taPPoh+KE^L?gRVmO8nZc*$4yQdG0N7uO^8m1FK}! zo-F<0Z7c;5@gwAol4L0BMMqA{o@YNhAc_W$?)wF)raGn1Wq~tZ03tk?b;+9;X=Pj# z{tJJT5;R?TG~XQ+3m{sS9Z0ta%6*d7w^8MtpQnNzH+>~?RO?X7K^=K0{9bw_w8syfpq;LEz(@BFh^3ai`hobG?*9&PPi+ip9n zZCW7(4t*ZufTU5%7aLc!Z{Q^>4DTi-$JOX>tZ&Y>J<5@)v3O5m+uK};eg|!YVHF1# zv^-v6{xRv5n}Js%q4T=hFU`Jz)%mA9!z`+>=+IV@M;x6Lb3}&zw+KE}j&&HM3CRkF z`j#50w+o^-ROar9}x>c$k>5Aj~1B9Byg&d)ru2zb8 zvU2#p#ks{6xw6@Hzz3SsX1)fgCu4%pH5}H7TREdg_@*4Ng@hQAJcWL9Ze`??KE7#H z4FC>`HOz^J5nB;^CQIR9A`7NqSyYvpWV>0qPVmB@A(;gB9MBHrp-Gxp5`r~LQ3X(G zj5x1d*Iaq+3V@gHoPf%QYle};X`RFJ)|WHF{7k9iZoB^#OcliSbXebcHhky<%a6Fof{dXo!1877q^3%Li3rdkbwX^b;cdH=MX8p1ovRdWcY z%1kjRUqj7L4HX4`3^hrostPoC zqziAMjK!zVIFR6g>|UC~o$9b2O_uZox!6vWs-*XtGE zg^0_Er&G^2Op~52_7Lt#boul9ih5!0u*N%YR$0n);R|@y9*{TdD85J?@SlIhY2X9t zKnN%=f}-dsj8yZ=xgOiXF}Vy`mO@FGJ9gsdSa`%lir{vh?J8o@%%&(2NS?Hq43ZM^ zqqea&^`nz)Q^Xw<-x{P$Q9G>+VW+{GT_T-R@|Llf4B8Mt>wP>TGUsY(sgMJ}E)ng( zv^X}S!$%qZ(^HM^Deofz8S znORE+LKPe#w5_$DQDubcP?u^G2tu;SHDu37!r&`P1lVr;7~7XNQw74{m8z`8?X$Bz z1f={(p>XNHg|P_)sF*hQ;l2nWD_NiB^7#o3_Oo^GmEeMHI;`qpg!*qdV)2+D86!CU)xds=3KNI8|U_k@ufxUCdS`D2mR8WoW;W$i@RC0ehNuVA82L?yCy??JK>mq`%$ zp1%4AFd)A*fdor7)0FpFiIUCaL3sUJ$&?TW_R8&HDKY>OSOX z>n_CY095&p1edmeojNi~rL6Cava%Ax2#?nez{ja1%hQdSm=gicgz%V%Wqc(t4gm3z zCO!_to%)fhZIbXIQ>4AZs;U;#j`ZjJeVZm*N}j+kr=+v)t^#8eFvGAy>sLZA!2XsPSj@&n<$QAk5)wW`9a05N&)a;roHnZ-S>a76)1 zjsCO7bjA~l0xtj|B4>UmYdtZtzX_QbGNG7kfdSoGjR}Y*h7<2Br8cH`$Tl6mVT|Jg zON_5~Cc1TUIuc1_jGrA9YUM&28gh;Sz2LC5sMp#AXY>w7j2BQ9qY;y-hG>3`^RG~7 zF2-Fb1Mzve0bim!F4hmC`!f_O>uW87YLYfC(>ufmL{<7$2{zpx{Yk)#A5is?V~3E6 z{{m44<<(_+dt1s2gy`XmFj+(aNxM78*%Pj*!3|EqkW6*^j{hiOUU7%ca<``l4~eVK z1A>8%M*}6fK%&5Ci508$^Ui9Cm7}v@j4B+4GxC^(31PSkvF@Lo13|HX2sSW?gh4Jw z6Mo=15D%7P$C>G9G(wl;xE?-ya$}W40;R^o6VbnGLX0C{2(91Job81e)yhk_@iFrcCGr9-VD5j}bw&B$Bam1=8Dpe1E&{>KZ0jU-0Jnu$c-#+~9Q z$X76^Aj6&D4xKcH>1Yp}cQ4U9>1ri!ID8msIO<&sUw?*}@B(VRz}?yIuQy!_EqOM) zf%Yw%ahng$dZ1-5G#KmTI$Hi%i-|@>i)dN94JH{he|>`G$F3MyfpX9dn4N-Da+s9O zc-~nH>kb1fydxvXpGHZ+#?iV9q69#*&du%Mnzo_tu=G$AqzMn5{ zVe;~aEja21>?FO)W=m;%wnA^CXCd3_1~bD(KWT{|Tdwci#e~fF$k8dMsP?H22{Mjz z#5m$a@2RI?cG5^h-302>iYghyia09d=61{8N5WH;-twQYbc)zlb~xE>@Wc)Szc#kMQgj&ME&hWw32Nscv0tIi9X{3dzCWGo77p@G!T#Kfg6K*i4n zTr7}?+&=Y>c)55qe!bSu_;T{xJUh(j>Ny{Vy{tWR#0iGBG}Q^?8?YksNURd8`;x4% zxgZs|rZ*j%nD3oY^W%9C8TAB>VYowiW&i0m{=2;091(2^BD{YbKD@_p?}A#nT~EzF zGKi+DSE5zypG+A!$SO=77<5cM0PNP;>t7_GI88wr0UV2vaB_kRr#1kELX;RLKr;Kr zva@SOtz;iwphz?mrLjjWijs7K3y5l%7#7)=D5$A%Cm?`&X263IR#;%wA?7<_B=Bcj z_hX}f(FjkcCVr3>PMXOG??BUynooC4rQ#%6yw8zrh*#>A63am^2vTK1zh7})A4rvT zW(H}9|&p?g)!$KapOpz9Fp;ivOr)`h-(Xa zM6v>?x)^y?dw^3za_O$sC%D-W=^>T~4PN%UtQ7ux?B(CL>i24lvHeoadDLQf}n z&cKPHxlw`VnLIHPDGw~a>!v}Dtqz6rd59KT<_j6Mip%Bh8;PCPwBg!K*bGhoK?dE5<5 zb&(wYC&c%+uyXqbioE-^TsS7BiHB!a752?(ZsDQRL$S?35)_~ESfzB=Fkn(YWe`t# zoR3+jKn!Te%GzFid5$m2c}y&Zr7~}cL~}WwWaqT}JO zF&D#~lpR>#>7m?G@V3YvG?}`p5heKq3*}q+G;d3o6DXJWP#Kd-78e!Deq1R0adC47 zVqNeGQoyN0s!+%dQozdyB7^2Zc%FBxW{}WaY1M3?@Cz$-3o`oRCITlhLW~k%Fi1w= z@E?=73pe z10^}CV@@{##S=1gV}~cSc|7(BveNH!Vri+qBS{jeS!atC7Jas0Oiy;5d8JsTuivS` zbpy^Zcri*TOTjUxBr8zW5h2n5xrbI-YvVN*yLZ}_^H9ueRgJjXDyMYFsF}->brI%N zSo-;md=13C^BXLB%A5zkQ=by8w2;QAs1W4;RCOr(T9WswDFmqejKZkmZCHGmy;^Ch z1;1EnNr6@6+Dfl7Gikch{PaCs#9P*RUT z1uMn)Q??=bw6IVLi@}NB^D*bIH+`a(jhESa=C9G!YrDb#bBtr6m$INkjqe5j)bBG< zi7`v|a*60L{&k97+yNkZrsdY^9Hy8ryKvA{ISa-Uw*$MM^hGSR$U?H~2ujebFFG3ccXZokc=i|F#zDX|4 z&u5Ia+rOmcWEz1|KC>g7oMSgpUeYgGoaML(WF-#ugqUt`6mTWN{K&Ag`jy@x=9sVO zpap&ouIVBd{={wQT9y6zSYsi9Znp^Gjaaq7c)l$}pyX5)Cjol%k2@MCPyhu79PvLX zsdfI#5Rwu`+#fbb8=IDNpv(c$qLZuq6i4E^?G7HC*JFh=Z*&yjRE>0V3&|GseVfEe zz{=>`9C^}Lc#;ybO*VqN6*i}#x+)sIfEi7D{N1U33QOWwk~JpLL~ch%i1+-?q47(? zWV#~pt{EUA?<4GS&awI6Zu-u1q`fVF(iHx973~GsV}H!-%17EynoHl6oANk>)4pPB zx!gqBJAObjV&oifo2%^Meg$IzgLz7Qm!ku+IhMn11-K1z`#IL$9^b>jH(_5Jy&*FU z2uO6r4d>nR`F$O>aB}dNu>IYNInB*mTbO>Sf!);k9Jb$@XQjx7aEUtO&)Y(w@8Sqh zkHa6P16PrWffa|)WsHs2-F?AP3{-{zLmaI6d7PG)^D#x}IwujjG9HoCL$m+p_VrF? zK@gKvI7|?!hxUu2_)F>LbaD2<0wXu8?3cy(C2H+|n^tNd<@c@h{RW#xT{)3q3-c9R zVqcYM49=NJ1&|#gi7^%2Gmcy{F`7-$D`Zh0_mb(eVf-WkVf>o*+10n_FVC*4 zKbMCWfC2+lDztE}?+-sOA5U;Us&2|}6**lOtg(82RUc)!QcIk%Hx1m<{d&so4$AKi zZ*AYN!S{CW+b*8=+-LfmYNJKx4{g4z&@&Dg))^QVR++&lyK%q2U=z0-u!oOP4Y;^f zUq1n-A0O&AE;Q$NZ>q2BclJI`A=6>cS8vCa4bduwz8Qv=BK!A!8CVV&`j37_%EeTn3?hhs~Sb4{zkdA_yUO2KK8X>qLAS2cirqoVM zk=Jm`gR%lqK}3LniV15jz+66Su9XhwKmOo~8S}=`YuTjlvaG6W%q&-$ftSpjd5a$} z6HXtJnQK6%&uLo&wGlS3_tvL->)cQAz#82LP)MLs6;;}*&U{-WOF->ht?sT^g{9C4 zNl;>&48aI#mE|w$Z&3930h@x}7)GQVVu56V_BFeCoNZM)-02Gl4YdBonyy@>IZ?iZKU%+PdKc|DRi_FUcht5YV+ide3+$6?7TrMDfehwR&3QIiRyq4rW9KRu=BXka z^zYYX>bGbhq9JU^3OXea1H#_LAjB8Xf+uwFD)SxM&45W{4zEt5Qd!v_+6*g7`pminCigtxJv&GBu-4gzx zPogSE47@)AfuFf49Mk>yEyl5$%=R-m|(CSF)WsZEF%vnM>kdn5PTpj&R?)Znf2!eu12wR6H6bN(lQg_ z9nt!-vXLCW=Gq!BD=Z|XJ2fIxIr20lnLJc*qPPqpBm3*~h!iC-XA=jr35yP}z+ff! z1)wQ;7fdBi^QVH7n?(#%;+0ulMk2)wrfb6QSO}qV^<9QN{WBx}o@fyq4q`aoONS<0 z)0jUnJUUVI}AatpsLyIGP@%E0*lX(pA-q9~hx~ zO~`T{@q{W3R@O1BhAC1(pxu=b6ge5uYl)V*G~a2kJw_`0F;oT~*Mt^U z%79sA+nX1UKC!6JVV}Fpao@szC8rZDnJdLe^MwZd^=-^CLGmws3PqT~V6@wd$)8_1 z2s(Y90j~s6+j~DNQ(PoL3?$qnQHd3v=S`s3P}PjSwgE{DIlEZF;((K2`4H2(%%djW z7}f3k;3IV-K|JqBo}@6=wCrS#MU!P47t7QtXjN1NLtO||ZFH*gKN4{!v+Wwj(q$X% z#%Fl5jYqAj3qc-;7Q-V(hI&BBNG1xS{(zBSL;m4ZA}zpFp!ET#nNerMvY>Y*jwkhX z5!+h^zjD47A-!mJ=r^+Ye?{mkwJ2abwLe*%K^Ol{9HoEf#?J8;n0*fCG8Q@ue968& z7^~Hf#pw^OOl!L{a26eicPPM1AP2gCd3lR5PVCZf2G#|(8-b{8YP&yr0!E%m>wLd@ z^-`B1;JGFQxf{bLZYHd$Wlj0?93PQpG|6hOKM20kHjaO=s$jP6h=S2FLz)LUc79jN z0LY1Ge1o>_KMDAen6y1--3^^ja@!-Z+XY*_e7@tqWV+%0vPW--IKQODgb9aD*!S&a zz@fgV3vS+0)pdvKxCnJ3sW&Zg-rTUi-Re4u$?V>;2g46u075R?aC?3DRmM`Ztc5!qAi zF9fY80ai(OEn;zrh)3CuD2~dRC{OY;5n{ziR1>T#-gP^)Ch_)(+)6i2{01BPHHG;q z0Fr1eAZ-{)1PtoBoNLa<3OBwVZm5L z#!%%iupa?Q5(RMI&|^txdx#$3T{;2`Ts6R;mdutp4MrJYaf6fjg0TWuB9KRrL9~cS zDKRLRpmp7R1{I!3)GzR$f?groa1<{Lezj1_30`K*o@8j!5`KN@!b}zF_BB?36Z+N+ z@cd^jgH)GPSIC?~W%#$h+3sU@{*cg7o729Igmb#oQcEi{@96Q9-i-9x3qAb}X(j0PeT4We&N7jP%ik5$<; zr=vL>^k+&PB232?FE81dIY6X1mP81qa^VmH$u zxysl@xxbP+avu8=j%d0pdnYm-Lmk4Aq$s4(ujXC=s+g6HN4Hy8XoyZ*(R<&M|0E{_ zxqS|inr=*Qb}k6Y&scdm@4n-a4VCAqHSo)vvuFNs5!B5%l6{aI3;P4%X+3C6R<3Irn5#oEG123V3fcU8vY1t7wn3st zpkNah2%H2&78zxXCuxPyh}R@Rh>gM;DfFspq^(-vzrOEU;+}OgLLI)v&vzlhGZfV7 zRL`}MX>$~q_BdNx5eX@NCmXZOFC?5RSj6Z*Cu=%^i$OL!I{QbpS%L}egUsuhF_VdR zK$Bu2`5?j!fodg278Yuv$lT;zqTx76Kn9Iw zlpVK|ypwa0dQ*qfPMhn1HFAc!v5P!4Ykp{b>QZ?_CBq?;3?Hub2$dIm}NTkS|QwK>*OSWM^7QP zIyBwjCYQ)QodkbWNJb?ftTX{NoVK8GQFtGyt)>IH42S)vqn(I~ zW?CE=d9YhVO?X$(ke^A?Arzz%1xZ^-1%8A_W1p^J=<^6+VlARG7f{bLS=U_T?YDC+ zRo}TS5dvm(_P5*tjpnnWLt`Z?Fp%VKw~{srVFi?igYmjwE7)Wl`MmGT@_k<}Ii9VF zPLlm1fi}f?@nqX~Z=;8>$QxJPufVNZ``O;-zh|~UG?*WdJ7=@~(g{DBXA}@qxEr<7 ztGQhRs*WN9DYiI%+euE4KYco3ctnSX0_*(ZBWKl$LNRdS?Z+OtE1`T=k%mt>$lwek`3*e)Oj%g99*1GgJnYFf}6v}t($X=Zd z&uI>pt`;U((_CM$oS$-JOSIvPccy?x%CH7UOd)FT5+vrIYz9eT>fS_KccYYegxN&t zMWa19xwpTW(uMk|?qCn^_0YOdS&ek_gGozdA;x3Sa6LuKqWo$BsUNP*@hu8;Cty`m zAH2{buvsC0w<-lt^ja4(iZEgcI#3|Og0u-DiNk9IgR38d(WGhsUzce{RtZ`eoqnNK zHA2dCt+s}n<4Q2}K2nyL?-@shYUN;Ly9q^KmV;U{U17i%a|;F>Z9raQzV~vZ7*`2d z;TzBZCCIm=d-a9>uB;=DPYs(?g0 zi7W>n^6a@Oz=#GN`A1{(e+)wLZq*jQ_2z%|%V+h!4ir=IyZnTc@a)XzcEng){}li4 z)@t6ocDu@U@gQtU1?r?|>Gi!~UVzqe9XtX6W!AmPB9zPtaMV?AK1{ud<6J&B5Wl`( zxeZAOpC0l%0*|%7Zpa7)AQN-sAN0n>J0r6FJgi=GU!}V@fbWMo;xB(}2>tIH7tM7# ztfx?m_;RT8zL+tQFM);Nd<{s8aCeV!{m%RKt_>$aPRP^4XI@WL3H{EL2lE)9?pBq3 zMUQ|KWSn?^2OPARi%5E|zu`jP6f>Pw%IEkVk(@jz$Ai52whXd!(i{E03FIGEaT)y+ z(ze;AI>6NQR?{J4m`+tStR_G0$P2^bq7hM-Tz|vVCA-SEpICr$v!Dwo1qpROu$G-5l**uAI966bG9jVO z1_!FdL^%F9bSYuJzy$d*ZBimjk8A73{U$amINC%u46Hsby#|XjA}UtbLnI@=(q>~N zH_bnaBcRNt^kQ)}1*klrC3B$#autoq!~TSYoN(WE0;(mp1P91Ca!h&0x~|nO+zg(mnYqBe;Rv zX|ml6$@-s$@TA{un#B2_vAxc##D>fQ6gu^yN@Kg+t0Z7s7yS;57EL08AT9QH+@-@V zbSi>X;~>d7NhOgMhH%WkhD0%Xf6=y5nj~0`p_?dzm20oQ*LZI*vu2i z4`dqC-TZX&a%N;%=88k!Ha7S+^23fctb@!tlT;N|L;(ap^KdMR$5mqp zYVR)du;B)R7ejvgLwF(@Kqyu0*CzLB(P`z)B5`Af1iMod59TSQ+$fL?_?uD%+(mD@ zGv{q0CfTJY013aX-EEjmQU8gXVMs!71?MI5x~de9<&Mi2zh$DCcrti^ChAJxA)`Fnem;Lf*olTD+6 z%@xwb9q*}WSGDat0>jZwzgHj$R~|PaA3X;=ISMKBS=GD#V#)>~P0r*pS=%0ES2~e} zA5T5=nv24sE=b>|_~kj1_>E{Am;E{YRVD!%{_IZ6?hXCO-6c#6VBfYo8ioF5qf*}2 z`iK|l;b`ZDjvnBkEq}?@SP=iM*U@%4Yl8|t$u2FbT_l$)kWkEoE#h|WV6907WRegP%_{O_K)@{Txu9v0cZNB<7!Ze={&@sNx?~Cf-KPm zC9&$Vm}%np;)tdFXJ4BVS|OGAJoE#~b&^r0tv$*>OV-wYBI>eB671HJZ7s)1a$snyG2Z7LX#9 z#)r#WpEUwkhBR2#$W-FjF_J_<@RHCsFcLxuP)Z5@4E-u%2LqgxS9O4#VzsC{2qUs8NQm}`Rci?GAPYMXF!Se7 z>)P~>U>E;r1ha{yd~)5T*>O+|VO=G0PbZ|wWz+FOdSDmF-gg9)MuJ8mwGT zVkUBF&st5TLgo{Rz7|WfC7oJ6&+JOAq6ah>CmN?61aNYqtwMwklmf}Pzj>~ZoW{Na zC5Hcuiofu#e4xdzNF!NLRxLKf*x>56#Y^B?r#f)>EtUBA1Zo~=&5TC*-%!bz?OP4a zBpd0P;>%NQ`8T{gi?Kp_S)e>(@`AXt%{|!iQ#Gl97^}q*>*x|2@i`N*uPfV%J7T{g zsGd`|KOAr>M;a2fFGw7RFWw;yjr-C(oU;u=uy~}n1!Y$5&aAFlQd+dx1*5G^9*^g} zUrYnjqYpXDTh_BStYA-H8IOt;qaPQKQz(m5!sAw@6}T<=TDk}8^U@vd+4+h}lJw`4 zkg1-EoLR8a&hKwFZ$^vxWVBGIo{KWZBTpiL?c`%$B;G0oSguAnZdPhSv2!Zj7LHv> z)ZOK}&EtsU!j(Zjcc+fnp1nlQamsGrim%^L1BBW-y|o-J5b57rNpCR*1A*Kp>Q5d2 zRG;Tpa?X2rciczQyTT2K2&A*gz1-n}v0cMu1LK?+QG*^p%ccr;y+H1r6luBy3M@d9 zicxJ%DaPGt1dAV(tCWMGxJ2U@#@%J~$_+(m zyccx_^HkMHBUQ$NPL^RwP+X8{>Ie`)k|m?slRob8PBHYMLeCf-cmAFoe5*^w&<;O5 zj%74vSj_{wz}sJ>n16Ub`X+Cxj^O+TkB`r|5%kUN#YX zF8QsE2TFVUf<_Yg_nN}8IlOp6TqBTmH`b!=1}Blp8U0$iop2)E%7kWp!6&|i)CGrZ ziQA0qkptKM$qePj_mmzqs{Ro{H3moCeh!v zldPtN2aAOhABTAWqt2=eqXQfEJ4xTm5ct?X&?icqk=)k3(}Os^wFLsJb1X#g#|@$$ z9plt85nT%ihHp~#5KV{22OfR>B^a1dl`B>ebH0#bjKr`nF!C+80@t1)} zR38r+6OptGkq%`)6Nh_<-4_@LuxbDQ23GwG!~9Fe!@|z-zhKpW_l5i4$awyDu!`|N zecS#Qtoj%C`5(cme_i|k4;c^Rf9G`n1*`s(&HWExRqc-_op0_h#y^x^09MUT>(X0D zqM@h|u_$;0@b!o@D3qk(B5N%BFWbkJUlo;=UY@3A)0{;j2rG?Q)zvi>(hLG>&^6AEnzp;m(bqlb=Trw zzqWMVJ`WwaT1#(Xj3=Y;*ZkVSM|SNku75T4Qwp5rzT>Y=`*L3Vq~UD+NPG%6eQy2S z+`GMy^?rpeqwhY-yG<@!xgW0E7yq?#IQ(_JCVv~^21SzgV$yNf@$~g;js6PQkF$8w z0Z7v)H>q807cOe+o4r1wvwgm4c$u;muz)L?tj@HuhYO+|e{H^g9e>&;aT!yH5@ZP^ zVD~D$=c?OJQt*Q^eE(3J9KyGUdb`{AnICXZThHhI<5Cy6_f}c&y%ykxs?)Q`A>#dg zn((q~^Yg7nH}z}=|EcueT`5!rkV=V_%{7;-Javub0l3Zulufa8-hwR0l`IF)JNohp zd?tp!wp*1@z!diD+pGatF?JH*d}bp%vBKhxdk^EVLK zK!g3>-yHke&FZcR8zbM!@91}@#KkqEj`y#c!5DX3z5Fxx>2nR-+%GCdi|V{t-*wc8-Jvz*@U@E)YTahFwEc6%}_yce4Sg zOtPMrYzq#m;=mgeh#{B)45Ua$7LJR@N~ZI4j2L@Qa$yq*sq3~8hwlBoAaC!;M=`;g zt9DV?S6hBOV?P97PAQ{SRaMUYRKG3{{^!$xleH<5XpKl=pk!}lv}tQG^UoD`8wZE$ zv{Oj<0k}aTCZhDx%*#tGQioiC8g!Qf@vGZKGntnDuqIECo+1*vqZrk3_(k}SOSI1Jc$G$ zMXfvvDJBvS9cswYT6EayrNZ4mhgl>M;YtM*=n5I>P!u~ zQ{`E4(B%QE+&>9LWJ%GVFei2V9O<>&ArmKYgm6q5!Qb^d5&z)ZUFh&=YQ%2{#B777 zA9n|K{U*)~aB!IpWzBLqQGp+q5`fu3ap+4#@XhHhscH`RFgJ^8p}xjo%GdDD}v zM;hT-+?hv;g@SWQ4XIM3B})}RiP;Ke$@CKysDi~u8X?Ttn~DlMNdUz|Lk0*!VnNDN z#K^L}z$T}?z@W$bKN0zA&0ZKYPT!A0@U(3>S4EPxWZBf|2K*ar zQ^c_MF6??2h~zb{efj{Swrvlli?TxMplkjWBIw!Jn(5^T+wKM>bnBV|7I9S;4E}lE z403s5<5+cmc{+$P$fr%%RQJJ6m*K<@V%Z}^Y+Ah>ZWmvzvfuYY@uFag*RzjmPExH? z3HOP(?~*~s(YjSFOo;vJ%*xZdymZ*~dGQ{<+w1v*`!%;?*&d=UX68MfUD$2y8NIEj zXF@1v)%$5&c0yt|8p;w@TM^|=LQ!lu|5}lQ7|FCL!u$x+EkNy!p|fxrW5>O++kL2e z>)uUJ(fu>}dGZRSrpogUkhVbZ;z6>=HADa6kXJ(?fU^+SJS^s$Th&d(BkKF{qcHc= z6`d*IYlcuNgKlCj-vR5nA2QY{hPtWas2!k@{yOIgG8VaNnX{piHxBIi%Kq(AH}3^K z0F$YVYYJ`f-fhA&up&rzdO127&-cVRD=$@OBGna6&D$K4__pX*Ogn`U#6dr0Va(A< zXd#wtvzd6F6oc$&>u&jwk{Sh8y;8EXFIGB{sPkd;(43IHLOIH`J)smAL7tNXD3Ro;{cIAQmdQ-R-g$)2@m# zp5xm}7CXaPl{q6W!+bER#WW!0HO&sXVBRnf542VSwW6qb1P z9cz6$M1HExKwT9UWWE&js1tX8lPOteLc~c~%b#5=l>`|k`RLIiL5E(P6y_v8;{bSC zy6F?poL#%PznxB|O0zj0!)Lh}EL{<6z_Z++X_+o4Xn+=KoY}q2sLkWzhqB>MzsR2-3LRnrF$PYA{ zs&$4rH4>Fz_`p~$R>4rQQx`~?vg*RUV|W|)L(6tFt{k`Q1R=qihV^hjIn@d0`x%xKX)~NCRbfnFz>wGcjjwXzcQkM#x_D9q@Vu^(&Z~lJh7ao7 zMPlywS*dHLvv$z$h^&MM3g@$E6!kjnaNXOZS+5ZEp-P3R-^rWYPy0o|g}*>f%SYtm zV(SsgogaVHXs-Rb?6q>sP&oInrLLjEvTJNXUMaNX(3v@&r~_S%nV0c8%J|Z@2W^hp3m)ms6VbefB!}E za@wvV_f@%*qIiqx(w`Ki^wa?&yLzWK@J*9@mrJvpU!9WQzIn;PhI2A#HSclWKTNW; z_DLAoT_srb&%Z|K-k6BUsX-zg8n;wHk+*b(cJG-fzZAP79Xrl)D8Dn(L> zn%p=_x#7vYv`nU%*M?PzBWwcN5Q5z%PY?_hA}_9ZL!6_bFR75@U2!-V8Dp(yc>A(hQ- z5C7ZTWlxvUJ#le^D>%|}>SIEYa;$cunu{fE!$NLKOxREG*2wezU_=rg>h$bf^oh0x zwpXTFb_UzqKwjH%C_<$@BYOs0r!b|l4jJ^(MyOOS0%3X{f4Z zcEX6Affd>+F;bjrrR}7H(2@1J;;U1v1eEIlW!Tw(wyfa5Y?sL1mdpfO#XSkLZwP_m=@0v2DgVQh}hVr^?$5>`~+{T3{M=G%g&WDnH+?i-Nn| zmFF{E6OII20u!2^6Bk#j22LwSe_yBt96f{e{qg$kO+o%jBU3mqo!b{>9ZAyH3jBZvDCEc=TRcMTG>Rn0(n=*y0Sc&OgAC8!x z8wt+5N=IqEv1C3i*Sif#o!huui;!EY_~(QAVq-D zT#24<_@TV3Z27xbD3EA0ly(Yk$etvGkRB{R^%+e18Hrez!ou@)JqB$YcaUE8P~2}? zjs&E%3mLb9?$b8C-vp!+n}m~3z_&n+xK!w*`xiE)xX8VF~twfSdPu+ZEH})+#Dqa()da_@#p42a0*YFaPX@}M)mK3m( zr$LDni21PK**uFDsQIw)(moIIWSquwBGVvD#t_dIq>wz7-v2NJl;M6{AtpTS^ z`FPa{L7?BygP+w*LE^ruwms_ZBMBG*D2Q{@#VyvE4MOjr_sQTiD8t^ghtBp4LZ}(y zq#PZC^avDE|6*v6`9d!aNn!X0mLR3bI0tggGlJmy9(nu@x%2f;*BC(&gqD~5%)~{$dV>2cMD^41(DwbohcbSz6%)x{aVq5nesy_~GQ``$}la_Vn zqqoHwo|^>|DdOf6F5=VSBTZGp;D5Ff?t}))v-VhGXPHLug z3f^>$V|jl;`cLKz{8%vMm%2k$JbzI=@T|dbUV=EkzqO(0wW=Q(kIOFb*bB8YB!Lsz z-&l{9)=D!iAnC7cq;}AFPrB$w%e4|k#zd~$w;{nG<)q!h1Aw6O0rbRHn@H*g#vn7` zvCE;JFF7il98SV(PK4ge#p-#t5ST$D`mb0IjE8O}j$+wU*jtgC3SX59DE6!yzWD+m z8k#dj*i-gr?ckC!#dkXlx9s-fz@THrfM9>uy;3-|>N%6TR1NrGW7*(RdC8!BM_)-4 zLP335YA^9$^+^0`FGe1p0RW(12VL2I` z-k2i6#z|x&hzO<0ubJ%XX&6nT77kjX)b%H=z~?fpz?g}sPlHKlYFag_kZ{OmKgsXq zc_~Q?RaC+gucxLU*toadWL;mA`t*8TAG;90l!6oiOV2%179dxQDxZ}q#iLDYA)$^e ze4n=#0hUVjo(h5NnukpGnBG2+r6`pBT<3nO$hi+ko>{7At{~+RN=$WL02^&QN-#xu zg5fZQUY2Q|a0uVIzlnNgqf78dzY5emExjq`gI*$KKIYiin(6I&R{)I2jYrD2Lpz&o z?F1hI1tZrX$06qsH;&L+pNO=YB-eD9b~qRS6F5<_~tXH|b@bDZ}lntSd6Bt&~Cj#1@A zRG82A+LjWVNg(3H-zO?8z6LrKweMA}1%BoW)p*}pIB>O?fgYCjOIt0#NgTZVLQRvo zdR?`TiIe)*ek8&wPSIPH*xj=lJxql06m!KuQG~Qi_fCO12DmE2@oqg?RLydW29p~e$K?DQD=cih+FR_@-R|~UM zlV?N~#>;LyhokB#(lOtDUvZ-A^GWKbkH>djVO|}Fo@Pc7py}&0FR)C@-H{)51jMrt=d4)f3&9f!O?DfRFx%IOW2k%Ud3!$6%aI<&of!CT?@i939@-#3UHgt zB}bQkP>dE~IYv`iw=X1Ehe8QCs@1~$QAk|fa!F+y>m5|_abA2a0C1q>f@IBidE*Lbeq1 zmQKh^MNM~dN~LiTCNOI%3ze(XwikmFLs$2wz<5y9jORb0c#-r*|KQwxd}I%81IJnrvSujTC@ zT<5mtFX&$I`70;G&M)3ogHJaA)Rn_P%joa0)m~VYvHTA|01iB5FzMc3wF-U53MK@Z z!Blj{0K(lYh@9;lC6xsrS~eVaO-hb-nL9U2P1i-_R?iWgSMnM-#uoq_qwde|pZY5$C_K;oXkZ9Xt>>SE=u0ZhZs;})ZAHR}&J|;*nBY=A zVTLon1Q@S?r(r)&s43R9nHfR@2Ah@p?lO!EZXcNx0Tmgh=Bk*AP?SVC)tUYj##>{$ z*4mzc*mUH$B;^HOJQF=I(q!tlltO7J>i5LDc#4Xa()gk3K_q!7w7-8wqqeWGw@{QTG(CgB15eGk{2q?R3!8M$|MLdbNgBd$4hO4lQ zPf4a?zCn+kUV~dI$)8YTR2!~YVu3d+!hc=bL{sqNU(w?w1H|iM3XLg@V~PLZ$Lrj3 zrE46sa}+D@!j=(B>4;Z^!VLj`%BhJ5z^l-(gpWbgf22wHOgea>HJOoZlXL>gm3LXq z+D0y8lWAz1N`XV`IP^087j(fKy!wBolKiv(|8FV@6M*wSRTAcZg3JD; zTKu1?B>!RH`EM%8KZ3*mnM(5C6UP2OTYCPxyXZevlK&tP{qI#0I~P0&`>&o}WBw$y zdG8ZDgX_)Vc{Q%o`&?4>YZ2e01*w!&K$_{pVdtM0uQ^1V*z2>*Tykn{26g)MMol&x zcwWI`=E3|dhphapgF3#e>_N|sI6W6$JH$U_+jbtK+qE|S-#DJFE}Nd$`&v8wZT8Mv zmlv4d8+M(6KPIzVY+47;036|do!f+*zx-{#o*>vd^?Dub_1Qm(=gxm+6J|4h%{h3; zZEkg0eRa0KpHE&KulKZjJ8gfIw!gg`zsV(3V-^2)7}e8>sULc)YPYxlO5ZXqyE58x zcPjG}u=hyNE$`6cQ>&=Ba4V9_Iz3~{Jf)CzbwvGq|8!eq*SHzDxLUB~fpW(Zr;Ay& zG;100XW2wZwiyxG#Ot&r=kzD9f7k3C{A$`Z>4vC&uN@r-^8ihOZ|*`y)gnRJ1}_3_ z!Ug0SQgcN=Gud95___mfiHN?>TwJWoNe!6mQ@(}mMo=+|?IS-e7#ukyY7w5B7lOH|;iSn1ya^{z5bc zL;FWiSRTK6J0GdF-3zS3>pnbtgHCjkC)=65)00hr{mh^nS_fOr&!EFkIj6>RMTq7= zrBjB~E6k;EnS)O__VJ8H&1-ZKHnNsbz9>rSUlkuU7h35{OOLh)C#u$XYmYR z!LtZxft?A(TEs^N(ZkCw;)xyYT#1ffg|gBRAjx=ozA$Thet0ssto>>~cLvt}&bE8ao^Wml(9tmhIKhqH(JNyDss6cDM4qLy~fI<|0(MYWm|^LrcD-V4-+gp8lLXzcBBPj>%&%Qm+93i&1Hp^nNAxda+xAYZzsC`u)v22OkdVb}D=+uWOg@9GWmK zqy0pIMGb=`0e(e>Q?1?9Vc71x@!ESPY|ZJHKt@m8Wmm-deN^6CKB}mn%w5lcIzZl_ zgigGfpRe=#s&(`k(3c*yeih$by5V~V3EPZp?cE;7#eAp;6S%|tq9^?Fc> zxQhFRVp8Z|L<~3mmr-y|<2Q@><-%^R$8HO>;U`Q9PvjqpVs3;x`Z&xhrjUHu8XEijmZO2q!qTGXls&ml!(Q=eBw#Y8Ymd{Q>?OirOW~}PJr1vB6EIQA zX6mdgGIMAYTWLJTR%JS-G<@u91aHLS#iD(pO3os`wma#J5S#CNJlwI7(~z=S#D-eM zq+D58Az9h)RH7_&h>CuAQhUVETsxf&1$ij)DVur<7;eWD-BraQFY6^l++;9U6v0(S z`9zoI)~jyEY2f%R>)tT{$!=x{a_}I{ABY-*T+rzt0-qV$wfOzfwK9z5y=-p#|AxV> z*Mg)TWfyzE?Slfzi{FD%4@ejAgL@-*fG{6}N)?~@mH7Dc7JR7t?HeQx%1f~Kn3;l( z1W4yn(Xduh(lT~VH=RM-m(?=PQtI9_qa~gcs-MA`{J-nGWg;{p+Xae z-eY`)U59xb>bI<)G!MI6ZZ zJQ+eILfBugRRvcl#STn;h*T(<*_QH(szkGk*scm}iE1=Bsj>@!K&Gw;tfvaxG!t?# zFIX&#wq2p>DsehI8tE@#xP%wGo1t#@u^ z*~UIw@c8mD^&CEw8e;4eGsgJN0UD2=)F$p{&zdD8Q9Yx!^^Hl+AT2R}@9wu>2o3xh zf3&+X951v&wUwt8ul7OdIQP!#WJRUGcaT~W2r;so!;Yy_fCeRplY*34U~CySpwqV* z-{re78!*8+r{?$WIzWK#yWy(mt;T!ywsVKjeiluXP(eUG1ubhB{CtB|JN;rS>Qg`c zVg6LUXiLnc`={5k5tQTC>(2wmPg&`Hrbzo$;}LU+M3=B_p{SXJSAzjlfDpR_2DiSysX1D;u6fy_`=X6M&0IC^o+;I{ z1`8c_+akKTr&O$Wd^b8po-o4Vv++T#YO-ZiY)n|mSSgO2+d-{v)%?`~@-c6>lj=_ZIWlN1hy?~H` zG>7=GHQkpy3wxO0%wr%lOQ@nEJOB_Iq!Q9LTL03%URIIjYs$q~vjjFI2~;?~GbQ0W zQmMKlLGdifphh^K72r(m7m~x4K6RM+gv?-y!hJp9QW*2ke@c5g7Wy_BN@A)Ds#Rv> zxG5Qm{7(*z73Cm%;!9&c81`lYo)8K!kQhvD=@Ki`EajpB9BpY`Y}>LESUZTqQZm#_ zf*!G_(+%;@2o#Mo%CM?}-11xcUbxhC{x}DG;a>(UiyaP$);p~+lSSX-dTR`-oF5HB zO93e+3-s0My&POrr1g9&FC)NZX5vjfzW8DdClck+%%a53mKxg$g7+P%X{4E;vNXhG zRoU+0xHK&(5ohj*r#wh%1#25JH%7hbk6lYjj1f#!d~_T(>Tjg`dy~aAZY3yc%g)GC*V%{K-=q-lhx(P*I;Y!kf#L}Ye(|xVDY6C9R>;M~GWYgV;tn>xS>|<}I6Gw8^LLk=9YsV^rN)3Uy#g$yI zB~mKIG9Ggn6^ooOjxb4e2mc1k>6lkDgmSp-ur}C>V0TJEFkzWsu&C5#iYNMbBs;df z!3{|SNpnJ)Xgj^KvF;C% zV%Hz^XOpK;tvi-To&-iB3KVA!q!m-GttvN;2Xs6Cw$=1O$3e?LoyRNoBH06bQIogd z*Lt@YIPGFJ+9%+VQn92wN3znzv#iQ><+TY`;#$|dE8vV(TP#>P#)zcwQJ(S>Jh?Z^ zB|Jh7V-lj2CiHmv$s<`u*)I*m1R+$VsgnQ_LgnIS9a@a)o&d+!M>QjESh65AQ1#0T zaPBUHPlmFAbyhb#@TV(S^gR;U6ltRe=GO(cBnvg`ETd`m^R8%y6xKjYtR>LsmA35D>XQbBs)qaPlc=w&(=ZcGbBdB8xzAAMqsuR05x5SuIFD zJXIQ(k|J{wPi%CvC{fkeN$w3r5t9w%*(vpd&?OR)#j$_`MYg^iP> z2XmZBPMxm7Z?_}J2m;Ao=0r`3T+K6yUiQQ5W!Uni2sSmO*sTd63UmdAu&|y6IEE zj_v*;%EyY28v5jh`1|;0ugy$Leu3S0iFN)}hScAkWSGpo!IPj6kFn)B%1!w%^DSzte`WQ*EDAAmB1Pf8T>G?zZ zQ2uql$Dc?7^Q6=<>TjvdF^|sv=b*DVt==VR$Z>qhbuJDqODqd2pdIetcVg7DR+ExH zY>&K5r>%nT)S3HaIlka$*okA#*WABa9rTs11IFfEjKT#wU=f~v#s5s*K zbm-xkK7`xO@636It20_SR8*xY5N6mX_H+*nX_BQ<{*9n|CC?gUJd;y`-^GjrIl_n` ze1)|hTz$-vB|rn9pus31e!V|?-#OOd{<$L9e)Sy4lk6FpTF5)tci$qgB3VifNV(Zk zf@rWKclJR5X*p($lnC+CVHs$YNmeG9gR{0{WQ%ftMF4%4mx0w2XLfNerCcb)Mm`KMVE|D zuWKcCC~ssM-wh)w%oiw9GrJuiI|eQ;u_pnV?O#c0mcoN#=?9lgP7ve|oFj zin3p+Chnj?kH>Fh3&Ypc?}djD_Hn_H^n0;?Bv^8MV8xf-iWCjsn)qT2Aesm#VJ4Dt z&TBP7nck?o(`+z8q5mGW>Wr#5*6S7- z;Nl@WKjpm(QQ&{KHz_*TljB^;5XWY_=T&7=aobVC;E^AvJLL#-GDD}fpvAGO#kz3f zMpuo8MOh5_OVgbv0uIyb4UvW`E8DvMqOslxE6MR0*$GIMGM4hRL1xq*B`>VoZ^>ka zpG?(H5Yy7>+{l`*Gnm!jE>!f z%(!_@CBA1izJ2X9HjN)Oeuo7zBC9P3i)L;<5Ql;o*uGYvGIIVHnJ-?xZBiTArIV?* zYOyM`AD)zG+R*rSO5ZR~OL_%d_A+-eNLL_^H3bd&wo+hfkXBKVW*pSq*&L|HCJMJB zOE`VaU~KhK+YtSQ!r5(trVm5%rOEg5{zLzDp3pieQc3&t?JEVrdd@8Gl$donlE4#h z6&~tmmI@@fthADt@x5p)wSH}s`U2PBfdBHlGH;`dM>V2@40Q4AVJX%Ob^1=$_xbmIOx^q{%3)Y_13x}YO=T@xsk1IKh zF??;Ot1)A9>Gnr01hP@8HT%8`K+dOU;xYsep{A6hDWoF zCS=r>vEQ4DSAGE~`S(irOLY6x8{$dtQdWpvVNcc{o<_wF&qDZw8;O0L{CB%{@+(TD zZpygcxF?y0^BysY78aG4a*5+6@xkCMMNtHy6L4}@Ll}$gwX}FC3Kz|ZoOo&%b-nZ^ zVeD8GrS7&~bLr(8?*Blhr&`5UU zFxGKc(vM=&K*&%)--#E^jP?L?b`9N1(9E5JU>Y)OH zZz^rJEXsteovei%Lf7@^5#D@LV7({bUA(dqivRh^B<-$O%V_bimk;kcl#Gtm-59DX z7pb1*-CB;-o#JxnUqPqZ;o^p0br|tPuU#5ww-YB5;ZwE@8siP}a#6s{Vjc#4IQ!+t zw}B&pv=3n!<)R2OYdDrLmeVdNV`c?Tv;O(MC17t~>3)0^bvl2k?N&&lI zKh92LVPZ-1`ozRVg6BOO?RY^8v8-3#LL!MZdiN*H9{qAk04L*TWgf;Rw|0sRa^K<= zo=h&jI@k|S3yGi;iR;VVkQKa`(FNfrdGgQS0Bp{6EH!PCvbAMUjCuDL(mshile_j0 zmmCZWS<56j8@vY#tkF1}f1%_r-9 z#6Np4f~rB_xN-nRpu~35dQLBRrD6+I$)*((3MQx?mo7|A%uUK~#=wUt6$#UY!4}JS zHxsMm9fz0bA4E_aVo}Bo8Y-R~q3@kl{BrmrL@QWl`Co}%|1tq_u(SUc;fMKO>307Y zId&}n1i*buT>nk<`j2EgIWto$BVh+m7@dEnuye5!0oYjdi1_*cQ)K(M*Zxan`+pR@ zSQway{@s)W!zlh=xE~@$an^s%{CgrDKmY%9`F~tZ|GNCYgf5nUgun0i^S=|iw)HmS z$XXNqW`B*1+8e4(*yw$f<)#ADV>C1`uKCr)h}o1$Y(#gA62#m7{mk2iPUNniN9{&*eqxTKg0bI%dd1jjK{D$->bPo35i~G9k{rRjo0~}KG*fu{&~XF=em8iw9{=h8XUa*t22L- z@dw{^M~lPFPIIq~!`J6t3;ss7N9)zr&h3rBPD}E~_U?Oe=bsV3{p*{}&L4KYJuX9x zW8cIV-z~zFm^4$eV9v8$&MP~g7l9#)sZ+!UghnFP5vLtDl~`Q4T-@D#rj~HO-c7<( zsL^N`+A_UWPxX)IFAUrE{>T0(fp&$2h+ZF$PmSY=+|Genjn*s7*Y(z2d6k11CU_!P zH1ZJgEh~Hv!FZjlGP;iWn`T>QEn~0<1 z;UAqpKJE@aKRHd7Oz^R0cf`PFG6F`Af2X1>tVa48hQ{|wZexYgZWrXkBuG}+MM!c70 z<7=5t2Fz?L7yhI{?G6t5zbe%Qu032<8Aqrj4f=AV2=!7Xb`xHxEQQ5V% zpcpZ#5Tf6&l40=)W+9P4p@JX6k6Q5Pr#RXgY+Km%Y-~SDtih=JrNtt3Bmo7YN>FC# z<3A(1<9{=-k6&aXS~0CCr$&rR+7(z7$|%XTB_vvE$;5OiM8f=AFu5D2ppqOfk`gvM z_LeMm4$PdGwKMlX6P{5o;-J3=FAh7kB%+)ZlDXt;FB6g9O(`WB zgO265HDPV_%3C1c-Q~AQB)t*173`tug7`LxPu@?RxCn(p9Sie6EFJ9fod;UW&Vp{! z_W*VDNnrXXnkRkTc>XQxWtLEReV8`J{zWg5X!YcW-&n&;8t5`R@%B{3qth#-5` z@v*l8ja#_wh^6_eWr&l9_hQ&!|1enL-CqX$FIGqxUv6qH6y;q0w&)uT$4t#MHgV2^ z8aH^bSyRA2HO^lmf>R?H$-cy%HDAo-aB|&6*QtA-^MeXz0DWsY^zAgBN@rB0l)C+U|I=-8*#;&M9SJId;r93M z>y;FfjL~l?g*d_~<)<-5${=iUGJF112hAAycW)p3r3RaByH_$%n4+5sZe8_;wlICH z9nKJ#EbWT=6F8CiD0rt#Dpe;$|X0 ziy)i^8>7t7^35DnH;*5e?h(f(Tqxvu4^=)d$)+c}!C9=9`6g+)`|$d2XJ@3z@2y?$ zUthtCdOJt#8B8BhsdCXvh)y0aQ5~OGS<*6o=Z-lD^ps6vr5e&6#U;g~{(*8I>V;#8 zD;Tn8@>6slkBd5HAf6QdIkDNz%EK?12QSXRa@=@stiJ+)Zu)JzlC#$4vsM>*lgZ;NQMEIF}LX026lX z%z5(6t?NhVgFm%AJV6Q*K~Q{pj5g8HPUau4xw4fbOuvoCY*kCZT+_~V;!HBV!(Phf zRiH+B5~xggf@fsH0%Oa3`N^;_9O)eo@a8u9Yb8MJ)d)SDCP!9tFSu*yxOZe2LL^qy zCg;^?Ibg07J~tfOk|o@iWK=BOGpC&D{wI>JaY5bC_>KhiRk z5XH3eu_hIo{Di-yP8G%EP%fm@ha$FSY_z9dFN)lf(FFx5D-=Rcvdq)KIZ=1Q6d5J> zS(KnIt`-K%+7Y$LPRoJ9gOf7FuuU4%2#Y>12=y*w;b8IO<)_lrxS^48lzo@61+wu)<0~3SQ zzFYk;jwQiz4@u<)8})IO^vt$2YZGskda=<>&)u*G#9Flbo5Ag&QH&tzQSN-BGY!## zfKfbDL#3zK3Rzf}JwegF?PEm3HMj)6DK^6`fW5nfRqPN zi5wzAFR-xt4&ZM7CNrEEJk_Qh9~aePAQ(VP?}2m3QMfiQ)zhQw z69GbxtG?$Ox@;s!^?}r&b>8Hp*19%JRtE4JuP-lb>3*M7Y(Wd0)_u^Uhi-|2Iz+AU zXf6nkma=dENxrFf`~58bq?XW?i-C^Dl=znDvFiX8OzT6vouvY5;?E8x1rGOudHZj)Va;_3%e0~*v+28Qs<upjX4*C5~Zu`S+Kq3bk-$nc9%%*!Enn zEk>#MQd&Ir-xmRVasm4R1QF8qA9CSkiUt$RN2jq2qpdkpYlryBqi_vKY^u(hU7_^; zg=wg9deGCEp*77pQ-=Wzzqv3>g$jSo6$mh+9nYv+;=$@y9EnCT$CCZp+7=;>Il|Uy z6#|Eos-a)2;~yEoe*SK}iQL0nbsp%zRx#4KBqqDrKyJKX{7Z@0XHT}-yb2X*wvOUf7RH^)H`7Zr~BO_fF)>l{(yC~1WXxuBQy zGT2Tm>=K_k_Dz5hm2%A5TxWC-4!71H3NZ?% zd1&2Of$yxZ@R<$K&SEmYM;7X9G9RdrO|+b+?2D&X0+yD`2#oT>tI8M(o$CW4=i6Ka zzG5ETJRg>Om(&2>4IT~ic??$Jy-?Uf;w5VjWj013^6bX!ljr^VqNt&1)W ztxcDI`;jA$z_x56tTXUIpNj|GB3(l=eIallA9n_}l2OXwT6*Y~E*Fb;3wmlN*-18s z{EFee<|Z|EqA`1#r1%S%?lK9<_m=jxt4XG)zigpMh9rq9R($`*Tl=-BZ+eKyIffHx z{D=I`uogMo)f?3suomI~(Y%Et!KgLdWx&d3_-Nxk{}LPd^LN3k{f%A;jI6g+$OQ?nd+LPg7@41kp$ z6WMn9w01UG5*H@kd~}I(LmVvjaZnZk^nhZ>=d`LmUKmwB0o48g3Nf=NFb5FMUrlaJ zBqydN^f23rWvZUEdjDCw4Mfk=;UziWfMnw;ph&}a$agdqZaYrWRtL<=c`qMpl&84E zYNv3vlS|-aJ|8M2e-`C2Xcn`8sU|p7Y*$G!?W&&-ddL&B=v375x`BmAV+Ik2#ftO5%h%=9unPzmoY5}%7i&MQe-lp0J3&& zI_U8}wkq<2SCsAuWN~NyCnXWg1_RdVU>-fel24XVu#q|%{=_e4jZW^_ze;T@fn1nW zzl)WG*o3$eu9VO=oWh0&XWVT;=xycEjQF)0hl8Bk*f5Zw@zcvNZ-dc7wY! zAfKJl&|GA^9+XJ?or9MXzwfflBCE5h`F=l#{T=ryW;@NbRE`-v~O`aXCzx`!#fyy0b-s(S)vuC9xH5&PKWBpQE|~O zjj>;M*f=Z%P6<(01_hTwf^tzcf)vB@Y-IZpG{TuKfC^$5G_@fSQTRwtPexKPwh$XE zc2N>3Y>Y=7cxXlG#6T7tlmb8=urxcE7`8#80gwu&iMXFxdfUSXejbdaZOBOUs7Xlbpp77D~G_L2DccGmANlChbf9_9Zk_~Qu zZ37Un4FE?4~fR*5FFy0pshLd$Z zjD_I7JaBg^BmrCkhRgZ{IZCeN#UwYo_)xYaO$c%@h{K7*7iez1ecH74;Mn`ey=x!#eO|+kYDG} z7eLPQ)WSu;5?!JpXXA{G;q7l&9)9J?q<q zp{2pbOZc;hchxCLH`3a+=Lk5tKAnTm*~{2oUWb_~TmHd>P<)jfFvb8A zqgNeV*N=UF8La3`=I`cEPRrsG_XloJY<}_?WEZ%*c?&}2w|cT1BOBT~CV5hVHrpX0 zC*9w{lU(<#?%?QKE&v|#J=gwoI%l@Ll06u{bU?=**#ZWi#QZ#R#rY{n9J_=>ftm#7 z?UD>(Q)!~^E9K%uais}RRNM@xm;`1(P;oTV$~^uN*s#q7K_R6jfC9d>eSwY_TJ`-r zj3}l#E0-C+=ogE!h{5pLIm;WFd!x&$eF0$e!Py4k_1C!F9x*i@oMM^|ga+Ik+Sr&~ z(wYPwt@BSo*mg7BQef?&Mv~S;8#LWP?WJ|icr2i%EjvnSgK*J12l$8#MNK6lR+sx> zTFC-&3;T+|Ff6L1#@+anBCtAcn`{~kbYuyAeehry`U7aX@f$LEtu9S{d{bod!Yyko{g<_D{!Ld;mBG% zBx2iZnWV}a(Q%Se6?9ZTppIz^S+Gir4!PW{s%2qZE3Hclc}3fMP$k#KPWRR!OQ5P| z&ww9n%rT}|y##z|2HV~}|$cTWXpSP+sd8CExim>XT(w8iSmbptU5up#cf=<aOJ@Z(hO~V*m zLUHdRD@#%5;Jo_~_a==Y^rHKa)I?z4u8UJ4h^Wo&060e$qSSL_%+r0UdI z_Cl2ck}C*f7xdlPV8Va6YsZVjdhN}++e)@t=VBBBQ}rLWR5wBtq#Wd5h6+HN(UR1C zWs&^`N-_KyA;>@P4LaA%_(6>C)*OF!Assnt!-!Kj=&oQU->xZeV3`8%@PSPyNBi@+ zTH_0j6k$NOyUvUcgQ$)#W(eaXFs+U2VW|9_OI=89GPu% zyT{NXNbHGXA~R<+*P~}-m!?6edaK7t!g6CzBCfrP*dg3qN!uYo=lZZBLT(s;#rEsh zXr{9Kkc1@o6~8dtOGL>pg%L}H#6A#7^E7PH0xY2l1=BRxZ;n5V{M0X!QNq3peZCu* z@TH8~7Luq-_{in#H-!6*Hv}7_H2~VjqL!8A@Ns1=h5VdQ+)R@D%biCMFG%Ub+Uz)P zJwkc9Q16OvYhOSy>8k4_!&OX6V-^wZVT=dN5i^CI%u_`BzB41sMrF-0uPv=HS3=MX zekzS7_hGgbG{$I8o8rb0$sk6jlun01lPoM|MgqlLxgDPo#GxfxC7*IF*`y=R99d{z zI*Dg-AY?2>6XZw*3hYw?3IBBZIvfYN$b^=~xOSKl&ZJu`A3wdhu5Rb-HLg;JX}z?! zRtiN2H?B&FN@5LL{!7Mv?_>F)fDq$<5ciHjvUQ8PX4$r_Rkm&0<|?eRZQHhO+qP}n zSf#FS_u0MAjkpngZuF1-H8V0}W=3S>9Ao5s#`C_@IT~tJXbIp2R5m+tP>^hDt#gJg z{+G)UU4L4fTMdXa_`h-!omR+BR&o%;#<QOv;;d}!%O2eVpA*Gu zLBHExb}oMl1W0Y!#Q^u0ez6ympk9`M+no! zb?yd!_wA4R6zYL@Sp4M+BtZo7VtYk&-lczm*9ZI>$T19n^Mkh8r9r%h{#0ZJnf>Oc z?be@AA`zJT1;Pmr0{)D2Bt_RPG3qFu>AAe~Sb-@M116p6Va04z^+~2olD*}oWcLLb3ce(H?zn7__~>wscDqY9aLZa%K>Dt{yd$1d7cF^!9^xHTO^2H)SWqX zjs-LWlQQF6G5=3E0pWOqI(?!aJtTszjJ^)C_T({!oLt*k-A4Lj;$e0eCzd}Y2`JSk zTm2Pmm9O>e@Vw-A@cI2*6M&!w07=K)F{r511IgD!S2YD83xgaq6jgNOWOy_TE9Hsm zn}%ggHTxM~r(L$e7o0BF1>0P`c;({B0RCsq$vUEJ!*k$y!Jc zC>|<5o>a_<3QcE}1Gt0Fwa&^?{JLebLAps&7hSpqA7EBbk)XVnV{%-sMDUg;C%zAO zPFVudI}v^?9Kg#4uKi&Kr-)XA`tC#za})l^i?)6M18E%sCk#BHM|85B73twVVH*R0 z&W4``cC3Rh{ptb@7#YQVO0y(GG-Uon40a&UyACZcfIV@Umjv$3LF(aU7*7#` zF_?xcjgD+41HG&{m3?OOu6_&}~)k=%e@p$iQ_u|%!U2@xsERyZ*fZLaVXZ6PU^ zal$_Zr~VzTp`daFucI(&@en#Ge2x|eEh?qHQpd8|Ph;Tzj?>u$cJ~bTP$*URq4H8> zhzX{O7%`eDFzETM^xE`5zeW6kY6O$8G-sW??CHiS8uMqVk~B5fZ@%zdSM84eH>~ep zMC)II8#_J6f7shUMC{-2>whS?G5(j%_8->A_+P<*{{zUq z^MAnlu5>oyNm}f@YHBEU3e#$v*PJdQc1Y6gXAS1!odvyXal-fPlN(8|6}4$eKfC1i z0m49__|;}6=iP0kg`MP_oQdK_x$0+qE`651>+pxYS6?RVPUQ|(ecork#lDNbPY+y# zzRz`fTzqbH0j+zmO~2@Drr*C@S8t|6zLr)#XRh1bY;)dHI%?iyym_ymKWBHku5JEq zd|mtemAj_Tj&w~w@)$Ym99S)RxON2q?f5kBNxAE=I>2{+A20w&cUz4jR|Ld*d0)uu z@mP`*6NA^|6q`XgeVh3@zTQJ?-0E~#xv_p+!s?_VU<}`bj9|a#r740LM5*2Q+(&&zs){?*&ow(Mvg08ZTE0|T@Eij_G)kTE)NTQ zo6jL%V3}YCy7x!jLv4r;*)s^Cfez892Xz%lGJe2wI|iHR>MD7E7k6I2w{MSK2$Xm? zcbq-#zO%F*rHKdKxJ{+0D@oYZlK)z{gKhabzmvq$HmOR z^%G+}vc?PS+L1+wdzzSfcMn9$0z#^_Ab6(C#^r&Cvud+4hAHx%IZMg1{&3{LBHNMI z0!=@IY!VQf+R?~r$FRG$0>1Oj=EbJl)91VBLrw3(oc((EVK?LjX(d&9Cw-DxFhH*4 zPpx0;?u^57Xcl+&ZorsX1uWG+WmjqskZO;lI#j`a1fKWtH3be`jvOcu+k6~*?Clqe zhwE;eGWjL4Alc(h5A_+U|KQapVenZv#8+4mm+iK1QMWVe57VA5J9~y}@X0n>=m*A| zVq$Gkm0Bi1%P~O+6au7>HM1MCx@~+Pj|=gyunbt!(;%E{d?~l@Y`~Nhr^tS{9p|UF zC}>C6zO%Xc#n>lnlV#SSmhB>0@-){+-t*DLyYK}P<*hPGw3{rHh=(+t(6dc-tCsTA z(>_IELb%+aXkqXIne>1OWePcEU&+r_LAzc6VdY_yYeJ`>U9W-(9B>eqk|Mrqc-zNe zap{ZQtnmU}Xw`isL`vZVIxTkw>5#2@{CWl`|AJIC|AE;IrXQVoZ>0IOH)Pv7U$g+K zPN29X_0&|HhZ)Sw{Ts1v%1&3`nMMq{L4~g|-AYD=GXu<>#V--1DX<=dU=9h~ILVka zhOkzKNN)d@bKe$4c@QKiIGOrBQh;=Y-a;G;5)4+M^tXK3Pm1EbZ8E=o*0wcr#sj3g zo&Oq7?@Xpx0U>Cg#-C9>rdZ)GsJp%QpKBSNwzSbjx9$D=YMyC3B&s^&z<}c>8L&-S zP+ee_wlv9f26-u5_yfSg$-H@{K=s|+rM*%uu$(IS=k_#yp?q~df2np;X+EKkqBQKy z0lIyaR#>xGX|lCQsd7swrF+f*QauZbuxPKWA#?MZk@26|$|61-F%mD;I?B5;C`Ooj zDb*0qUxPh?l|@4QFDb>>1Tn$afpuN0$xb0lDM@k8f5;bJpj|#c&SK!m18czf-Xn?# zs>(fqsQT+MFT+*G5!Tk)F__p?eMYgj4O*@Fg1Y7`)^C>JoY<(*?j%!xC&BLR!KJO_ zom5JCPI>;J0>g`0xc1CsvWym^qB3Xu?xP&z%SV*O z+VruJ*Hwa;#L@$Tray7{2+)216c2}M!;th61{=*wf1<$*@K zKk>M&0TKHCc$kWSa5tg9J%`%h=kG$`tVAw7jg&;Mi5KXRl$U@l)7aum={I;++13uEofKD70Ohqstiq7 z(TW!8>8Ruit`-&rVSa8d{%euLwSj|{Yr+2Ed0(i0>MmB1{ak600 z3;)pGn_L6bI+q}xl>O}_Cwdn>iBFJ(<3)URr9Hk6Uzcw8_w4Q?=9wyBWkawENQ&0anTFvC8YGwxrn;>_hmCc_>qL^ zI#=Hiv@im%gC+BDiW_(e|v z3{N}12;xKyKa7A-Gu+#j|TAvRtm4HwC;gA9)pb{k`P zT=2s3H4-CHQAg?j`1MyVvU(iYrD`Y z`q`X=Khla)%qc6RFsB601Q-@x1R1mgfaKcfl9Ce{wNCiLsMqstMM&hqh@aDjnTRYM zpOlk9k%nRwZ3duZM3~@HdN`g?4mJ^-K+YAYP#Bb8KCw47IU7^}s@y43q@S#K7S`&N zmX*yyYKGCMfGV|5l3I{M;VSURtnpDi55zEnib!9Z@SV)%bRKVluaCy&~&R^+tR{GIdrK6Yrbk3W!RiLXr`ItW9YHX>1kQBs)blgQAIB{X^F-I zEG!S&S`){~h%~JgpPY+>3SSI%7gD%0{-@`Ha${CWc%{LrJ$&^RH(J_4z|y{{dfn^Q zZ#=tr`nlHQDekQ))G6-d+WT{%*+TF(6+4J7ZZr*(r(3T$#ds{AX&nqjSR4k>lVw!c1c;FA%%=#r6tzXj`3NiV06aoPqHU?08RNgaRVw zRogD`-RtKPkXfczOutkiWXz^epb&IFxGv6}pKvm7S-=)*u}_p+o{rKil04SLD;8Fu zY{CKvZ?Z&^FzQP>oT&;fh_Rn*&q7#?;GpSVZqXkUDZJ4XxmPIYmJg&{P6j2y0?ALs z631E~zX`>ku_V0VhE`^eN%IRr4sE^<=Nn*)JGolS3@zywJnvMZ8L(pB6z9Y_ragzT>*_`b)g>q#-6kDu#096t20 z@U}FkubUyF#hO!OQFq!EJQd`n8icT3+p2h~#6UOaQ5t2Nq{#5BOvEaG6 z!7pZHy&gy-IB8kJrQHWg0_RXx1nE0R`X6W>q3Uu(VEwmBvMSg59+Of2QKq{FkTEXo z`Bm&|QKn%B0wAoj{2=53(Xg>nD4Ag3#6(EKM6M(8{e(qoK;kZ?Aj%V{zjSey8;5CSwU|i3oSL@1}vC@fuTW+o?TYfrX9Eidik%m;ih=$I} z`&Wiq*aU`>9;Nn|X_}tP+{&$D*u_MRV_!wpCX(SX64&CGdRU8O9Iqy&Jw?dHPK|VN z8z3;P2-*Z{vZSluUi|7pG<0$7$Y=&zF};Y|4fMQBu~jLFD|(_$mrF5=XO>MTMzT!O z6bVMZe51OGPQ4@HIHaq7`gReM_h|AHa(AJ~u}9TYpoz3_0cmR&+1<^J&$^;wO&anJ zhZP`6<|&s>;dj}~s~izG91krzV&+y}uo0Gy;$P7!6=$yeV$8pdLlUWgFFobKK`}jM zS_VP)R0$t{jWri`E-*=k#5;^#6V}}Cwq5T>`1uMBN0bzU^gIyDyPk+*tfO~rpKOJ| z{m3bp#U`z%y}M$W_1MgJu;ZlL%-M2?hVMOZO&G|Obs|xvlp-OQ(2Rx_k&J55$@PU9 z;L=h>EmG&XgOY>F{aN!+(18eICZ==RcY*mdY>*C5@FDEwv66m?$j~BEo**%RZY|u6 z78$cg-8!}+Q4Mq(_7^*irlqX(`D0EgiQhq2!A8c1kK`oY<}LwAQ|%v z`e{R<0jR0uk<>|_Xy&Qul-8M|?kR~!uw&R$)#d4y5OgJtti~(o*B5y36HN%rjn`r0 zHo4x1)V_!dWR)OcqOIjI&a#$Z6F~~X%{YS*`W=b+S-n;3msJil2gk5ZAipH}D|+(- zCw*eb{Nc+4@j1iYHYj17wf&*d0$jAH0l2IF$rk+{ka~Dxmc04e{Mr{kRVxB2{s-{cgO(wE1D;q)|e-VQ~U|-ZRQR8hrKQj zg}4_C8qIM3bAw%twWXcUUrj850McV_fW*_l zpf#Y76c3JcF>YF;C}*U7X||;29k?`!&J6Eze=q)1{akrvwDmAC!T% zd*@N%XJf1+&=k$TS}dSoQR}@~i${{gJ4VdoaEX(wN~=qje^d?>tHI~`1&S4<10>6+ z3)V^MVRDsAB4-qEXo`sBi&dx?)HEYC6`ne0_OL|V185PHMrTndl`51YP$^ZY^204y zvX2gBEt0M!t(p4s7z_oGgPXw`_Z2D>W)?B}>ZIz@mP@oW2iD%5I_&@MV*Vu}V?L)L zWa&~b7N{Ruu;$xEB)^2$Ck>H-y##yRP9w)6b4IO26+AcUv%KTYz-q0Ma?PysgYnDg z(2QI-hS)zrE4H$zeRb12g|tG%N!c-}0oFecR?NTUc^2m$X*-+}64u;%B^jxiq!6+H z^sRbd)45rm$&!uFzRXPLmSD~(NpKuHBf0iPkd7MB*roi$-NikQ6eMG(4GDZjx6GgL zQ5SUUbHlj5KY!6z$@;bpmBB8g|pWCrk5+DSDsec^){>$WZJpA8s`!RfFmX*prn;f&$Ce>`HS}l zB=+Iz`Ky}Lo~Oe?B5h5no_XYk`Rodh)EuSMZpWfyupdE(j1p*}in4NZTL8rV&?aQr zKRBVXz#W9s(1af{EYc1c`ZB?g*?>rk-9c>@T6@m#H4SrwKM)ezOD@XaAl#2o?mmiS z(k*j~!|73E%nvj2C47rub#h(qWUgsjdcrkZL2TpZHuK1qo4P2x5hl>O<@9cL)IVSZ z4ngwc4gE!kegMv6l$YfzqsK}2;3gCP?~l>|o|5o!I&y7EZmHVO@hQbbsu`P0&E5_< z;K4HkE`l8b=l*c8nwH80ZRR{e42K+AO42Qm;K_?@FB?ZB`3mZN0s3Y0lkN&~!@!mq z|4MuU&OnLv@jbUiekiy39%Ie5si)mI^8TvI^NoEsNuKUhkuY^ypHTIc2(N0*o@HqI zsEQc2Hs-s~kULYSt#uE5rOnGr-C*Y>Mtlj?BIaW2iV2o_&8ml_Zo zN}iX&EsQBJ?xbPS$j9nzcQL}n+m8Yr5W7O~^4kNnk5P{~9I57F_DaK7>Dn42{Vw3{ImuqV{e>AgsvIv5ezEhanUCfF}HIl2g{ za2q^(2zW_bYH-dL2e0&qg9z`bq_1nxUj$ejJD?M0I4uGmX`Q|dgI<(EuGtTW@}}}< zgO@2{5(B&g1?T(JtRjI%6;2gUg@@a7H9@=r6nVqCL>nW6FS2(U zb|rh&X~= z1R#U1LLGny6ky6J)i2;20{ubHCnM_hPbTREyl84H#VS*aG~l%H5~M-GGuJgq=Es)k zO9W5>g+bJi6mEM&GD@n3DvQGc-Lzsge$(4!w3ur(6~v$Yg$4aVZIsVT+JBCQ`tK;N z6V<6qW7+9s1yDq&4yiR9!V%!0^4Z^kj0TaG`VH^g1*jG1AmS;(3@Q!Pg?Uk$;X6mo zJ)B9MDkh+vGUa{q_2oz27MH^cQi(@2;Vo6h3C8D1JVCDPfSVyg(aIks! z=VhZmm5!BK^Sz^~TBhB6wBY3hSBaS;F7N(e?>|(qOxT@-$kTMd1g-JLSPL{VE>adUvwq!7^FBsp?dgy;AA{klM8TjuXTjM}CT5LGa#( z0A2yM$F(uZ*h;RI-J;95?zdqiBXq^yOoJ`H$iFpO`6ISy_8qql0YrWIX!ru7w$VS3 zQ@&ebndztFSG1S(4Ax@-3{yGaIrSG-I(C~#@y<HTdKNeHr+nqf@RymGW^k?^pBe zPrEXtfS?A<{;4xiC%)L(#~d|IgqpXcE4KZ1YCN_DebidtER4GHdK_c}8q0+%)iei076y&PjbevyvH=-PzDR2 zVCNtxXkfG1o%AeyOTJ1<;1LzJ#{MFQY5HaN_#rZrx^lV-%yFr&)3=g)L@kb^>QoIs zEn;?q@;i#s#%MHdkZR+hFtXCO-#~=%D)0Y0diZZAkd>W-;Xm~7-=UfRC#K+kd4d0p z9{yKg=Kp{m{`XAE|Bv+WKXTxYDfl04@P9Q0=|mZ583_LG(98eT8f5y%X8boe{WnQu z`oI0c|5s~p=^v6fV)a83OGnZm>iz+V_%cd}j_T;?$j<>q`jx>Qg{b@2;T5nNJ~aW{ z;w1Hy4ejlw&eC83JY7p>BuJ1r1aYP3JkDo!+>HZ`8Gk>! zZG7CfzFgj$KR+Vib>3g|wnDynx%ai+b@=Xg?vFQbrcVyac%sSa|KRypem?<{ynnWN zxmt!8gllI8$jo!jMLsvxf;jc2=TG$@q~DoAiaV^9z1{7USxs1p+6nS8IyTj!Y#q=mi^gJ zy5!9q#G-||EHL*uiwD1TZEKOxEh|4RZ6G6$p*n){d^_-ma^FS(w}y{hZEtI& z2PFK)_35(${sk6gM9%HX=ie!TczE5u&F|0GEiYC&6+%5bxN-*ya|-88D9?pLZGSNE!nc$TpM}4bmh%q;3(MV4+r!M5%g7vomm9kyaRI4 zF$B&(mhniVkO_AkP%u9CpWDJ5{ZY5;q9l);mGx0am?%pT6*-6?jtu=@_XLdk-CVE$ zGsV)ji&JNvLbhCoUt&H%Vjlzy%-i11#Fjq&c*{)3925isG zK!q9w^h0F;S2@gemMToQTzuI9I&vHYLIVSA$D~8k*_e61%Jblb*09a|36P}Vgtuo4 zAUk59gJtm;R>$~3g;H-Fpl{^r4O|L#QY1K+JO6clK>wRRa*C4r9tyQ^ zzAXWr{3cD9|8Wa_`a}h9VwW zI=~o@vO>t`&}+!nmu)XI+z6oWA^(wMX(8D0jW`Q_sx;#>Q|`bw0DaFl24g{vAdWF3 zS_RZE~(m;!tE%qLginpf5o9P)t3fJZ>VEdL@GzSGP7*^b=_2_D&d%GVb_wS*A>n3`${C>;wlYtRIa z6E8KX9D*~-Uv^)3mLYG<3>fterL^KX6$L?taU4ZZGGB2HSH-_gSfmaIF_(>$FyyWk zTTDg}$eYNt&vl9weKiLF1Ne~#*ZDQUS##-e!xPE%E=M|`jc4CuwbBwU--h08n5vqc z%j$QB?BVdj836ySp(Rk@@gH~y<>2a;g<&UO0N3+|KubXI37w@IJ#gC()wB7KVt zI>K%lD}sr5?2g>h^iqhwrP{!Wx7(-U#OG4-X$#<#ypY~(u@W32B>YA!m|=lY{mt>3 z@~ImtH<~&ARV~I2E6dP}JdPPvG`L&ZOBrlZV3_DAtbde$XuFza__iD}Z>3OwQ>&7~ zY{6cTc~*aJAf@`5gn?AwWwR_@91ytBoe`w~;18dji!FzI5lXIiLx}DsGXtg4 zRAcTh8(Gv%!BcOrnZ!S5ivx}Vv#TK$5=9Krps>qE!)F&6E1RF0ujBjpNf z6XiCoI2HSfv(BBNU1D%Uit{WIb{lBk)%?CH1dL~7XZP(2G>NnMvhKaK9GqtYxfMRU z3L-J)Qo~C2X$&0lXdMYIH(iY~{J;f%O8%AWda&aTp{fP_1Ka2{ohn(Tom3VVJs@HA zQXpx0?9DEb~a0P{(e-85VhA|e#cW@N-N5IhGFCqCS8f3p<%Ksm07n>#Ik5) zmKRLc2Gc>2MrnCHzo*kpDq{@nZ?^A=ibIA@uCIvs;-zFbKL$rq+0Nx`(qJF3?>y=3 zA3Wy`@Vno?mgHVwrK3TN{iK?;0<*^gYR;4q-$UEeNAOtbuMiFW)A^i!M=6CbnAj4l z;BG}uPu0J0M0Y3O%51`tD;XuTV#I}`gn=Z%$VP=0aHLbWWY>l{oGu3( zJuB6&Vls?r7$h@V0L&%y% z@YN(XS27SCsFwYiBo^^_VX}%$ji&emBxJY& zX9D=ko>P$`O!&< z8D-6>Zl6pmu>~@=DX(v))v}*#U@C~W4vZ=7Tvw{B6OwK+NIRUY(uCxQk7!c zZYi*A+ju}>z_@7o*W0zbAD9%gN?9cObGqcwNlr&CWZ^>$5NNq;cj~a_5)x_ppRmmQ zWXsMWvbiEnZwqLZ;ev4zWrptz^uauT$SUa&1ux=1qWXgrEG*RJYyIF;i0XiN@V`9~ zMD5g-4ii{=iRU|AMaPPxXH%OVYl|1Tv44tV9csTFMcbAadPDv44>jciEMHp51(qOh zCU{_{w$#)fnT-{v^8m`*WAPMKEEK5PEuO6e)ZD@1$87B?EX&)wiUbnLaiOLbw6J1B z?7-EpjT(}JEu$THOie`}c$@#!2lGVhMsV>5-~bj=qQ;3iKr7PtjuDKsRtmzEEfbEg zquLPxEkL2h0}(MzG32pP&#&WLRSt(L-$qjSrywd6M-FE#Mux~A8G!9aJAhE7M?^jA zT$*CUh?#TCsVm5&PvQHa&TP-bhAGf1VsA#X)q8`f1k*lCW2e|~g__yMpSI`OV*F9E zU+I&2WQzP}{Flyt(oB11GX5F+AHD7ly}{u0B!p_NO-mgztez%q{o#+Ih?i$#?Vz&*K4H>~9gtTmn^u3GulQ%!p4pj+9b?E*LCY{?DcGK&&retw-%jE*U4@ewG}wk8x%(D}-(r8b43sF>(k&-PKu5jF^4 zCXbV-FQ-?I$N!pKB*1akL!2COAWxU>i}X0wfaEVjGvH(;BcUCluObB~q6|J;?Tlqd z9cTp8A08la%u%yv5w@kwlQT4)&r{&_nihzy4#cXFnl2%3U%|9B>i@MiReWWGu0<@$ zVf3U@UQVMi2|TR5g0(kd2Bm74$wL7~1! zVPh~Phep`%%pNkKbxt>+l_8EbKQVfLFo{c+Ym=S`E}6mp>XjHPGFGhEKlL_oj@501 z!&x|zT|CN5AGLrmI0JHkLpPVOf5It1NP(lhR8b7^%5ntmiDGUlS$b<;;PeN|vhiLBSn1kxG4@Ks7K-53Dmo_&LB}r

kX}2Ep;NH2+Nf>)j*CcnrL%22IfwO}={50|JN;Q^_Q*x1#4b_yiXQ3^z0@k?sK9j`5RAMD6e;Hl{=P3NE3>;dWRZLjf?} zlUsUANETR8ics$)T+OpT{agDTz-kYklO*^!{SFlIiA@s!*8o=ZyAWfNeom^Je_IRUs#z%p9wUAVMqXrVf z4WyM-Lxx?DMQd9a3GpF0Pq_MdLqc}IKmMq9!>kzi)gRHpLmiv?_N{~KoLV)uMcZ3O z@HwNxQ-&-&Yb4r(=dq_1-AIF?L2s3?ppI`gMWNAFjPAoqkae?02G}+gd3;BE$oW#d z{{HR8-%AZVo`x{U>-)oXlnRx<@=_^&-l{c>L#K02a6FuE0WShjc0Z+ElP0=P;`kog zqVD!#;=}xRFSJkjQFjnr1R|u~-LNB2_BAQ6LRTx28_CBo*Pq3eE@J}8SDA3kN-_BL*ZK}31yY!pD&$`;GRj~F(Mdx0Lak$5bj_A>-}}VG!2z4o`PrRrd~OfK z#O&HUMh~{yr?vdqWG#B9{%={&#WIb~>c$SV8}v+DQ>@yhA-lgD>tQFbhDOL@M>puL z~+@X0p$-(Y6KF=n#?o02yuYm=y3R8|{^f@zH@TF^=i^?rVU5w$`IP2Er%GSyEi zqt5sCdZ6Pygg?7xD?_En{l7gB#C);a!?gcScR;aGWU7ab5P^#pxa!FDh;tx6fcD+GCkK#MU3O8Wb_-B z4S!CpG6Z7!H29efwBmkdgQcV{R31)AuY}bhq~Q`zRbhnRQchq)d8_M)a4mm49_PQn z;tZWPFZwet(McxYg?TfFCpWz^<3BVI7R|6+QT}TkPBB)6h6Dh5hC+%f8<22Kfs`aF zAqJ|7m5hv9P)H0!g-#mdN~T!ZJS?n$6fV=D@+b6EZa(seNGOlc&`s1yM@X1ev=2R* z5a9ua71@42o5{;iR+91KaxA2{xf~+Au4`wn*UUUfgX$Lj<0oJW-5N z;hOLiOQ2?^>V0|@WsdIpO&e=^UPw2WiU|1$)`&?Cki*8TV8xyL*3$I0x?^&b< zig~(BKXW@UX&_w=6izC|UZ8hukCMlGVa?$!91m2K;TU6SvS5_bJyC&%8>&)!vJY3o zksJqL{DH6;|7NV2nj1fVB(G@eq9Hj{Q<>kpc^#QBWNsrHzOU|LECRO8_cs`kw4NHx zwBBMX&F)Whn0`qkdhXA--*}ajmXr;_5p}?ULq+W-7s&0NlXLGGorJDx;F_g^p?g9F zFZlM0i|o*y_!Af-q6@VCO&WGEb`wd`riYMpf3X4#QhHPDJrKYBK zsc6_l!313!_l{H6o?XKbUb zD(CRpp&=+lEWomb&)C)@Ri5`LRu(>aqNnd}r%1~CAj>;ez z(4jMN9K`!-?Lek&&*mAC9y*h#8qmu&>pduM)34}8RWbAD=rgX+|Bp+*5x>+bj^6Bc!y*CoNWBb)_=9JqS%X9AO zWL}+7%ZmPbHeJP1kw^r(uIxcYf{9C6mQtlsR=%9xS{l@woEcZvM7dPnL?-)ZSyD?9 z?9X}B7AWpRpl}>?ArFKT&oDouvsyolpkQ^>tf#Ovg(RbdN^=;S7tK zrBJ-XCG9DM9i*gp@)l@Xq63J&65oB{{0tMr3v{`nLwNgobh|XbuK_2mRW5Uy&`@SJ z(niReV!$4prbC?Yxgw8K&-=&cjj!7)n^`+wPX51HwRETp>pN(Z>1PNxN_`+$tvCF4#IV{NNd7)siCme(#1aCCbod;WA)h6F4qJ+@PC# z>LQyA%6IpZw?tOk^R7~tfaPY@d)`jsco--&OyPrRB1EX%#Ef}Fh+-3F+PD=PA(Su- z#5lF1@(fR-aD`~YSomABP9=|(X-k`{_dq0nXSQ`?!x&m-iHMA^K+7R@&VnfGKlJmU zh5~e*cdtRpRPkPT-;ugNv(PJZvHlro1%3wFsGr8N{8^eFp}sv-r;~)SSTm=T@*bg| z0e7SQ9jo8-vuKLq15RX^rnNucmC*=V&NXh^U%Eb{3C#nV(Ha$5UH0+q=Ml$oLwkKo zu8>+0Y9W=w_yuZCeVgz6VvG8iNz1h@BfZ?-@%~m#yh`=vXE}a}3SWXrhFB(2EqJQc5gjrHEt*<#w*X`|)tUJnBf^hWskkJhEJZJvpB}z-65M1Ni zR;rqok3h)IGv{9|eLevnfuG?OpBlh}8Jhf>kgBUIISR-(gEcF<)vge46YspT%w-F z&=dx@aMP2j?LE#N>bn?2#nM++>zu z>MX590`2HMuoh@Nu@&SqZ|=FRnAp~<$Ovxq4+8`fUELA%k<5`G9-!=X{c&tY9VS~j zMcde1ecmlnR7n++EaUd|t&`|4bfJyJ)|pSae~jCNmnan{7G-CURUWili3F%rZ;=f# z`+DL7EKQ>={@<{me^HKqnPf~1|EWr2{CAe*{{ahP`Y&(nKP>29Sml3ImG-Z5{|#XN zKeC|z;Gh3-Y9!Nt7uo(F{__tH`yZHOKl~?}M9lh!|NNvz_EM_oo*#=%XzIgib=)&w zg4Y;KMvKPN&5NhwUS99K)5DGF8;cs7JWZOBLX`e8X~2Xbb906K{T#EEvK6ysvaTn$ z<(Bz;FsoDj{!oS;^ZpZ2mEDn}>+-$rwd3`7ZKK=cshO+rd%L^e2KRYj@H>U>bFV&! zHpR##n|8O^<4NZQUM`mdr+RCl!kU|0@$)Cd^?G3^@?B`fMNZGe3@ECqU2K5q+()T>Ljw|Qy=UKj>ClOZfP&*WvN*^5M>&JWJR!hv*ERQ@cACL3M z^`28ZoZsE2+}Xp1<4+?O>eu6pyk3vTZp`<49hVdQcM2~tw60r%`t3tVZEr;*ca6_C zgb9y40j-c91>#cI+QzG^{C3Ys_h=@bb{NhCI#Wkxm38V4G0 zMX@4!Ck8@ZIHioLU?xX=d<2__WFc*=X{fD;9X@jLrBSd)j9y=I?W?{lSf-q z2$1j6EwI>`fKtoxw*XtxNouOws`Wqg`y;ECH#4e|IfZpuDyr3}bKtzJ2-GR&-UGR2 zi$tUe0aE^yA!NmY0zkgn-R{D>9&NDQ_~Os*szDLZ?O+x9Wv>9J5xjDGi552xE-aYJ zvl6^TuoOiP82EHcpIm3M7QXc4FGWJ<96~U|lN`|dYw;bBopa=%pYLticgxR&dJz~) z(hu?3bSskbn<7b&itBU92T?>7(wSR-czyz3f(O=!{CRze@j2@0On>yR@R6L{?#%NS zs57*4uX#Vf8^uHlF!^2Ex#BYn%ULq&YZg2THiw9bL39V1XNx;=@DOvx`2oJ7$9H`@ zwj)B_|6(&w{!0S5MyS5;W|gyhz$=ryX5b=tYrsMpgEr;!2w;(W1a|qxi}<~joGh}y zjDeWA8}O6B7aSDOQ4#U>?EvXEOG@;Ezq!GaqAH1yFV@%*_8#GZ7}Y4zUjz*cFWg)7NuC? zHdvx>ZII77>al4DA0FaJ+nU8IXokorxbG(U>;jT&*~952IRp=aF&X=3nIt7oHcNxN zJ(S;9xwlDgux%#a7bv$Pj4HEQANT5z-a|$+cW>4|ZerbkSP1DqKg*dx26OcLXUQi5 zm$%WLX|U)Qn%~FdrFDi^BOjMyncca64E>#?mF0q0D6n2I7FR#2OdDOMAc%%A+yenUUxo5gS%Dojr|E|chzm!-jxRBL7p|i~r(iGrzfmg4pI=!=9)$@3i2Be{S$U~KFwkW{n`w1$Fg)MmY)id!gCHY^~b3ZN`8j5iQAMvaf; zeR79@jc>}4H?(eXew>6Of83O%z>fx#k3Z2%aRZy$+Jbi*?qL)$x$3{6mmAxhg58A? zx4a9Z>LW3QSi_I=(U!gaq!1k<@v?jQ+)63)T~?PeIn83V3LU?`{}cc+_8lvtOeUSV zF?tEfmOQ;c7XR|1xXF$$xmViyh!Et0s0>{woBO2~Y|gI+58I`LQkjoS*N3Mn*}q@d2gB)j1#Hlu!ZdSU;eEXwz3g;)yhVNJwXQU5MSi;RX?y5&$5~wSeohrn zi7!Q*n?`NG6mHp4>TKF!$UhNLD9%x8-3N|A=E$Y^rr$)92F0f$9aw{8r%yuI@=3QU(z-~R^tD&Tt` z5UP*Zn>CuThK}%laugo;j;trfbRIyPE!A5G+Vsw@G8Z}lc~7S{`Eyz3sCVXtKkefx zP4um^4(n1XIt?~3;gY_5YdT;NiAy&25?wn%GL>u%v#JS{7N6!ZjyVWr$uWW(<0k?` zssd9G$(~%zmEuOybelBqq&O9DM&#VaJ>goekfWXz#M(+5WKW4YUP_SwDpg`w%S==c z)ptL8^KN?bvpu1JB4zN*7w*qw!3d4pqs>s}EQvcJx1ssq0b~+8TzohSrFu_fAV8xr zyJfU}$xQ}mNt7s#c5pu_uh|Qr#0AmyjA5T|5Hz48Y9+S#A8&xjN&N@S-!) zLESlVnAtT^t@>hWpP@{0amX#+Z+J)!0`{~G&L!$BYM#L|v@;TQ6L=0?_;*v6DqBxK zV0FjPm{8Rdq5#eHsro-pF_Tz6^c{Xrv%%exRf{IFVaJpoVJm>sc&5p^PSPU{Lcdl& zbw#dDqndaFeJ6R&NRu9z*j4P%DKkFlWrHm49l4%k%db?YO_plJSzIa^pV`T={xYHv z6&!m_Mx)vkaU~;{iHj<~CL!B3@hi12G2osyND6`QM4F{S7gz-wCBTYt07UtjMre8E zj)7HgP0u03Vr}`O#6~arZg*%=svC!=Z{pGo;6+gv_f$1cGIqQJB*4yFtnt*24luxL zGWFtm)`JF=1_opJKuz{PxvGZ;;M*M4GJ7V33w|wE1iIAC0aF7%$HiY|H~EER;V=S% zx6!)YyV$8O4G-Rha4Hn1ffgLNx6IcU^H^VKqGRs(0xD$GREkS5@7Fy86r8Udg7&GX zYmxec=B!qC_J>eyZ#Xy5B({WTxwfK^qf=(iAWWn)3%LsRWac6Ll-$9>@<-Oc+dGtBqT zl7a}=QieWb>i{?pA7P!iz!|phfGCm+W=>@0qy*pk~=yMmq@%rJP_nW zeUPEx*O|TwR&p<+$J{Z9t?>F_s_aO-lQRiZzg7Z(VL}In@vpq$%NdoTmuj{K2Hf~q zM|PyUrC>A+9E6_bV6*}ZLzw{8cyyDsO*yrK&^6v`0@L*wLBhk0?c8!~_ng0yGN(4i z=FVD>_VrvY+PuDI0u94`DT6gmE!w#iVuq;gYz;HKJ1Ej+i?4xc@U$qN8PshYRB3W0 zo3Vt__y!0dGFBXQ2pxW@2u+;e zSTR0jFeirNmM}dVQvpyz!;e;2;3#xMkvUogWSr!ZfJo$!VdeubeP*%OD`>}mz8_}D5eg`>4H z3NkYy@4qv@2LDkO~ApkFpP>MzhAtc#vRF36*Ji8J$)v(6vb8^qrTa7 z+&1`_(|4)wEU$0xXY?C@kaw}xy4W(8%z!>fQN&({jjf@2JDsIy_7X2kDXoyU$o;@4 zfciqvlpz!WMhRbrL@%)rnLK5PMo(K-i~}(Lk<-rU?Cdn4Iq1HQn)8z&0^5?gP^t{n}9uUJ`JS2fj@Mq&%COIgu3&dhZ@8} z{cS&Gzd_}^Ij6COihP$?;uD2d9Sn`u>MN{;>5T4hNYj??}ejlPlw%z(LBheJ8 zs5Tk%%F33djH848Q-JCf!sM4F;M2B=}j(X=oTtB0@(>De& zt~=i=UZj{C8P2pCz~Xz`7x29+uK=!S`|5O6RE5>XN;G9YY#V@GvbpiXC+oa(%rt7 zD-=rU=Uyzc#M9MLSYGL$Mpp+K||q&#NP1*)EjQ+=p_%a{Zks^x!lbz zFMQxyl-O0xk*hmCP;-WxO2~U-H};yt-<|OO*dA9&QC;x4J4+?&+Pu-1-81$9h;oGn z8syt&M?$(;LA~rgBKx3&;Lv|=Jr~3wG=emZGx&30G$#B;Y`r}I(>lKS!j)a3N3n<* zJt=T3FHY%5#-MU2(7&A3`^<@;X^#@ak=1qdYy$uea~(`d#xSn@H;j+chYWbXz)0{J zO7736f?<&&DJ0(7hsUyc#d{7_<0U*e=IY13&qxHKK32F=XLt*990~a}-pOSWQ#5Hc z>m~QL59GP(xqZ;eB`*Em5NS?(Pb;2*69VK3_XeOp3gTI!O$3>sX%!Fz(a=K6rcHw5 zB)&EBF#SQivTqrYHX&oGrqR+*6z3Qnl0adTMLVJ(i@a<{7{Z$ynVV=ZI4v0i)1_f1tm@L9n73w>`3Vv+7g?9Sv^=?LdTepqwWC*8GhOH(tI(( z!JMMx*7puKVx2q+g=;nrWK;5^lrkqg>`_alOgYrLVpWQfYVkAy04Slivqx2J>;AE2 zeVcRJ1=QK^dIdw%A1cTLyJJ#;d34+Li*i;BbIs(Cag3yLZ2hfBWiYOT|sX_O+-W4H)W0^RMz1peHbJqGrkmr3;y`QCai-5=$xK5fxa0 z2&3nGN9RG0iHo4vhyz(_=U96E)XZL?HC3n43|3p1WC$EVFU$j$-VgwcR7s~1+@L5| zLKr15or?~1Bx@-G{M-<;^<%pvxhyyowA3f5**|F1$N-?Q%`zwpe*(SpauB}%j#q22 zb$)-ITx`wNQmI?+ydkx^Vy$g_>bAE+W{%jn5gq$WS^B)%a(0qB^cj_y45@h&idm$d z?6*VY#o5^XCpGFZe+OvxgC=2H|G{)RGX#&|86ScHa2~Z&1#ei*<=loQxYHkzGX|$R zW>Hm4w}=y7OKV#mvEd*Piut+rPWHO0U279fnVJ#o^G2D0 zfmpoYi8O>BUXYvu(xlwPZN#_b{rIvZ= zV^ZYuOlDm1>Px0~MlSttQ-VI!BVp?%B7h@KVJOvgBB%}uL}J15waOrU0=(WDxw0UZ5>ByHf-%9Q0pb+jTQE-^X1QV_ zzCxcD7E`$mw`iW+yUOl-pT&q|Z&}Xy-9pOtB3ejKsH$vPF&p|TGrs6Pk|%2)X9xqjCFxVhHXLJiEt5d;MUyCuy zYu75Ah~$V6x#og)YC4wji;qn5=B73$!tsl%QZ7bRZFhBgynE-f#AiV&kJ#_1FdAkC zck;QIzjU^iD&1;4a9HP)usO|$gfE?9Df2F!iCi7Fgue_?+{qP|#A)Lc7@wwmU}`(w zbZU;~2?#tyM=?9EsnKVH4bv$jQ3s;9O)(-@1J0KH@Pqk)m|VVh zyM67wdB|y@!L`FVZ3nI<;rDJHy6)u6?ECd&}RS= z*ct8Lm_{$VHh@-g#P?p@y^{8HHp+GPhh@KFt4B_R3I5HX8%fiw6kJWkx0XRe#oXaQr zPFe0J|GvWTCZ1|qX5#I16VFst0% zh8|xap`fikN4Fzd&cI-pR{@4CVy#D4G{tNw<}|lzpx9 zgfM})PI_My;HN0a@fAouYQqXn!|q1n4s6qg#i#pE>x%k3ib`AX?tW;>B7>O)!vY_kRHb{deZ|9|*+qPcrEL00LcTYgXfoTKi<{&i*<6v9)@-u63Id1;Zh3W$UE( zb47r_vQQghHPOYm_ojP#_*ERO{MEr@N@NMk-;XmN4=!Sm=x5!p^DO-I>U8|{yP9sC z^m(_{KiZC6=W@eEyyx)8{kfJt9`o;AFS#$by2-_ z4tVMFwVU|U?aSNjUtSPt{kcEcT&vSR6U-i_H=ibxyU(9OimWfU*nG`wd>$69?*?mI z-QCyUO&y=ACnMTP)LBJ+H~xe)VHrl<$vCcWe6Y8UO0UniTv-))fA^%tXcf1u^Qe@R zoH^&oWStx`rJm5qI6)$RJhZPDS=#uBSKBU`tP9l4GZ^USiJF?6os-vJFtnQRG)}fs zt2&^oA(j7m;KrqYBVMxXDZ}@mvGQQ&UzH!%WQ=7cn$;%a5@-*b2TM|{Gn4Dz`Z;7; zJbuX3M`cmgAQ%=x7o%jCfapLSagdtEpLPfZmg3)?z&~NzY8)q>m;ppN?hQ zVz(Tnuj5kutVp$@p0_1bAY6$Y70l3f_y`-F6DZ9Z6G*NxWA7z$o`GF62S98Bh2ibx z*yk8DC4R}7v>)VvEtFjeH1n5R6(wr=Np?gik8d4onQYo710fkMeu`1EEj!4vIHQLs zQ?Z~kL0iKKR5NZnl#Mly0cDom(|$kf;^UjX{5DeP6@Btu+=cZ13Lz)DfwZeAB#gaP z_$5o$i3a`8Euw-=uRnTAZ`o?6YjVx)xvekjWp6N}-d0u*XMH(dBPvh1;7%`>O1*h+ zFd@8o@cZlNNTZ1NN5rin1UK2}kk;}*cEDx=&hJj^kpcJ)xIma!UvWC!Qfei5I-}W_ zHqYkoXtR(&C|(?ZZV|6N)aYM6Qg+ln5p_512~pcbUlbAtG<6q%(QyT%F8hR$?By@= zU5ex9Pc&*b!=hN{J~>Xh!vj=BMZqoyryMs+#T$S;PR5gEFdNLstSqlXO3P4CE-$G= zuYJf}=ZHv|@qq(f`S;cNz(Lk>LUB%rR0vsP4}q9K-z?ozOma^@_ObQ9c{$pGd4dCU(x=|!i#ZtUEDCf{}@C; zK~PE13+I#o_&EZZKXV~eS#_kNgnr(ljJa~Td7u7Dwh)~2Q0Sshp#yl%#-^)n354ti ztQIS!6izDs^_c4wU*DPi4YrQ=*IywAFP||>I~Rlwnd;b5*l%AHY67g&%R`#n6K)gq zF_1*=gjlk#XmRl30 zyQ$m2U6#^-5JFU%Xlx%fI9d%d=nMm|+E-G|udijwDs@}Ls4vlWp8A`YWeX+sJf(1L ziDh-ralY8#PPX5<`|{~gt4Q1VoTASKTi(u~aVTA&_$wj!*%i4{l!hL?r^J|1W;-hE zfX;w3jSER6&ho^tB!zI1i`|J2@+imV@!!>gfTNoIL(6_R=TXh@{A&Qo3D1l7=k2a_ zZQok-u8B71d+U@T+=QMU5w8D~W5{!G%o;?pPI!x-gjF4)X*+}9f26|)a zTukF$ftH0389D2LAf76V2~4VJBJ8U2`Bd@}LX*;w=3RzKSO#)ad|ieRGP$l>Z53NF z%^*&^iD05=8LLrvLO8rw8LBW}Q4WVIZB>c$#TFJ$4EzJLiouSNV|8dxDVwD97f04( zCMlFqx@77rIVu8I`E`)6aa}bMUx^+tGDZN~t$7zXIR-KR(@Ie|>9}a}hr6Gxb}Rwj zQ^ZDIOGbDbi(7G=!GoA~h3*qB#A9fgA@+(45>L;S_Q~ zC=_nCIlx(F0Kx6a5oYsX-0C8*sb{zc##I#$}XZI~iO=s3)jKT;fwXozL6hJoN)d3XBqIT6>MCwd@D? zx_1n^jCKqWyl&!rF%g+`G!J(&YTgp8a&=Wwl|6QH6lz`;)!ud1Z*)bKqo_XUD?Xjl zDruY?@3_Is^|L>hZ@#l+!|4h5P9bcfg%WWrk^Nmi36VlY=u?2EqKi#_m{udR(_TlS z<6vtNdg@CWBMSXp37N;YjUVV1kKYAd>`-@fdr&~e@mV5lqEB~a&#2Ty(Hp=R0A2%7ZMg%kyCEQ!W*&2I$OEZ%sjIb}ZC+!CXH(voEBUqDF_En6svse<+NHcr*X2lcqe&2=SX!3y#Bq_*vPYf?SafGb86gX80{k4|mN@Lm?PhU+ zM3>p+Z#+)=nGfIkfOFH&-89spmLV_)6$!D8$wC}6N=LdWA{MBi{V6gqm>L449Z6xt z=970IBBVbmE0R1*3e+QYDJ=8eOlDyaK#s3WgmzS@qa~6v4pae2h_NcNkalz`eoHHP ziH@FvIo<$bxXbel4{DE2QhBV}Eqme1ZozKlcqncIbe!-Z5$ae^@ zJ?Cfq!&)prJ5hlo2W`RHg5;J01IU$I5%bcZYQ1sUjch=t3XJ= z!qL(CYzKR8iec`_?SLp+ZQu(vQxFh&_M*PTt?V>1=n|S407aH1;+GN5l04aLML?u| zYA-xQDk|26sJ!hYBu*5=F=m63eCdR!$RvgqC#o?MQ5o3*rghmY!)y(6>Les#W7R@5 z!;T%gj5K!Lekg+6RbfLmdGzvDg1jB_qICUb zI4#Xiyb~!(+#*?xy5&-myqzY4|EX|x7kzF_e%4}Q6cmVtj$OL3Xr1R(mD|)1sAPR1 z!Ck13S{OI8Yi%%XAjty>z(3(;D9+&x1sM?+lqP&pAN>6%WbH2;3e@uTTI@1S++LX1vxIhDUSbZ&(^4$D?4`lqno-22DYITNc(# zW4jz!ykZ6$@%^!CR_;K@nDH~9@e$QVcQQLhojpN!HolZ>+!-mL-ZBmlj z6Q(#!KbA|uct@iG7TfU|h+Y%a;iQ}4u1Hk(=ibyh#DR5wfAf=cFL&czK4TUx`sF(C zi5;&1;z7&_Uik4rA8FchG1T{mTYHD+NEAtxEp4V0zt-JO!~eCwA-*k+HL9YkuG{e3Zorb zy+lLk>Xaeu_ceTV$`q_V3|3vI$NGeZVa25kW__Lv49qy)Ua4*@1fnzH%MiJZVKXaT zBU$i|x2dZ$^6T$*6pjrGuC%%C(;L)z1zC+{siq0FNsV=saL(!V8t9uHHZb*Jb!-!p zTz81D09a;SNHiflOEzh|L|A71nhV*4Am<44ErCT7Y`C?-BJue6-%dkDSj}?@5Y{=f zbU}PKQ1eBKR%>+OvfQBoD8r@7Ns{bE0_KW497>CU!lT1^qT#vc?=e^)X{z7TCL;qER-*p81Ib0tj?-yssD@5p7E4%p3PR_PfI1@Fx=6Lv7 zf38STK!f9}lpOF^a&k05MgOu>8xVx>WE1?enJ&o2+Vof(Fo**!qL#X0=;DHl=Nka| zD+jTr$Fe&x-?$8NKvG1QDE_{dSAfuQ)C_sVPXd@-GVz8i1|!KxHcJka$}^x3D>1)z z%}|w}MPhhVx-budsz&j7Oc{k50f+`fX9rFo08G|$W(%c>U*w`ole11>i>FN=QT^Z0%}UZ%7|Zjy1|r5KO%$T~m%-{5 z$;ksc=M>&6N8~)cyYgz!_C}dbRtjMg=<=VLNApkQ!i-191+86^<}a;KxEhR|k(~^M zOkKRDp1_5xiU9(pkGaz_CqoKF8A8&jZw~1B!i1U4I6NwH%p24m zs79#;D_9p1*eiv(Kj6jVNJOvJ=tYdgmidk2Yap*z>&TA)qqXk zHlk>fPafD-LnWk_<+R4L-ziN=ldz}Q;={4 zW1j}Yrh&N1lHQppI@^06Z6#IdgPA^GqNj@0$dD?%dG=Q2?<(jN`Y%4+i(2f|{ zPqy{xcE7`#?Kc*>55BS00mo;9@%k*gqUj78`!DRF z&LDJ?pg8wCzpUX`p0VRvzAUqgr?KZ=-m02rKeZT--2on-F&AJRcD`FP$*qWfxni6Z zo|?)@{_is`V!Gzcehms)9w=|PU}K}RtIPr~ly`Ic?;Law!RZP)5Q+{c-y@UT+=-65 zLw0Pt`;C3h1{w6_hgAZAjmCo%rb|yUYA%w@j}j;x61Z@1(i#drQaB|ys@=W=NKOVv zpuG4tNm24Aw2&g{ygnnOawTJ=DQ2ZW3;A_jfP7mXfe|j~1qODP8drV?QrjFK!4w*7 zsL3lfU(lZ}YE_f1BekS;YmGPaU>Z|>0~HItumDPbRaWC`s)vGA1ghb2_NJVDF^`-( zHvJ;+o~Nv;vf+0skRJ$@e3*MH?{`MsV?9vTqjT1Ve42{0!?-9LY}S)M_lI#CIN}A? z^>xla!hi8+E1#fNF0!GNn&HdmgrGzy}os+;hGqL zRhNkEySh*RUl-d+iW*=1>*Jl6e~0$mn488#qBswKzd?L&t!SrWPlp%PpnEK)+C}B$ zl@}m`3CESo#%^}Il^063I&6WZt)UNbR2sI%)I-Kg9uF&$tqV(1vNnoCqs=0-LyI2q z9`zGN`mP+xy@Tf+9Yud^Q;u2W4m*rq4^WGBxvEF=K~i{-^YTbe(%4kSX0zZ_&PtrP zv7@N~`G-U%j34HiLk+lz$_oB!-X)-54V64a5rl@8=snVEz!voRJO+=FvM=bE*Vshl zFSx08%}bBlSobc#_beH?1EJK+uwY7B>YnHRMocRsJg0I@$_`V0{`p%Z38efE&ZYW< zU&FREI_fY?luolrO-=LjNg+R9_!CAm3Fa@VQw)Y-shS<k)HnsA3psNCB1(|r4!+#U_AAQ zD*mvi8ew=&BS8{1ktal}L11E)AA_`PAWtWg?rbq+;x$}o&+ueXbYkZ+g9Fa_=QK4H z(VT*=?ic>A6nnA%0a*NNEdLKGVCCfaZ@}U|y=MPksTJmb*Oe(6JK8!s7#cegu(ABR z5C6H;E4I!t8BmC z%RaQ<4BuYRZQmXT*PHIX6DvK{ZSxE_UzbwbmBp7la2HH+#l~hj?=zqM$a-y;4(8c9 z4f}ightu=$7suV0a@y<7a@FhG&G283e`|5qLYDtrZ17#bW#g}pdfVE4i1|JReGP1W znPq>Le%y{CXU8%=6}$7&3yMlH#r38;U57l@dcWElI8K}-zXYnsVD58dx0Mb>6-~j~ z*<-99Ze&lDBkZ~>=np#mP3sBY=JN&B#AEQT*`xnNCfW16s{UHja=%r3ei<};!}NJ% zZJA$aVU`9N0TzMMhjP`J#+}(uE^>dSaUj>d1>(UPx`{JzoYzX4cr@ti^SSSOmF0W<`R(DU)s^ipOx_jQb0M3*lrg~}5I^(yW}N7tL@<@eUjIM^aTM_0&(rqFmdU#; zT)d45o0E;>URdn^sCX`fJ^xYhxQ1Uk-F{(jWFHA!dcW-)8k~6iqvAoXm}-$Or68*x z1GSSw^O)6HiK|!GI#c|Z(Fd|%n$^`qE}BX$Lb+lQB1;Qgp)K$7eoxfZw1YXjO8D+~ z7yH6riI~pex_UmoFx0Si62Kx$;n0LkFzruS}#>mRap z(}d~<(gm@t&7jw_{yynlbtc+^_+|aq^r?M$*)Q!!0|%o^3SG?rWw?*M4Fz0-7F{wX zA4SOR(AGYJW;Fti@nz@lTF@u&=p#VP+?k2&aG%1)LS}KM0JbUKh$=-cH-DipCCUn9 z88CtZ<}@5VTgBcgV>aB*?|!F=diW3XwhG7g$Z_+uNWsYCD8}&&>c~|!S=H%_{(9cs zv*A1Q%bItW$hdp+iJDlxHtQ+nBqnLpce7|26_lUZW`u#G6HsKY57_uw49cspir@&~ zoPMs?Ahc;lk?7ND?&dX~HybWk#o~ zf8!7)za;_fjRPac2^2v{dB7;9XbXzDC1gOMC6Q?`TSg2&T=->WaEgTL9M$zTRG&kQ zIkJ})+un(Ru75I}d{73qVBL4!12J4FHtD#fe0f;qs&st1s5Kvrn_qg;)RI>0*i@aO zt;U}&*)tQh9fmQ89^{`cC9YafwAGR{pDb}?E|r%Z`u|NswL7Ouf*5=FuAE%140kUm zEK}9$uhc+PnsE+VQ=tx$TnsPC)5u(2EKF9WE)M5!!%?M9Ruin=!E8f3EmbLxy3=1M zFn~#ahY>*RE5yh68p)2)WrgJZYAWZ9U(R4?g0xn5OzE;V8ucXI^{d!oMPqSiLhPIU zjQph;`aChXGQu#P>Kt=1M2gISr3WMpDh*ieT|g=VS>FA{GWpII7~f)pEcevuzN7s{ zokp-n&U1zIGe8N8LXUX-ODr;dT#tiJ1`~(8>K9j7l$$s+A+3tdy{J!PW>BFcclhA+ z?AP;(pT?d)qH3Ci5TDHs`7S4S^d29!X_CLc+q0&Q`)PIdW1vmiRIzy~Lde_0=SnY7 z!b+mO*DtN;0c|_}k~SzMns&BG`BubyY&cPA#@P}pLsWU{SClX~szgu-M9ENq{M2K~ zVx&9{!;iz>UUxhNw6^(B!o%Q6&GkD>kvbBV5{jBeecjJ$M6z(iK$yLUTUX?bK)6$+b@Y`($Mwi^nu39^pZ>^cGWc;K+p=b&MrEKTah5ULtDr5lSas0fl z&Vc*1n-Wa9zvdW@{Zsb?G^}q>E!y(=Eu{N~zS^T}he{YZ+jc9a*KZ}3V<_ktj0dna zDRU&R^{hrSvzLh)$&Q1f8la9LjJqv>62-;$MKCq2ZK{yk9kkw?c=b*W2}Z&KP|IIWPT zHkRhNCLH!fl$6J5`-=#@WFy12qI^yXTGCvjTHVoB{zrr5#J9M6TmY%h2st(n#s`iY zmz~^$_x;wX7jM*Eu*Vu?j@Ug*8Okh)Qe=j;7*EDs$gnS1^f)66+nOCz#dCwC5I8s| zqmE{2(h<)i^f+arg{DukfAcW>E^_WAMwH~2;|T((lyHhXivE^tX175YkyULdBr;Wa z%^(S)gdn`g3K3E#v1dLE1YG&r3o4GRw`wS5K9vw9U2z`-VG`-YlpDMr@-$PPXX{L@ z@bMaMF$W9|AR3@k!h5jH77p_#J%K9a)k1qSW?&j5Z!?_;VS&I8F~mT@^YZu}@u!DW zW58Z;o!y0AsFe5!8ruMRs9^PI$8pOk6pa$a7vQREEai6+Nd}-`)sPL07nu*F_v2uosz{E$R zo+q!z#@0T{L>o}4$IGKil}uGY1puenh8t#dCyp#5sN2$@ibKlz1>7k9OS1!M#P_BF zXB`xAEK@Dw*s*L7Y%AwtR3=dWm)L4hwmOIcd;x@zo=+c7`d~}hgBFPiAXxUhoYAc7 zW&**G-(m*;%6*p3O<4IK{Zg4#TowwMalE5%7B0k|*tqdZ0U@F8$ND*?Ts3 znJAYyTV*d@kQKxtJ4CxTnf^qw_VjB}Be>k!b-eixU(HKmadtfdq3P-F3wM~Kn=Qu@ zFr%kM^n$q`n?#d^PIC?YnHE?PPN(bWMGe3{<|7qu6%3YT0E70le-XQp>|}G z26s}0x!Al#ax>W)CseOdwm?uzX+DXgkpS>Z9Cn;M`Dk{N_TBu`c=g|XS}K~>3;V|& z5w5An^In_n-%HDWFP-_lwCwlNnJtkD`R9_NQHm6VRQ!y;VJ@X}IrM(yO*4NM34!QS ztOsuX3^|R_G573?j2dS&_uK}})@T$^9<6$UU&!jIr551CzM$5G?qcJK2dVQ~{#647 zAp{zt!$#YuT{+~2=9TjZ+WfI4-Z%CN?c!4Nr{4v{X6lZsTsu323q8P7rxyEpL!}cH zq!}`77%iNGE>AdNFGX?P0?|OJz%WpMGPIkNq#7A~5m%2urGf>KT)(LjbG>$tB1*a9 zS1J*nD!9Z?Nas73yHnN#dRM*LI_m8E9PabV#s8XIs9g4%pN$XH&0u>M!N=XHCnOYT`8 znEar8`lCF66K})=Bu&}SjW=4`bjSYu4OmF3X)_moDKu3=%U=Tvww_qo3CyC$S&m(> zl$xQ$Aca@|7~wMel-gkfF>A+b1=VbNFt9>P#{UUS>~^_5osMI}#z+RbcGc%DwozIG z?fghxYFUKo_>9R4&$yFN*Xb-}lmUH#T}m+!N(d2--7r^(Q5Xu2KZeKV0f7uq0~FIB zQ+thO+;F85uO}KQ zTwqiRhbjvPPQ$J&8Q@9ltW;dh7tg2 z0XBtUH%hn>Cc#QIhFfHLwbZOm%2B{?xxipUTG8_^GEK=vaZN`at0u2&)ri2zfQ-L8 z8r-rPw1Jp)Tfx{6<(V|+(wUC9WIok{dRW@OQM2$; z&Oh_+AS8pLo7ji4Kk$Q@T6C%wklw{zYuv{f6yztfxL~D_8QCRqD)Iv-xn2n88%#mg_%SJ&{66ejk*f< z9dBcqCk+gmSBBZ%Pk?A%xwt?4WSO(8ewB4pvQke$Bh0) zh7IG$3&+4&KmZD-LL$fu7Utg4LQG>bEv2ftv`TTAW#^57CN z%gn!Y!3A+!Muytoqa-8{Li@7K{<3z=tLZ(WLGZxO&jd6j3A9nB1&KZC~xOA>whz z9DNiN8TTW`M!$uFPLx~I2^zGl4Q#OX7!9)F3=KtYlXm7-*g=0%NJzv98i2AX_#@m# zz<+^O7~>30)zxIJle3&n8|G|M4rXK1-oI9|SNO;iLpsF6s0!|g!LpSr;Wh_xfzTaDGcWd&5} z(}E_eNDaSxImT1S?3%!bro^B?$E0$;AemGxj7-3?&LDt@I52&J(zV&iiLTuao25k$ zji&VS+v(+HzL70=!GTH#1xEl)XXdY{*d*|0sdGge%xA*W!I^FNX>0@*e}JcuGzs_P zmFqOE9>j>6H-klog$$&(UF$Rl6;XPIXtWI1rw%eS8tDX8z%4h5;HodH<*xdYCj&w> zNR-hMzBKfpM8hb+WH+(Yv7MvM}q-}XL?vZ>iiv{QX6_0Bm|jSlzfZ^;G(Hx{FvQ7t!cR$BqYg4`7M7{g$cwYl+@Z6RZb6w zc`f8toua=qmR?4qHz*qtR38ojSKsov7ZX@hck6NIeLhGC)g)Qe(&+L47xCECPs8!< zS=@QM7qh=2?*i?)+Pc2nPlIIT`GAp5aOwJsLsOS;BCqq1AtJC27jeaRQ}U!nyhcTs z0J@X#@Ao@+>f#7;{k5pJ+Oourd!6yyQlySPF&SDZkTNcaX}`|=(f|-##`huRc9lV@gl&7Jv0Fl1Hv%q6^lri! z095TfByg&hE3y9oB5FY0k$os1g4jaH4}BzMsc|xaLN+@n;#R_qyMy3gYW{&)pcE9@ zz_BqXWMoOaZL)KQzc%GVKtiyykx}v5?jiRUmfzdyZ#^n$Lg)kvkh&i!}vS*bs(w^j%yY%1W zrmO8Bx~H22>l2f$Zy)@zs5o3GALj_EQGxK`NA8VBZ8Eyu@a}2*UYNJb7PXu7Po~;g zwQ68v#lXU00q4ki{h-xWS8HvkgxcEy+krrME(A4GgGrDEErrd!g##}4Z|zvXDy~kf zCt54Nd-G}cy!r(&55UVk3sTiqXzJE8836Z9tg^}luCdF7n@{u1nh4*a+z+LYgCT|khce0m`f_0c8Ra;5Hqyusph7-6Iymx& zFW2I%1g*2!<&|;|_p^(+2?-ks9G10yrlLk+M&2seNW8ALZ{e)(etms3VrI<5+I@(7 z3I-b0DOS)qj^3`tP4HcO4Q3ITz2N7i0FLFocAdz94A;kM7g~VvZ@}0#i*d|LaMehMf zl}&zTK1Bo;jUa)P+D`GFWCWWp+&1BTQcSN?KYtlet*-YtXttL$!z=5&MbRRDCBeX{ zv7;_m(38`aqaZE!*C)XR7)^yOm{2ZzO3K}1bW*K ziiAR&fXDPNkTyH2x&I0I{HLRfjhTVvpV$8ZFKjITl#cxe!Te7dmH!F({JYre|3yCk zA}RkzMP)4iNy_|#nEwCIsIdHZ!u7w9&%deG{|@`cC`qhWu*nXtDhW;j_~dtfjvT``NdZ13zuwX(hY( zXt8;+d+Q>Yjc5L+>oyzySI0VjT2t#=U8}iGdi$46*0w$m<_*ipQ}l=XpIW)&4|`y+ zxBgSRm>bviq3p*Ha|?eHv!~54Wxt{RT^3f?>a(C?^Ug>?cHG3>{orq z@XeD5p*ZR3(>^fGUES8NM@QBzKKuMvwyw`uM<6r0!PCpllfJC3UsJ1zS{B7VKePCS zMUA7H;?yqeH(X=Y{>i!gHcis4*!*kIsOPYJEX;$fvuiS1PIhgvg3q8(f$R3LSKTbL zyy1nuavgHL8Z&JT{AN?Gcz+|nVD^wne8$&Gc%T%nVHLMmzkNN%sl>1_qpBo#zaitm|vMv zN+Br~(z|m%Yp*p0KgtazX8X*SIM+!eL0I zQ-E3rO5nerjr?%n%TxF^bANbIKInuX?A2_^j$e$Rricg9QB8q`gX$CtJ_&!zfr623EtH$@hm<v=vUuyB~VZ)x-3&m9T+N|Fp=n`8by9cigrC1AhhNYhLb@j@RMlo(4&3;=DV!+ z!oH91km>$KT0fl0WRfRG4BU+b+L2-;B;Y9T!0RpMox94)Y#sfYCKSpF`0$0 z%kc4=t{+b%jBE5vJWr>b0=dwO<2DQkv8%eoox}{i%;ofZ_}f|Q>;01QZtqk5_Skkk zU5!wSqLCq|k|nn-9HdZcT^G=1u`084uh%M=yF)T=Q47yHeSn9laFb2@8kmbX*k>W= z*Wasm6TM}4_eqUokM-Fz(d^uMEv^s*#g}S*?6^I%WGD`Hgla3yE4CweS{v%~Y(VMf z#`${j#3{_sAsWS9`+I;1;q4PDt)6Bj1ZW9B{OTA!#Kv{GNwyTWe{Bys{)J{Xh+Pps zcx+5<@HyroW!fF&mli?qwPD9KfD#ukt01p7k+mM?wed-&^22vjH@#igF)dizy);z( zBhd(Y%Ly~6nn``L0EgnW22Uv($f6Q;ZcaDp=!6blCL&U?9g>p@0V^PUg8Mhx z)(Kswn_xD1G>@Fa?KI#0U0J5pe$FAIcs5d3cbTQwy29J-EQSdkRIHKyZE&_FGAgWK z%P=?&YFGr1o_074415UjJ6b`7=U2t{HPRovFl2~jXBVTEqX4r;z27r#0)h+Qe$)+R z(6M~(;QXbLr20N7*sk%U7v$;^lRvUL#@zO<2M!RV8X7n&@ zJlvHEX8wTErOf#l#)&zkn=ukcG8`1?OVxyiWzJ#LWHx`}5lZCj8Wh?T4Cw~u*gAeN z@aIl-w8;1#u{zv+SzPvzLMP7P|HMiJ7x{@}amkg&qh^_$qh7-2YamTRps71aB@-;x zdFQwdjw|OO;)Lew6gxC{{TCrhZw!9v&|2tM5wF`Zh0Z4U%TE+*@`=bu3uSLz;dZ6m zze@fh)!LQ8zs#!9Dy*teN-~=R&&VQk9*Od2nS`36R1)fj0*Vt810AyQKqRcfo*_ey zp}Co?jOqBi^5xxNw9a0<`PfkhRw}0!oy(Ai;zh)60~~gz5nDU+tDNKm3b8&zvCEd( zeOIrlWc7Fpw7rGo1xa0n&nDw*G}-@FGT9ivax%*$EkSdrbHdg|QY{p9b!nDx;`?j$ zzG*utsVsSECic;_4?}j{J!BDP4D=jrwlWs{_CHYB3bO5Q)f~H%+DCGC&-*4>d3j5! zS`*Bp3;xdvM@4Qw14=ofv<0?hG2E@30a;OK+NCJwkdRMD%?&_!s9{g$KOmx!QjG@M zo)QN}X5L!sjN3dJ`3AQcKPP&-aN7bqk>tF4JVhTt3Q6qG`VB9T3_92Lx~6$%%08nH zxgm<8-;o($&in9S17od`Lf)_l@(hA`X9+gU(NniW*86g52Plc5L35Ho^xNXf_t*9h zd`|E-bpC`FLA8d#4;#NgGcbP0#Mh;coATOD9+cd+5uSU&Ngbk1;NGVH3Q=V=(qh}w zzELcj4@XT3&4yN)3SUs3y!0S&!bwIsw5_{DC`+MWIEX{Gz;J50BnUClc1{zpWBWmW zhG!mrz9JLRbr9|KiMC0p0qq0yq4n69V{;+G^h82h(u$gGZfu zYzPf}b)iu`Eq!cT%mu)#R2~Upp(IK_2?N^=0!SB&0i_Up(T$41$?+~WgFqjn=0?M& zUL}{L!A`dBh>?(Y5Bjx-aGUOgVU448iKXg*lRi-mE$7FRZ%%Y|Xn#SqV&ru&o5$M( zg7^5bk^?DqY$S+a8}-+vaifE&(3Lor^b_Nuy;GwTn(9X3E7<48EzU=J6Y?vo7vA^p zb)e|S+szANf4TR4q>q|I&gF`QPuQ?g-QC`SK| zWS;MRTPH`sd0JY3=4;%({!)O&or0>Xg?Vp*g<9#GM%&ikIs)_wb0~0|S z1&@YWIpjf%SUS&6@*GHCL9>`#P_K}!$ksti#RRUc1tC9pUdA*Hz|I>g=HS$V0z%5% z#LzG&ooxsUAhFk~oXzkj_-M0BMCPmq)PSWuqVqY1dZ1;U!V%;|Awpyb<^nDjrLiCSq|4h}RW}avbermZC`d_B zRao^E!M9!7OcsbM&ksUs+(x45<>Tgrh%D0^bdA&}h?v#EfGBA;S(VFIX89Y}Of5E9 zizsaZxFr;-sf;#Rv0JPwQS$2EcRJ18I5k{n9G+9qpnD7#099UQ_&UQ~DZ~}7Gk}#~ z_B%km5G-_=`%E}6r*n+;ZO+sbbf}Me(30fFX=Q(u+YBH%g`_USy55Uou!RKVE~3VL zrVrRypNeYuD#J!5WLox57h&9uoN!gnsn&`6I64AwThpN!r&^7P&BQoT+N201tC$=u z_smj)c#;2yPo6T}EZ6ZO=uao4*+9R`%V})cH7VBA&2Ux3kBuTyOHa3c)hmL-xlW_F z3u)lrvJE;IPIgDF1kMqNp&sFEqO(y=s1L_-GtZUCi>w&@ho5?mSmW8}6(52B$Q*zoN@ocV{d;@VdAqn{r=og8Xiz)d8=BIA8 zY5*^xNaZ^V-Q=V6B21yHa4Fb;e_{pLLd`Zq6ZKhk8%{uar831D&u1oq<6I)ai>vHU zfTE0SaG`7X_s(JwlvrR+8g?lEME+t?ok4?E1lbhqCg)(d9z(4tZFvkgNct9~RS&di z?a&+42vZ@1i79YkO<2;hc&F2&A+~-9PV7of1icR?t)Lt$d5!r4IIiHBu~z@LTlwQw zRx5Ge(K?~1rXf)rkFXfY-0wmFUwN4K9YgYLM}>cDiw zhIu;+JJ1Y4+{Exo8Tq~NMZ!OuIWjeLWXu8WF`UDHOV4pqUYQ1xI(!(@4H*~jMZzXYGS=e zCN1V*(Rus}J`x?t(e0NKSUHD!oE|3EdBeEW6j)8Z1ICYe-vonkU-8hF*_XX2JmE&u#(LFNtK~S$M&$KAGhC}n)Yer85rseINk%&5=2%{neP3d@wh*cjb1(5OCMx5* zKY{MO9F##|(|_=ktU<5e|AOR)fiK zh6_m(lRLK4XQ7<>AZXej0QLzSKajK!r%Bvm`~@R4xgFpxQQr8`lO@|5jh(hMt3 zB>H9$a@>O(G1LR-X=@AWU-Ci7z%h<=N98#sB$T|D2dwB-YQagDE{f$9Y582apc61l z^VFe7HaLi@cb+Q|Wc<@$H|yN6Z+Lh4#q&zHb)eE9=(6<_B~5Bt1+v`(QBjuG+mMhM z${Ec!lWqVd_evL4siXRWqP@SKWY|U-e~*M0TkfP-Y-mr-jnJ58D0$<82koV8Y1TKF zl}j-v8kzFDor8oF-~yO=dh}V$>ghrS#iOH$&^+h zqzHwG{<4ol_;aJ`P5z<&H>KVnAiXe(lj;|hNJ1f3uCQYll$a_*P#CIs?clHwuGYJ< zEQ17eH6s7kjOG4T^vRUhiO<-GW;}K!{3J=UV*e%g0*M@kFPhQc3DtfQ8<7MkwMj#$ z<5Y($Qi9nJ2g{am5Uw{L+XC4E(8cSdq1%ZNheQI@G0QPIf{3CL;vppqD6%E-q})`# zgQiDFy+JX10uTxKT^UdrY9~d8Otv!EIWlcA(8AG7fl#=>g6EL0>R2JYMSX63smUEV4DDGDNi*j^Z@mg35Rc2A0f40EPUv#sHsc|QMJJs zsXGc)9q0iSH0S|lIN;51-k5QzmnFhKV2ftzH^=2)0WnDUEvD7qsCajEdY_NmtMCU@ zY&Tl=YJ9UgR89}WddgiX=GlcsQB+DMT8v;1qR1P5+vNlU=*6+7Ux3ZTm7T}-6Y?_w z~FW%YE^P_gCqpjk8WKrQY^Oo#~q-?2~_4 zfA`NtZ11~x`EsaFN-I8`3?#(4SRDs9qn&wZ5z%-$=jkH!%e;96U`lN!E*kG4Zq}aH z`31Asvlz)@Xap?L*$pVwx5213wn5Ky46DJ$pRkh}`Vc^ijYAW`b+HX85aEpzOW*p0 z@s#FF;}UuBT)X-Z;B!zbDOIBTM>-`Jf1Q_>cZ~|fMK4YcW1=ybLr*Z;XCIGZ8_=b@ z?k9674e@>$T;J^kx0E^lA}~5G|1O01VXKjy?;cPu?@l0^D7gM;rvK(6e*fZ#8+P6c zTRB2b?-1W0*k?xy4K;!O+p2fRr58=-uihQHTjmK5qV~Nl_khp*yJ2mp>8ZnJ`>PBX zG}##sCM9tjEX7+=a6F_>_1_*tfm4&dD@7YZQ3a6!j3x0SlltQ3vF@xdw^m(h;M z9?HZ^>I%+RjNk?vH(`@Ws$ZJolW_Ds1LVV}M4Cj9G$KNTl&8FLq9FrZx%Y>v(q z5`r-@(C-8=8Q2|I7|qqUPU&u&^#X(x3C0X)S{Y*9P?Qw<&8s6w%N`Ntj`!n6;`8DY zOuph5)L0sxQCV`wz;h%WJJeAXIrzuUPB;{Zg!GOcD}<{3L{T5ZcT2nbo+!&tcFPK3?V&}6Gy*2kMDWq6ILF61 z$nh#R&A6JzMK5AO$U9NxM9kb!2v{+@pez>uRsmyovrt#q+jWGrDB?v^unSYK7M?g| zpdLE*&x;ck$}mgvK5xO}g%JnY{?@qUg5!=Kn7&VdGa){r`YXH=Epsu24Q%()@tZ2E3lvP*Yy8qV*tNObXXP1~M8DwIy zSvE_~%kK(tA0%+Zf(SE+;N~Pe_vhk%PoCsyAxXHuH96(4b|oFeP&J|e2G=g%-1wu- zxdUJw?TbA96K3@9^85P{|51Lo+G*-Y^1+dQQD>iAoFIEazM_@|f^qrFc` zsWuPfn3!-tHe*TWJRk9H*^4oP>a%f)*4)%jZQW3@*3n4`IG?}uTT41?g+wy4VB`2z zM*U34#z%Ty?nISdo<>DM!xTOi&la~N<{JS>raC82>2J&DzWyWd^*TuH?bnOjwSc2F zr`!&fWrbv3`dA1$Me=ASckulef4exQX|EdhkOkZBY~elCY!S^eZDR8sw^LK7uJQOv z@VwIN5?aC{6q-|TNSYz`Xt8!i76Y?86n`gdXfn!%;grb;7OEV@;KF-Jc{ZxGz<*W? zppbY{4>|5iB6K-f%kxPWo!^qM=obxX569IaP1_U`NV$l!e-pk-?Wyll+tvh)QEp=> z?_>?cJ=;b{jBkF|8=hR(2R@C_QdL*@Oy=Gf;@7sS6jx9M~k@W(3y|k%E$6Do7j9ysmC)TJUv?kTY-t!*+ka zHNrkG^}#5L&^2c(Z?^UB=|j`xOf6C2JJzyhO=LBu?+>zs=hdBl>j6OHeF|+C8H`(k zTOp8EN@RfqhJ|>eK?Iy^BxkJSgzJ<@KfgDk@d0NtQ~W{IPU*XXy-X*BU7(c%>}b{) z>5bCoqKS9c>HKb;bus`?37b5`VG7`5du+UGT9(=?l>ry8mywYugIzGG8+omvf~7wp zr^yn8-GASTiblhlflSsToxwC0j?Il1r@pYr#m_Du+ll4R2Q1#y%Yu-f(k0ZnSJCH* zfhEAwPpV9NSw25n4olW@g`FuT*Wt7^yo1teGuDK<8%EYUAD&PY8Zk*@%o|2)E(RQi zb#wOx&JB5F^}j=B{{W(Y;j(XkxBo(C|5&yC|3zp2IUDug(Ahsk>VJmL{=2{0|0OzO zV_+g;{#V}6cgD|u1^#@GJF)(Ajq3kdu({q%2Y$o|g*{{7MajnUZu zGr#EnjL~fW!Dyd7y~YAtz~2y&w(pGB4iVW#N&(=K|C>xw(*7omQ3=f^+I+0k7vK&QsH(c4eZ_`%(cjV`NK zli*|n&TY=TkCN?w;F{;RU0nO?UhT4n&x62cSCpW^aGs#v^~h1=byw^)+cNyt%gp%^ zc+ZWJ|A5YWL-$?S(b0Amqut)8lgzp$n3i5zQisGYI!5=4fidj6Rop&-0cG#cx-%xM zK{p-jrNBA8ZM;%9!JN#YTGVu9CL2ub&;{nuO>ZwriFdSB$ESYgK*F0G`)!|h=U|U1 z_w8-pwygli_vC9IOyI4dJc4otN9Q~4woP^o1AR`{n#WBeKR$TL)p)2r5Di;g4Mr3V zS?)?dPm(iJl$3F$&)vFG&c{!f8DIb7b?&*q=s>cSSwJ<3oQ)#0B*^yXW6a zJ9%?A*X^aYHw~`a0^$PZ@lUo#um3Li6->wLlJXRAU=Qesk>UlqfM*b=+S`Ajh|Tmo z#(sG!4D?wU6@)3pejHwnp5u@C$u~etm!RO~g5_E#QfJ;XOVw3-IR793z)B21g!I?jfCpwm!JB`auuU{_Xbpo> zkg(_L@!if5QxO{#UO$aL=Tf8>#jdGy7je8Jh^UA{ChOD)B>BS&IoymA=LDF;a;P36 zgKSU{Z+#g1Wz#+ayt-t;N>g^Gc(-yhi$|PM{n`WE0`>JAMY3w?urJ;a4bwMqx zPMEnXj8^w{!5QU|sFV@Qyk;B?OX>+k%hJdg*u%>v%Y4-&D2Lj@jPHd-c08`2LQWIV zGw9AT(QSlx{z2D;3^#d=)jYq=92@dc&lF<-o8MWvJ;F$Yre80Ps_7EAX0B>x=HJyZ ziUD0KR>EMGI>d*K%qRjDmfs5JKp)7e-+fT>tpfMoiA%uMd*>d`3wv&i5qz;6BQ`8~ z>DE~0?P>w|OW?uzNJshN_L?u@6OM_zKk7W)5}I5L9zHv3ntY$6$HCcLjr6Zz4iBE@ zeo2a~Pz_ZLRxu_kSE|N1CJhjFRt>9g6pSh&r3hB|L^SBd3Syb`NnNk+OSYwaHyqoD zXbK1qW*^W@W4@I9U>8Vm)ea(CP{;mzZXz(d=}18RapS@+a;6tXDJrt8RUCss8zP)zYbgc+aYK1|2MJ>hvi|V2(FHKl-EpdzV1|x0zd?9%oea zOhG|&ocqH}40qA64LnOvi4_p{=-g&N3+_(g8v#eb#*qk!Mais_kF*)+Cf6VLdlY8K zb-j<#%XNE!Enn2n<7pfSU@Jmd_FeI9f~U>)l*3``l&pa3ji!wFV|Pk4>b4AW8(N5( z`xBpK;+e3g$vSb{bnXZcTPoaJF@t&Pzh%81@opSi(2ww=!XG}^T;A+Wt;L8t9s;(zueG>n@VTnu+ z>1(rI!8OpPR4V(&DukNKMY;mr9&^LDejUNw0Z(E@XJ#&B6X&P%o5Sm_ZY55GB2!i< zH5*3akWz&=2fk{sqP`?dgeqO7j0oMi_TFiE1vDZHahYSk55VjNv`W>|955XEGCuAj-tv;HqgVF>b5SGmHY0P>2~ zS(+Y1RNHB@E5Z@hiQxG3=sNIki%7G13|@NF)jQ42$PG_~&A+2{b?c>b^x>(g`Dw6f z!p$U#dW~qK6~^NE%C#arNfGVy%4)Q^ySmlk(%o^w)fFkihgRaM($yn(MzzzFE~koD zyx^QIQzWEHLE8PycoGL*(=Rqk6=_xcQd+{kmIElS5`H>r*~B!lHG0qj89DWUhAJ+A zfA;1F9#tSU{B^uQHhWJL`u7*dKK}V}b#~d=>W;EU>`;jtq1b2#sk%VX`=f+IT!?S| zoLm@JW?z#wqM)5D(|xfeXbWkA_D6h{sv;9zRAx}3G}Q!5D)=8qf&nJ_B@s=lV`hrX zLFqz#768Gxe=r$1$?je}TzDlnmPMlq9sv4>BTqh`ojP6)7?x-d&7DMJvfWj*Z-%sg z^rGB742*dpCgRWN3mGen7jy*ktOBDG&fE@FV#JJH!B-+6PF4GmjC#$=oE0LW(CS34 zV=Xf*x)(7>;1NLmxXe`}8r4-keFp<$#{?8J`;gKM6?(xI|GitYA<8 z5Q?tI9CVc=a%JCJIqL$n)hvJ}w;Xn=hjn-nC3N`w#W@C5Wton;11aWo$fllnvM&UA(!O1TT&LSxU{v6 z;1iONgsCM=Uxk+p<3HneFtw?W6l6h@7SC#vK+)FN)l)!#w`mW9A?n7ay})P;6Z86Y zOmi?+RvR-atV$ZR>VzTO;7n{BRDuu?3JNvj~<>O0*Pd;S3X?|Q%m?T`DaT7Q%jNrB{g z0}*}Gx_RxZEO;O&)`L1&yA3~EA^IU|j}3Tsjws!}$YU%ZEIuRH4d$OqiJG`TV|8kO zd#q62o`HcF44~y134qE>bn5MXv9<#H!|51)w_zA(ML=>*fryH#&;q7(7yh~XTWy2u z^9t-A9qXi_74;s{G1**sfG_CrHRp9p_&A4HCI{DE0_L#<5{+&R?H<0GjX`knbr}+FrPLBj>KnL97%6z z&4Y#zaUZ#8_dX7X6(V$U@BEjYS*83Ju?wP4LY4OQ?dNSnNw0xPD-n69Cq}_AAO|-` zauin*SnK(LO(@y$r6s)w^8USjc1CvvW`V4xOUD z&fVLz?*wk3M|A;)YtSmIX}_xb6PSKr8dA==fO?Pf`M0^ngI5PZz9JwN&#Fuw?8>GU zzfdWFQwPL4YO60Rj4GKoD5M+bG2^!Empd#goA5o8a01vO*yK5CK*cM7Yw12hsPYxy zp?)7hnSSy|G&o$8Rc#PnhRR8?oSUY?nAc56E5pNrIpX*&1@YuBqQy`yYslJcwRa(d z;Bw8-;gkD|>6?>NS!)oc&Sk`r!3T5*H#4P<*L#~YJ*OCV*=ff|=i1?U&E=DAoYpVm z8qMuSni;#szjPZ)xQfrCbvh^#=)dUrNaIyn0-Q_t3x0AAad$KTT*7@rOTP(8l z7`5>@Bc)fjB(W>EV_Zi0E+d11?N)CtA`E+1SAKLCw{<|c7uqtEoGCFPqU|V5oE$S? z`vtdNBK8;6?(fqH%X5)FR#YD4YwsC>;MMAGE`s*0RQqibB1hXW7d69;!;zm(n1GX8 z)a0+l&pn6_e?yZG5{I!1(s+dn%fIXsN_gYWJ1Nb`usA}HQLBIJ;X`I7-uiWu$>Dw7s}#r(WZ3N-G$_=a|q;UjIwO$j#gj-4LH z26+QRAi8a|5hl$&vrxD!XU)CzZzOO&#q`EYz!=8x9p;XGu_+YQLgB-p;J_wf2~E?5 zDp_nimH_F0lL0G^n1Q2M)Hi-qY)M?~#3Jgw5Mpw(`oI<7zD~0n4rM{yR{69QN)kVe z70D#&h10=OQc!~M`cVi<{yb;s&|!o0i$Y8pONEVNC4&O1X!(y`dFf_~*xI&d#on8g z(+YNKV%+3+BDUxUkD^Pwa*RkI(nnk9^wY-ZBDgzidfrv-d`Oiu(go}EdO@D z%Zj=>GFN3d>E#spDHhf0xIFtAY>ajUv8gjEA5qb?fHgk%O^dhUt=2*S%qxhqcJ zV55yY2{8?q-}z^a8})^A46zq+VjMKHZ|B5$o)>5*a`KDoza3P+L`Td0h?=h%w_M7^ zG#m5ewX>mRm$fVt1oJz;u%zc|j0dmsh+XpjkAhad`UP(NSNZY2&Yf-#O0u0D%lYOz zPYXJzh6F@E+EC{Uc1vGoI~baUXu>h~_qq8G4Z>RH%=f&5Vb5Ht{gk;&a%V>!`?itP z+zb{y8gXs~tATshX82D;0=9WEs}`~=kGePt{$HAB=wDN91WI5~#Flfv*#t)?dAW|E z4tyFzKkqjqMc;LHmB<4kgOA$|gY_+a`=Zq8(3(MRHHIX@bg9HDu!NVaDQca+e&j=;MlNP6P zMh;`jgC$2-3NI%9*PkK^Td;Zhi7U!E+faTm3FP7TrtKRAvV)N#V*xxZj4ScK?A-F4 z7`U9_JwsFdBvwEdBQHFww8gLZ!n9vZG*>Pc%FxY%uK!d(?I**~9E)o*Rh_C1F=JI!WCDgT&x{z{+w;!$lV{d{=k2& zcf&NLuVAkQ@@rhXLFA9IU4CtM<40;Br;UYLPg7a=faI{N5R_G4HflpKA+P!~JU>(N zE>I?fliZVxTm>5wMV6DMX@gtwLtBh9zea?&BMR1+Y3$7#D!Ga6$<|Q07;QN z1JpvPh()c#&_T@pC5#g0a4HMlnYDNFdv!buEZZz{4N&>ctE}Y6#Jj;n!P%KY(t%|75jEx!_e$6WrbM!*ZT5OT+woQl5GP4r!Z5t}+7+sp`dTC{rBW*#XC%!qXp%4)syJ?rMCOhYIOA$l@N~*}aL#aLrLe0c#gN1ePSZM!zjkS_KwK<`s+c8n{$S>J zXy0{W`rf9kr+LNtvQdjCKX%<>uZi>F+xcr|oF-Z4mutbF#lpaLx@t5Mjs&m?Sy~f> zgr#6{GO&h&V7ZzCC{^n3Hi41%Kodpvfh~%rNv+$f&TLME%a8a;(8Yp=DO3%gJBb(@ zZsnxA(J|_m!H}{kk!c=3oBHIVp@dD&wb0)j!$foVA=Fh$Y{#rD{S8i$Q;;~9{SSx3 zFR_vWgp82*Esk95S)DFx%HW}8E^e)6Dtnw;-n;#C z07KK{-sbGue1$=tk#Kwa_^)xm?r=5?|5x18Op7*44Hj`7_OY^1vFe6#{=CdEdJFc$V|EdxM~`1uY~D87+>zfurJ%9) zFlEbd{u#XU=&ES{b+Ry4DV2Os+9mc={oZ*{ZT6IXV?AdC0BV2vKgc>notk$3Ij zc%(w}bO z?@si?_CwU?!o9R!z~!UH`h4Hg9qZg~r8#WjRI#_S+|Qu5rq}zvr#!Ex_G$O}L&e*= z*V^lokudYaahWhq)aN9wPo3XK?du%f@bOK>=b`Be0a$grM*ok&XUY2Ic}dSt{Vxrl z+k<^_0fVlNs@{`}OCDV>cddtqVFQNqubSG=ZeMS7s@&+!JU7vWp?d3BJ%R=pQT@fV zhd+c7@?5icOxt4t2ua&dtqu8^^*~kDov%zBowsFT-o$u)!z{2rO@+ZR__NsI&}1IuHJRF4VH>-Q(L#e#PB9bNs#Rs`|0pM zEs3J2av@2cGdyy+QN9qZ!)tHd3R_W970h-l4~_-HjGi+@f9{cZgY$iZM1D%BqQD`) zF-<{16iO-(E!xCivOI>;ACbmBrL@}M1+la=A|D8YQCue3jCCdUFM0Yy7Y8I|Byr$K zHp#7%xy=SE__~^59Bw!NJgGg_UT|$4@P`OTV7O;zP;D^ zm%A$4aOjf*&h@y~LVT!vU)Npa_3{1QF#H zK!5jNH`t)z{VR?iE`=!^v{HA> zf;~4yANhWPLvws7ax6_$1FAqf#q>GqE0w0~!Zyp*{$S|%1pB48RkoWMba&k@T|nRv zq?1F$a(WydX2tozs9$5(_H_Fa+R*%CV1?Wxo^_TmLR?crFsJI>eFW0!*2|0cCh7x) zI{(1vz`hppx)*f-Qkq+3&1+~)@vUSD8;s_En7naKhxBg2GV1E~Ecs?aLn%=~{)eEn z!Iog%q1;1)-rb(Cl~8@SyEt24H<&$lRy(jYB5b#>NATEi;ph66~o zwe@U9Z9*uzEObrtuFiwQULS#&cAwsZ*xqQ$v~q@+J-<7@L~@9`C0s>pMS^9;is%A8 zB1kDx)0PDzFIJbgZt_~m;JVZaex{E#5ZWWjMdT5G%M&%AW8YZ#hle@kj4~QOxUM=D zfD<%!E-~r{rLs1Z4vXX;*z_o2)1z4g`fmuHKy!fdhtiNDdqP`_FmIn;^jtXzWTU|c zHOJRIKECleko;lknnjM)UfZu+~}k zp3OEMC;>pE$w$fDiSz;Q%TUzVOSASntOwd)W!g}iS(|l|X#KmY+^}xHy@F^^^N~8@ z((7yftg6`IVhuCoIRpd(xUY!^_D}1CgVC*&f>AM2QX@zdzxUOGQ7L2=!4e{w(z6bh zZ!vdegSmvt@Ml4C(W&+VKVwIM4k;DLXY*xKGf%`7@YuuK;K&fz4i%cf60c5$R6Y-I z%vHjC%}vy-z|de{SUEv(^O^3-K}QZoK~b#!gb@_becsbQuXC8q>|quPyel3?)aPR( zB+jssZ$(0;77q**QZWr65DNs-1ECD9c!iH+GoQAt$C;2?#6DL<$;9o8;2Hgl1v`rj zD0Pocr-S>=Nf;zq9AvyRu9}+vjw9S_{N8*tlv%$HFKOW|VcHLZWt)3k?w#MI>=`-9 z!%0Gp++kSYJv;du@{Z}yS`KIAQQX4^1=LeFfeOz43)QY^*A=ez?Pg6^-R;To8OI5D z2uLgp2{;dV5fmZ-YKV|NVy@1{CRJFhdU##AI!P&R z9!Gjt7fyzHI)4%f2Te~3;$UH&VsY3)hO8ee0sgl~Z!O0X<`d~z5-Cd#F%Fxw^pCr? z;4`B$7?r<-Xc8q_?{MbX}eql>K-f{tC45xeQ*y`-(!3( zBQf%S)XmsTXnm(M{&3SCt*&y?r5U}}6)PHb&8rTe5luZ)x*yVDf%OO&zcyrswD?59 zP(_+x8-ZVuh3JiotP{Y@6)dJ0@p8hVchpzdpU{b1sp`EyzCJ|7Ei)bnwk|=@=HnI& z(GzwY)mbaVAoL<-svCToEda=b?c>TA99YP0P>Zf|CfNi|)-a%XvMoaCEe0oRf6U61 zXVAU|_asDpJwtEr5)*+jO?%i5(AE;(ws&v^({9o%D~6v1=7wTb=|*i&HZS-muDHNs zh#3mZK{SbuekB#Iv*OynlsxrxLNU~Aa;7(q4^*{mBd*|a_c=hs&{l7W%~f@QH0Rai zF6By$X%LEbg>WBgn&uh$JzufJztd{yC=!30{J$233TON9o&|rmwYLu&wh(677lT*e~E%ZKkPcqn`SQlAesX;`jvaii5S?N zh-#;DC;jVg(`{;k1~!^q&uPuzb|iO=%NrI^;Ra#Nomx+lB4ll{k68yhC*se&vNCDJ&kJF;ccL#}dcOUUq;( z0q>YV#3T;ST&ApOxsSa_R|Zy5Ogw1W+v!{l`$oUgAc5}TKf?oXT-3F*h>(vqitw9S zxwTEk6~j(0Fefg}luV`S)P?{@?JiUkU759W9++OHagxO3P-heqm|i6zb`}UyHmy`l zzZj(Y#m=qRG6Ii9zBv(8eZHy z%!EI=U))6SDKtg+sPUJh;V)&24;q5ilE_HS(YtlErc@|rn$8U-PbTj=z#eatxj3(= z$L+62y}nQ2;@Rnji=3j(G&Y@mC{?@JFxG9<%&ZT>S|y}`@VYh+A2)fcCKQ?>BB32s zsa4x*1|elT*96a6H+r`dnKMQF8c5CrWfg~}ohK_DJfvWMopG#8@KSa_bgkl6-~yag zVP+i~ecMtRnw3>QCB&b(#$^6VS1GYUxwfNNDKuLtvwqNjevNac2W8pdhyfjyjN@|P z3oT57Es;_*tP=S8RGpKy&pA5c-`?T?#1Ju)_FytcYrd3Bh;P}yoE4h+ly;|h12?9( zFxmkUr>R)B5-?8Yejt%^yIMT-AvpKbYv?bkF>SE<`jS97xy&lFdpa1Fmn<;uhLvPQ zFIvrDT|w$Hr0x}ECs;5U1CV~{FveqN4icB?1Sl2;E7Wo+n+Vllrxcsf39Jb6Teq{z zVV}i#7n&U@0XaaHd@7&wL5*MU?`~qE`D;690!wDy zecC>R)wI{xTp|U?*4^I&oG8m;_kd!&~vbP$JW-;SZYU@J15|rQJ)oBvL3-y+i?m zx|tjmQKJD#?$_|p)D(5n649K1U=MM#2#sKJs;Fr%(Y5A~`Yoit09l|2qT`xS%~xId zsf8pYMRW6djDX3TehcdOMx6|C8LlG<>igCRCFT4Gy$L$k0nsdRYrIpn%0@82{eXVi z4u$oV>9SQEw9I&{BDWG7mV_)A31qg>sdh0}6YUC)C;+W6(dyfWDGCoq{FNZ2+F}!< z5M@nvL2u1GQFNz3>5YDUTfQ)dO&*&gu^?QB0)?o zfLObn-*kwi^sdY0t{=jQ>~ zmKqv~v?KYwn#D(#{COdd;OoQ|(}kqS#glVEJPH}IMzNT)#))OGmCjeIwe*nDPwL!Y z8;jUj=>(=s6SV-Gd;(Z+gVDARSNVR5x{3*$9j3iatLKp>)UW0O@W4(r()l>dUdtDg)%R zECuSD$mt!ZDDOs!7Wvx0u1YBHf|^=PL;&mc3ysDyd=$+@LIH6>D^AKam?SGawFygk z>*#w`KtV6SLL32xkF-Mho?HiynJ+-m5%$LEk#?&>FCN`*{8(+Snwf=3M0SJR{71D) z>NmYq-Ip^{pyP`T)98b>8EDZDL%~dcj!}^6`n#?SOQEjJ4%tet6)vegFVN1B76~3=D=nUEzS8wsc zax<^<=UMV2y^PzLPb+)i*wW%e0TGerd*s8--3p=$h6Ce7$E%V_JqnfpV_HWQa`97B z&6z%owRudz5>%p*juqHAsZPd=F{zZtm=q36lML;I z2rP0uoY@m(qhHjZX`;0-`Fjr(l>9^$_;Vsm$y$Gcz+YGc%T%%d~#K zo^QHW8fklGM@s1`e}t}5nUN9qJaNvMnR)L;m$#Vs9Efabgh=@Ycr3Fsg+WCF&ZnoI zFc+TeL zluwCIO%^%GJPqxq_*NN|0;PX$*i`ddeN#FYURCP75$Awa*bZw=x~FQFQggPt0(G=% zMf!}5Yu@K-ht?yi`Hfw`HOxt6#Zk))$C1%`dxBisE+he2ONttubZrEDKLWTDitN}z zE$N;{q5%S1yg_uJJF#?aNr+>Z3Rvlf3OnkRD8aaT9mrJM0f3y-nTZmYR^T9Km}bp?)J*W6I@A1(Ak8a` zqv^$AaJfJVN$S8b2_qTI#S-zdOoAx@6!>p3ceF?u&@V@=hqhdB${{=pgh66^Qfa}L z16)?*Rggg=zQhN6U*vU)FAh<2KTN$Zfd|_60mgy*7I#Gg;EkS;6`xL$h{Jv<39cuE z6Alh;c5L`YR`G!$MwPd9ws@Nx6FJss+h1~jR*?3~SoAQsk^Fq`wSNx^X8S&xrY#~J zJN9SA_c#Q8O_tpw)-p)PK!}*)jOt^Pa2N+eUZtkk$@V>}BTF#=rb&CX z79@zCdy(0+FVvT_7x$4+ENoD+0bVE}BQ~5^-p@~ksw>?l zNmzvuKd3pKEbW!W`>N0x5(g}nCw_S8Y1v6~%V@Sqp*u&+>b;W=j|LldQRM!F3q=SG7p_Q{7y=8FW4xFRuRaofwy z*VYRPyk9O;3Q3${-)pQ@4&iK*fy}R_4u~Ua0RPn7$MC8D3Dj&uf?)0{GSXduAt9QD zuUOrPKlUn%WYw8(5b|U6z20U0l`SArIje1oAP&8K6t>f!JFaKGm^Esf9-({66DNh> zt8u-ol_I59$v)}M*xfWevn1YzE4x^Whf=4I2u~pqnL|zY8BepR?3HSuIj$k`0z=a{ z`|o1JDg#~lwP5)SZ+7UwP6tpPz2rvScUoVJd?hUP07iX9$bQ<%q$g>@iv&-|*)7{6 z_sD`tQdM~GU+%U#OzMGVB9Q2-chT>(=JKee152|G`dfFL`MSy{j=vcO5@FjQ>k?BT z&FyU(JFo5;KOYyJ`4Xr`78wsT#Fg+eEW7eR2lT|i zK`Q1;+9rs6G_g2UIw>NCxWYUCsP>x0-8lU$d)JZq!X}cuOZ-df^VOhxoyZ(nf8-zD zq3VUvwfB!wYXvem7jh@%Xb~@PG_D&qgyKa+o~L>;^Xc{J7KdU*P)(J}p{8oz*J|ZZ zOR*xC??uj+o}ORkUlvtw`M`aDZ?MD^v5e6}f=84{Q$u-Qg2iME#EWrjAN2#|~Lm%rrh$YMv5yD*bh&7$^%|QqX zHdUq?G4N1R9E^~(>pN|W2BFvCRCmRA(a=$Sa$@g(6;OqthUPei$^*lnQj_;Ndj=s9 zX+9j%S(9oXt?#l~7M*>koq)gkVXVq}!56`=A}^D3ujkxC?{t>HzU0^6xrjv@zTUKz zwt{q{&FS{HWCTq2DGn8uc>dT=nkEHZpOOYdc^C|zkK zFQrjqG$7W&)*;W=uc@r~__D|0h=XsGlpIaP`u1xuObgBCIr1DRZ1bXui5n7tIqhC| zR<)}dIfL*{&PZ|q7rE%Tm9xG%J9PQjiQ}-?(AGc@GciZ_ehuNM?QY;QehuIAwGE@- zh-)njN#yzKh%+jK!1^-9Qw9FG*;%Ld=aI9HZ+;G))4P^vkbZm zoL*rmXI5oyNRpG1OjF*YKxn|@1FI%P`@wJ;Hp7dA;8AC;txKQ(F9n}T*NA+T{`jQb zp~+5#3;C1he6G-je8n$WEKRTgZxms|;tiotQf}&x!!A`UDsF1QNVB8Rk*p+%fkK@s z!{eerVOc4U?{l>SkaK2Qei9&iiU|GWM;7f`W(eTl8^?PLjqx=D`o|2skFY*B=xzdFVR( zq84?(l-(cm)PU+oVchO#Y4#O~rBIGSIDp9Wnv`@b&~MXbagZW~Xc`Z#aR3^$2Z4G9 zkwPz*2_BF+Imx1yFK1<9RQo6)0^5ZP08sHQ~Bxx`h z*#4!n@F!fB1L&IAF@rE@4sx6+y@6(g4>=!LxY_{eDG3QBgjeQ*dnTW^A2!kh%l|9t z^>5P+2RjGrfBI4Woo)BOQC!6SKa4m3g?jx1lm2_u>z}dzm#Ei&g0BBFE6#s)1^t_V zar{F8zdy|pZz6T!AH^Az&A0(KcIo2!+^-#U z($^2~qGQF?4XXC9?JgL569vJ(X~gl&eSJV z!(70UPtV2gIj-Mkk%}|X!+t_38-I^&ku-h7lKNfvHq~1Z>xLg)TlXzB1v2vj)Ub$i z0AiYaQwCFmiQ)m3vrP;)`7~Oy7HC4U3pB_^sM1;fQvRleuR60z>w^@hSN0%b?qSXT zKbk=FgSgekOqzXQwb=;_@A1A91)NOtBg*Z%B`KWGDb@-0=Uq$iGG$SZ_d3rmm>?@_ zW@Cyz{Fg$(y?3Yly8ON_Pu}d0^pA?JG6t&o*?Br)HpflQo5oz|AD-Pi!EnQ)woS$} zs%_oENIS`~FOv<2)3Xlth4h`o^yi?BurzK{YhKoPoaF*`Ka7!niM0N#(BWX7~;s1Dkg`dW~cO2iB;NZPjr?)l{j$YYJ>&z zI%t;1!|ua9M3Jc2w@nmbA(zVl?Aw{ZwBi3S&eUO3}g?#cKZJT+k zg1yV4-I4Q8<`@=ipz}1LQ*kVO!hq;+ar$5gRQ?d|cO2x(5TJ_b9x)T=Q^+*kZ!5x@ z_!kCCqQ#(yw4!q2IHfF(+s}`y)FG@L08zjF~q^G(tLm6BNTWYmHwl#M3l z{F-FCGls*F3*8QmOHkP9=)F@Qme}`6JFRE8Gl&a?h}RWg4a~ykW_6yVVs-e|x$7kk zjZwYwGhrq@5Q^?9YMItblxUzZ?n=oDosAi_#7gV6uv65&Gwf9BN^|GXv5MJuP?wqK zqKp2-mB+M|OAwJ$gB)d3f;h54CYo9u?6u++=z*JuJh(ULNfkp3;hf(t5}!VLs)ftT z{mN6X5eOqvk-_+jd;x>r-_}!8E>EcXuk1P^IjjWgx%zV|NSDj$y4(ziQzf^j0%b*- zHQAu$^J8*ZhzV^bszdM#Y9_qa8HcQqVK=~Tx2;3bjcBan*og# zT$0V^u-9?vgQ7-!>hd}UG^Sz^&>ie~7h!fQv7mR`wcF_B>98nnZ65%1_9Y-TDvS25 zGJfkGsH02FMob!l-?fICP5QwZ>x@Q`Pv1OXl~JwOq*pYDslN4GR5egJA5WErgPaQC z)ZYm;R4bU%P{d0qqJ1l%)0iIt60M!F(SR|}aF!knqS$X1!uyL@lI{_x$$T@9=@a*{ zw}RNu#!cNQ1lje7pXN7q*|(O>(QI%tT4QnpGQa?jF)Tu*Qk;c>9(!Mu(czX*0Z1?N zK~((erTA*&ql|$%!Nsgu z;|Z*UUHnYw<|$LSDwBw{ptrXh@pPc<2wpVM@H2mO8pT#O1&@QrJ<`?4OvHY6@6X%o z_rtAT%*_y+{l9yl|3K^bgOow8E4S4_DeJB>U&q)Y=mGEqjbxQ}0)kfe>z<>SupWK~ zh@6l`7*v1sVf)ty!ZNnPl~Vaqxp0RlizG25M#t#EyQ@!$s>C>aLiaaPXwaJEu+HBN ze@4O-TF@gS?Ik&gq4PCdL=)<-0K<+e*Ak_UyXP1I16V7?DMq4oE@R(|b05r6mn4QG z1)a5?XkM`%SyUiuF*_pw_M0A@5#kK?aVtS2cS`yv+$=TIi3hPT?kg6-z&+vCws~BN zn+HV~3mQhbi2mKw>om^`ftEz0!|8-*#7iLa)TF=G$am-b6Tjuqy0nVf46*^N7)XGY_}+GfUhYEd9i;<@h8rEj-j{SN zKrIElpi0I3ft*S4q12Rb4~Px$4ZZ|ev|EZbRyGXE-~0)Z%iY-sFZqN>tF2wt$Nxnv z+TLu2?nN0|AlV%y>lfdJik%EAzALL(-l-hX-W(`KGEKIB-+seb=a#P>HBsqC@~t^M zj?s}rjsNj0>w-tO*K))rdYUz8r%z|j8xuwmjP{Ycty}81$}F zve*ctbEwiTZ%~p!OV9#WFFZw@9|t}~MAw%=*&J)xtzC`{%T zuL{J^G5n9{ML1E!>lVo=+lM6;SJ8n)m!%)e%Fnj9GT6LlbsCJ}|7 z2+89SNX3mDESay*L3b06ExJqcUJtf&9=qGB`{4Q=t13I)maJ33i_4 z+5g5bFN&z}j7LE?lS|3)jC`Xb0HQ=}$e`B+Rm(+eVlcf8=jZ*CV>S7dMkxf`sS!Zi zGohi4O1f5xss=kF{tyoy}bAEQbt5(M!On=+_qVzNuk`6Z>`s1b)Q(>UgHsA zT--H+Tk7Ipv37dSd@4A#3rE8V9%^^{VD2F0I>U&h0pX0M@0$#GCaj|5v~)Dvs9Zhl z@6d_yKT>-s*Nz55Ti;=={gwLIb^6?Ngv0n=QV3U)J^54g5BQgIO*vadHw?lT=;?X|(PyyL^|{Eg`U4%xInt#t zZ~o#^r*{O>;v7VtiTqB(iTmTg2A_^EuPCh?JZ_W)HUvyM%Qk#=`$=H*(>x4(s(2Qw zhAH?e_S3=getl-)Z~SQ%OqQRk6NY9O9boNHuGzr}HD^)pxfG1FT0Z@yrt2&Sb-f<) zOKg76GCe=>T{T01#U^B5Mz1t3)x|eYj?i6&g^}RPZvj#_?6Ih}=O~+>_>YX{BkqU8 z=I>f1t;8nnLc59+4axXhKzQR2xlAY4Fm2K^KB^3UT_rc-Q2jYSi|6qh^QNT|ZgMyR z2jMXuE>*iol2GUMC_W@UNS#4xcrY#Ka-beUSdJk&Q5Zn~M2H=GlJpU#X zi#SzxAl@W3UbMGwi+m_vloL=$-w}-=Z3h-8TDA*eDeZKT{-#cb;8^eA*B;v*UJ6H+ zX0ktcNFm=WiXJg|+R17p8ylSg?M8xFG$R6;;Y`V{p;RopQeU^PXTx!i4cQdh48t}- z#QfYnA_G|ttKGp`+^s#Et8Efa(}}K7Ub`nprkSuAXM<4rCpem*i(*ah5|9eXY3Chc zdl?Kj=CZmuieX$_B3a`=c-?;ha~-I9SK+Yr6Cf^bTKtB(4ns`k(PZbZO#1FpXM}dH ziHHe zE&5M8YzEFgSX)AVRS%;8Lu&7HYK|(fq_s03QEM@@wzf#F1mZi;vfl_oV@Mu+bN-@y zY~@T+5Qoto*i_igk(PE-0jfNtxFNFrm8)sOmEw#U!uJx_pC*)af zS7DcRuCYQ;`PY%0%QTtbN^)UpCFICCf6v>0CMl8GE5XL0u48|_Pvqxpokp17$!)klnBma%iJ6FsC_y8uq9H_M#tr9b`E-LQ>jq}WM>qIn z`EUyoZB?!fn@bl^o7^4#6va)lrL`&a-8=kkx51ny%*Lin{b^AhU9)6=aRa5qbxu9n zvdY@$cA&&5TsMwct!Uf#dwvenNtIK$88 zLKeak3723>vWNp81Svj3<0%-?MD5_6Dz(x>@8|TuP;-WZaASD8xGvj2 zN)^-8N{vdhYRTTj=;q3U-TjTpL63zx<(NIOFx;tPU`v%FPIJ{P@Frr)|M`W`#KOWw zs?&kU9Rxmwt2wI6>iKVXub_K_9U#q z!gX+|S~$??{|Q3z{aDW=Z)eK;e$s5zBpIOiqj}1h_Jf|mKE?kMh4sU{9Z^I0FX*5B z5o4AICYUtNP45y3{$8kk{XMW4Ct)WG@=wmD_|JSOk~~z(qzURe~6*fo{&PtV(JXX_`vd(`GXDf z`=*i4)a$i!MA;_Wv5BmMBo)U*(sWz4!oW-k`tziRlAef8T6A?~BTDoeE!Zv^?2hT{ zu9mit@T%!VwkH|0eDe~Q(W9iAD$k06^f!p>xfx$FD5Vxn@Jj+G(PP$-N$|mG$gQ9y zP>jQZA~Hb8sed6+E6KROL-t|H;E3cs5#e(|L+l7)_j5vUp9Bb@ z`kNdBt0)Davhz4gz+0thp|LojcuC4fPm&>!DH_F6YRHIKvfYiqAE%uj3m~Gys~F9K zL8TRc!&Kj>VM;b_eHVivWpgpw-{_e8j*$9|$~rN(#R^rNXUX4*m{cET-FA88Mg)%4 zO`?(^N^vK_P`@h#QirWwb?M}%*Xq4hLQ-?Fi0GQp2D9ngL z)%Fo_K88OTH$$pJB^pIlmr;l-kggyGpsqG#v2UQItpj*L3bqcgep`$I=6PZzOEHT}R&jML z!zHH#=t_HSS}j^!z{JIeDM;h-1BCTXNhU&9ldv`a@ESwVI?^NDOz!N_9bOmH><&tc z1Y<40!y}&{_WiTD|25Zeh7|p6g7i3oZ4Tt$M}kAp50`2fUm2%p#Sc^(=3qYV_T|;} zvko7v1vgET>II`G+tozq8>PyO>@}+%3Jr(T7XB___;wX*Gz^A>8JM`pn!D~1W6@_2 z7^15byskNoDfmH&f182ck<`y{9WV(4=l1=V&n`xZYdLzzpn(E(&RK7zkR|Sl;HHB% zmKVdg5@=lu2K_e|01D@`Oon+?@&xng)?kwO#t&IK3kjgYM;^2c2~ecR0~-|6 zzp|W_%gi~Zc``_p*B}%PDsW~L9Dl_AOZ3kIKz?_uRF0-`kJo;$L&+@H1nSOUCuwYY2zv#3W8mRUENREL0?R%w4eqI$&Nv%RS?PpS=yK1~yDfQJdw!8F@m=hTRXFX&3OR$eMTeTy4D zk1CvXz=^a@1G$IyMF5NJMFek@d9czzgkv+WYgO)>y+FiQ1Ur4JBPpluG4az;G6sj- zvsOjgUafiVLx1RFDgCW#^osE>ukB=(@g>XI9%40M(Mk?|qpqy^TV#EN~9%mr0E!gio<} zu1O83Xm%+!!6#1wU?Bf)B?YZXIg>rVnvn&vcGi^pQp(iAIr4M{356iDv{ zHN^UoCJ4Z*dr%;zHGC*JbnQq#j*dtvSs&P#*eX*xl$U6dp|JxA@6Dkcohm$=p3+$x@D-nj1e(GNktZ1^W6I)cFTGaj>&<{3rVQ zcQ)Ps2KwUoANg+o1%3TT${VAcsfnc_z}_83`yYbD&dpB5#m1uhU!&jtHTM4!`uaaG zd~y8aRr~kt|0nMH2mk#yaMzaZMgm!jqfbpu=}0=1eZ$2v=C}Ssa_XR%&t=H3fiPs{ zmQpBtrMy{0_tB-WPlf`GR^IOEnUaqmZSnNeoDxOocnr3l$Ei}&q}xF&eee5wSItI&xORN_IB3ukWNDHe<~0g)e^Z z9pAf5-xm9hr#(5ZmF*TpKTAQcUU!y#%cLFruzLjKoav4OV3a>kB_Ddj_RTSVtCxsj z2;UTIC5H;!Wb;}f>}gMp7cYqKT_5!jJD=}sZJVEOTco+;dGB$+hZlmlppj{SE6RWMNL&%F6SlUlZcj@LF=kB7W$WOCVBul68Hu^%8!GF5!w5 zR`HhaL(~yxh2~}@LewT=8xo^QRl8xcx~)cqW6OwWots7lW39T6*R!kp2MryB;CFwO zPXOa5TKDO|1##!q7Ui9-^D~mbD@EtsNRE-_?Lo^PI#oULW@L&sX~T|#RwC#UR1d!XQ-6jJUcJ{9 z;G-{MEWU8!H4KP&j5a_i(=zIITeciG*H+%I_=NZF15{l>5SQ=@h;pFKevHod{UXI> z9_G9>&1a*|V8c3H?9%M9ELar}F-2~}N7op-jfUwYN+u0dL=bOxbmO6pegN$SJN))> zG0k5p^u`0r;QOwFF%7`{c|N%hv~*%V*Np&<@jq+@3($Ij3Md=Aj2Ek$W5hDGAT@yUU;QdMa4BZQqU;u2v zWuU%l5Rc3Ij&L7R;C>kP^?7%>BG~n=_1V<9BI36Bcp@M6BSt%2wu2)*FAO|Ke#Ifk zVGcW0hV|j&$~_SD2;gO%RwdiLzfUP}@XJ@MC)_X>B*$my>$%S!q`YoL70TBaCI@fe zf+si!c+aRr7~D>`=^o5a@v1KnW|DGU_-ARapQ7uC?#mCxFYBv^4#92kuG44y=oHnJx1i~_ zZq00c!Mb2^#CRZMrd?;D19t0fLs;lT%+stxhMSY=7>*56a#l-kgc36l`Z6tOS7=cq@_*p@@FPZNdjnbSmyGj-1*Ywpz#4skTDOtb~)Q= z%GDw0S}*?`?&oO$O(bheoS!Mts|Xw}eVjLbptSEBhxZ#zr!Vdug)c(1o_eDl&vh|E zn=FNf*c?MzGQ&)anHaGzL_<5<#tC!9M=h^zGp#Z`Zi-`>Ct;yt9-dJ7e4|A^vmc8* z?RU4elbv>Y6JxCZjK zPw7E!tIBfcvEhYzFI@1B5EM~lavRdxYd!`mCz_SeSkoRQ+{#BwFYfG(^M2f+FMR8n zeX3)rU=|VviTZ)83;lpB2Y3Y`(=e=!1}yZ^*N)E{XLm%7@vr(3!iP7>uMeO5eX@J_ zo_?p%Si!~}8jp&cUdQ{W(NErwL%$nvK;l&bvoj}tC+;Sy%;t!PXpV)_tpMysW@6mh-0 zKmm*v#72rVu{O+DP{?BY%3>Tb70KnI98St6GFi)U@MbAwzfw{LaHLeTBoh!#b&!6W zpv8c)nM{@D*Tr2%a2Vp;t>3?fSBZ{#u^0M0Jsa3Sq30?o@^%8wZX#JMnQS}|`G;uX zA6rxfv;?ct1)CL8s+xIo|8|aG3sYDXyNWTfF7S{LtyBOBuVu)=7F%8cyH|!G=IMpu zNJ0mM!1sdld6TZus)wrh1@DCoNiWg(-c5Dnq&;*~ydpC0gn>Zx9GQo=_l6e<&affe z-rP`Q;3~ciWl+lipSa^7(~f(iEznwL7$qgoFB4(!lue}DGFV%f%HWaSoNig`f>fq) zN%RTGLcr#&2hTLVJf_y7#46nbK2$Ie&|-DS={P@crw(GD;eq1yKVAvn{oWD2wC4C9 zy{TYG8BXF=(pE7>o?B8^Wup-_Z~p!zmsp(t4K+8&LqP5sAqP%8M%1AC@-me}XbO0_ zx?FkRy}jnS%t`wDXjetR@}TUFGZZ{8de>0CX}_b2#4S6r)#!^t+$&dZy34^(@qKmO z<&d}Tm2+tg-V$$u*%AMinz&{F^VJ)9ow8tVXGh{f=ZcWrBJ_yA3xNb^wwyw9T|rI} zk#WT#a8Xq(`Xekg3ojjZxi9w|zO5)kFe*o{)~GVw`^{;hcwClS|CB(Hx=NgWmq4Mn z7%-(H$skJ>nK%lKL0@FL^phZYS})Tjjng_^UB}3%#UIqim8+UKMIwhgYN?o1+oSL> zFl$=cfajNotPl2!Ga_MAG9UDgDP+?%3gmZ8g=7-8bC(mzw*ef9$=?nok3fzb6La4F z+%QzS|uN!%d^3 zp12H`fJh>Hq5U(Url)lDJzG&-FkFmG+>|mtBWiSFSRpG}v}lynVDVqFtl~w|4u_IP zjKcdS?mqCz(C~D{_0z)qpxUI$eWZ6mR7>44;Vj%ZmB!-?lwkB+8iqC~3N9v%f^4|! zjg>uyI7*MPwN&xWMQC#OOxEBDl@FYS$M}OEwc!3?usfNZ+Lcis@ab5YxgZfgBQ;%^ zT^bseR_7aw%MQRS>&xHioF{`ExHt7I?U5w6X18ls$;>X{^{T&x4p2QQ;Hr*3)(#Hv z#la;`PByn6?3}@Kn1F@j#2uTA$VU!37TTN5j@0=AZR;R&j6Vj=ui!syK0VEYxMqDE z3QWyKoZZCCgD@+*-?Y^A);@?iINZ%(I|Or%o%BI7ICk0Mo|oTn%x+cwSl<{eo)ltB zXQ@zCps)5V`T^EK@nq$slBFH(n&E$5g*Jzxb4A(0r^{B{%P??G-emj)+@j_xFoZFC zEBUIG54{LFN=>6(_maC;pUQHpI~D&L%qmMYCum`xiGlQScf9D60%SW(Z~!iTCQ z8`oqjTMQG*Qzv9;$604&{X&-^7*|l~qN1EDOvl#W@j{QDa#>bR>MDFU^Vq4&EVim8 zn{0jzn=XA{?S2efPF1(YNS&tX9u3>6(x?`WUyhe@8IaLjTJdEUI!9hns%CKFCYxC1 z)ff&cRs8<5Qn1jb#IK?cI-(c8cFTq6J+Gx7B(MK`HU4TH9`@AY^XL3U?14R(A#@SL z75jmG*FU?7l~=%|h;Hr>AGNZ0%o68U>wU zX)Hm65nVT|lAkagot5U`R<}rGg90*hLPh3==jBxzjhgV_Li@Lo;)K=;?;kW80Veom zvfpkuO_0Yl`b~1@D%DiXYp#`U63nXWkQ^|aLNUN~tH8_*+hF*5Uht;e zH)V2Mr8Q~!VN&W*w2=*VzQ^A5%Y$ptFagQD+wj9=%{sGFn`~l4qBZkXq8fO7BDzpV zyE9=F?dxl$_B(m}TrC*x9C60cyPH*OC>!1PB=nvGgR6zv%Tx6*?m}E6Lf@dn6Y{is z$taKT&yW7qYIQ~}+nc9M-ySenbPnBUm9JXFI+{N^Xi09Pwkibx9WNm;ji$4aQyn7* zEB6)x5%A~(KB~+z?ro^6wqWU{$Aif|AZSi5>Frqk%S7@g=n1CaD}P7dqGk48*wd(m7PJz`q(ICKTY~1=#Q&zOxqfqY0`Mbt*r5AQTede zk|IM9PGX`uJBtU#01h2v_N0PUR*5W~PqYY^zJjPbh4&McD1We zAy%Xk`34RWVE-@>cy8zdpDYk%{#W3r)$_tQ4?P}+(+D?k-t6Rrg=o@`Z@F{Tz^VvAp13|)^O9hewsn_nJK1uf=I#F(o;J>EA;#-6A3 zHc%|`+r4XmNI~{RdGb?OiSD%!vz6mSaihzw(W%{tb1jG}V{y?y-GE92&7f91 zazHEbx%5|%&~fNz*u)C2NucR*riAK7wcBVbePJp%UExFhJn)>}3UJ?^{d97Gi&NLY zPdf*_x~cDSu4T}8$Bta!6!#iVVId`q45D@G3?h~>byb58<>*!Lct>r;0G+17CG$4; z{jwEa#b2fk3fT64f=b=nPLJkLB2Q#hl*$tFXO{kk3WUS2@WSa8C+l{cS%&UWg(bHg zz!OZpGoW~q=PMNTh>WItC*Dd5uou8EB#Vxfv@5aE%$OMdxmsoFQ>vBUR=)8BgraV_ zm0nZOBvUDywgK|@nc~AMvswnXINbLSjAmn^yHQ-+>cEY#l#XK{nTc)kUuJcC)iQ{$eC674rbsz8>jT-CTVjxis z;k_zsuNEPs8@NUpadA%grUg5Bz(mmm${@hrq&2;ZJvSPV&sVAZx(0GFcVmdi{H1xIc_UQ>C ztF{+e0aZxP*}hhUUXkFN@#A|!o$lKFG!sfbFev36Uc9tgK{OUiXT$adqY;4wra|G( z&FBO1s02p$Kobg4(xD!ks0UJI%OtDT{PpTvplApp1`#eU?CnH{$F&Et%}ijA4L)1e z<~>lSH#vJiHb+2J8MLsu_2ryFz@o&eMoX6UI*0`Ppi>EJpw75j@pi5BJX!vDuZ^9x z%-L!1^7ISRGMI#i-+4qNZDvXguPeEabwek{z1cVH2+Ap`BES89RzRwEq^N>mo!ACu zS})sa3Dhn$!D4HPJG8iScc3g`Tg~UT9P*)I?4U-e9=FC5%FyG3*~i*#lp+D!l(@Tf zRPIF|TGgwNQs@P&6!|M6ZSo^&bWgA=C^RHu1m=@gDc}p7fmbu-CPy*xFlIH&NlA<} z&K)r>q%@-N7zAe$2WL^i=|`H(n|!~qwm;4W?qNXA$I{l7f}Q=YLj^PSL_KRV@h|7$ zc8NU`)BB{RHsZ`1@S-Nq`zB!-KmRCt7>rfx9T1@3>NHmLJ=6UugXCpZC;b}?Ni=6w zCxs!wgAwPVOZWRkTk5XT8MrH$853l(R94)iYHpx0RMoP4H=2#=c1|p@R1)KSa&e7J zhDMIBg{x8-jdWQaR9Hi5bpbEGaYvK}p?SS#g!||t3-&USAkovD1w&;j0A+dJjlH9JpM1YiP zYu?(6lhR~Kbipdf!}i^aRasvd84oSr5z?e{URiZ?ndFirbw43O+8sX_Pc2 zq5u-35ix617mp+5P%WxM0XpjdVv3wROduMKA7m&U93yqcV|+rZR3djl$jCU3or~Wp z;~U(P%nRg-gmRDXCniZ{G|k>pn)eMs;IAor6r|5m7#t2kaPu*fU`|Gb8IJGfc={6q zi&lUUZ}V*eXLgCjR6j5}0ECSoy^o!AUfCf(&aAiW9+eB3*Kc4__cH1xZ*Aq?{8 zreu(9Z#N-{_i*nl6^BesZl?ceV_0t3O<$^DYJNS&^G!(sXIu^0YLWEdm{_g*9<=V0 zd3?`F2gaOIwPpRVpS4)yX0hA&b1{S(StOcv^Y6&zk5Ln?wT8^U=wvQ~3xZ<{H@Yk7 z1?ZU4`9nlI?qrDPBrdMGWYP$1iidM8x6EH>tFtGx;*=hwvWbZp&?w2$Xl18>C1DC0 z1k?yK`8$U=QrY2^ADsKzJ%F&c!VdTE+4O|`7rmaDhR67-MNj*ZOJ%E&OHDJ@HW?}# zT?vYP(m&9dkc+dJGOJoIqiXHkrdg(>BH0&w4rNeJ>fmM?+%G|XKs0GwBAqpcEY*ZG z8#YF?jf|8Snwz_d-6O5gQ{0MT^E(T0M~1g+_EH`-QnfAJT@Q;1WolAXi@^v7Cn9)( zVykXCL_T|4^`twO?_SZV$WhqSAl-Kf2a`-`eYth_$TQH?(b2A{@@{N7)>Oj|k;d7F zprc=G>&Uf?doxNie$*p-vpia&o@PWOCQ@{)lthdNZqd+!p`kxE1I>*oJ!zsfe}fqX zoigrl*_te=pV?7U(=BD&oF_}e8H2Umo4_KK&4p`ck|cv%jXBk!Oj|fxVeM&z@;lzc z-%e!Ofm=0{S6-i!Zc=~Q0X2Hi9ic1W=~+E>9sO9q;wV-@k~=EQjW6^B9K2JncPDwb z=jc|@?{O!OV&K5fPY|R>?h@t}2J((L?EDeV=11Jh(NFL~J(jE#W5GqdTN_uRqoOUcV3t!!f*na0xCVx| z#9}L-Ll8O_Srou;2%w~QXq5pfwui_VyS6LV?FFFJ*tOjm>XL&6dZNdfGp*4OTN=Gv zkn*(zavfOf=1WE?37rAk#TPZL+Hq5OXN`^`S79QsQb(~b8;uRXIR2uh@1V4%y<#Dr@xIu^q`PV9#Y${@| zx)r2N)Hz)+@i-h`YQq=D)x8=;+)z^E0o|n2tt~vOp>9wx+s-fIzWL(6Ux~bk`~FSq z`ti6VW)mA~fM83N726Kat95@Q@U=kw@LrC`DOG8t)mf!0=qgJ#wG)vrUCtM#E=Qhor;RQLVOd3f@!~wd^8hsK3}tm(N6X8ecl}716|Dai*7~=1 zi-Y~Ylq+%kQzrCp&hy{QG359k{;mJSTK}R&|1C$?zsCOie*Zsn4F6k>uK#zAA;*6; zl>JYv^$*(nZ(%LnMA{KspB#PW*v<0reed`IKCSqQBJwQjz01~x-b7W^ENFMS)X*p6Jzr}wc*jJZ4ISJs`oIE{pUNRD7)TktSb;6xXTC}oN+E<}^BlhW5f5p6v7jeWg^qX=O*-VY} z1lvq-$5wc!|LU4vVv-$M(8#HL3O>_HuS7`v2X+yLw4H~J>%`bq3xv)4c)iec`(jfD z<#^xE`UW$8vii=AtT=n~w<+|uOzkoI-nn`o5&8vM4iWm{>eqpsJo!tF&Hg(@8G>H+;rR{0 zwd2^SQ}fL$c8jh9U+tB_^?#{i((!rpS;t7dx1TW_F#F6f)}Th~jgX}NIu>Ct65y6% z?R%E?`0fdwwt!SKE}v`Y6Q=0(dhSpc_v++M##`DUHxs=JLdl?06!wkOz%GW*nWeQ5$QoUd&tRl=7x;)La+=YyXUq3V$JRg zi7AIrzO@L)czVMOkCX}8(P_t8RNqY*dv*CMLhtU1a_`Vi{t>Q z@PIGgUvW?eqFsdK=&!oPnXTt{K?K?v5bRL!hkgmJ$pMnSiJfWbY$f!{UG;##0c2=` zX{X~Sp4=$$`#+NUyJA&yx8xol)r-skYZ(RvZ3@+0=Q8dOZQK|-zqI_=@qIj~sOj(7 z)G~(IGh=27;}mh@ep-T^-pydk7G>&6i$b^tuyScbOsV;*DoiJbLu zTcxq(u#0o5y>I_FLyuoL$(PDvC{AQNDcL}*{>Nw`^}46m=}dmhLd{2aZx$f`>T#^HDpBMh7=o4a-xghJg|~SybHlegasJC*ROcYF||RCnK%zkuplouEc(Uy1fNg4J0}8lVjzku&0!t-;)RiG(bX22?*gyjO;trjF*~5;Lm`!=`#32M z*){RwUXb(~bjoevVi+DIsPcRDXQTiT#L{+XOqR9?{fR>gadH4PdZK|VYC(P`74oCA zol^w&ZcL12^dYTRmG%F_+dBox(st|GZO*oB+qP}nwr$(CZQHhI+njCA*6w%x-?#pC zup+i1_E}XuQCWGAkvZzQ#(jcsGL9ZLSxqvgIwLSy>=;inA3G<#Dlm~m4dOxG|eR*0XJ zq~w&t8wbfL*+*(Jr2*3Y(s*9tZ3^@E5Oa=Tk-3>+LJJ;sy%lUWP~FjGc_LaYuv632 z90##Tab?}XXc}`dpDo7kaOCnVg|2Z_4&Yitsz&-|O~rVWP!!<5huxWUOHKkmiibDE z3U2#_cNU7h7vT(()o4Q%azm&z#C9lbhkNCuz%wDpw&fV|#>rw~AT7ycxH4g38nGm@ z*|OQ9)#W;s$|^_!ziwSRrzk^~`KeQ2l(d#tEY>BzxYUarFja_65u9c0HLZs_^OHy0 zOswy9-i>kiS#r8O`}FvT%nV(?D(Iy{!Lf5mbhOjUYmfr5ncv6Y~Xb-v-clXhWs{&|e%(E7_Hi@60{cFN`Q3j1#rbM6@N7K1s1-9V=gy3b+>W*S zvu{^dpN@{#xc4+e6-&<2fiGMH$|?B>6$K@jC~%Tb-1j!LnGfIl{!Hb2`+QUQ94GjB z@;bk~g8o-t0W%1kL}YcgkeQkd8m<$(J3u$R1|%3n-)|niKTFx=_6LS(lm)U?v<_^t z+nD4aU?)!ZYY&AbJ5wqE*#U1WKg$yW+m%f8dv&^wGv#SNL6rN9^m+`As(-SnpVV$= zF9Ydw`6Cu1+S9+P)#sT$DYsxb0N4w)0$C0&xG`c_l6I>m_hZ&((H}M+;T7MLW{-IuHd+prmyUb{DVIPdC9Oh4FNH!* zJ(6OL{(@V(e3Mq4t}eYiS0`50=O}C~8S`?;pb{R1gq4<6-f4;#CX*nVtYXF^G8BO^?_c3M@%YH4QsYB2rPp$OM|g(p_yM3@*VmEVZ=;? zcz|3FY6EQ`HL5-u9QTfp_*ZAz><;d^g~nL1R^Pv*GKwCRCsv8%`A7=rMcIHNh+3`2 z${+)Zx5tWLd1GDw79HUoLkBwMky*b&wF}k$x+Ou{d~L8s#T|h-SALH_T{_=%LKsY4 zrSeyU`0*VlIMHF^Jj6|WyD*~!hj1Z?SnP28C_6$dQ~^qyr822=|H0XsgkQ^=wj&AR z08T;>A4#EfEUA@7I=pEBnJ}W8>C#v0#=^J>4K&i1vnqR)F{v}$gDU<+R2#Li;Z$OJ}~vFVh1dXKMEj)sxZTjg|VnjP0(sB$`X6zbFT1 zDbtVFt|637KyyCs6imREs<+dHcvs};SC*>l{%1`0d9Wj$WHk}Ykke@fOuxjZg76M1 zSeebog3MYsLoZ<9W(=D44H9N7hJy4OrOO;Y*)TnppM(lV(4tlU;y~5ff0;dUStkQF z?*hIr5G$4H>E?K-qUd9u(2GN9qXN@(hRA?aTo7!uTZbAe+JqS&He)85xDBtT1*;CP z{SmL`l9JCCEU2wkj-J5W=ApA@OAfDI?6`Kuj4P7b3Mvd(=rvaE!Yf76MD{-T!tKOs zWKg{t1?m_RY5R}=*T$22v{E2SP$00aCx(>z#+_Hhn51J{(A$q ze1aCI<#PHd!i9}FYDRw$1ZtVq5J!zcS|itHS0Ia+4aqZo#!5v9dnH4q_`$1TI}jqm zwV#*`Njed*YHB;@(~)3F8(K3Cvlzl}Fl~Vs*}eOM4y1_WP3l zz?$WyOhi))dlE2IuY4`QNG)FC9S1P$xpNZp(nJ+)${6)bAJOx+=If0rZZjX+R4gA18KO z8^_VRz*lb^O^gB674qV->>If!x3jF`%H@7fh>o}TUC+QOpOyS9+ICf; z@CCVsA%qyxY!@!U#o>NRZ{lx5t8D3qITG!ftk+iwCX@2NPEXoN)z*q~k)51{TMzAS3j zw0?Qdwc`0V_ZVCmw&voZX>PRA$RS*O!laxQwDbiGtpFZ~h8PtuHcEEpY}d3fvm0}o z_3I%+xvAlI2w?j24btInhft8}s8YK2M_%1p8FGJBzf$P$)LRmj}`-DuGU5k593 zcqksWNFjGpcdWFuT?{{=l(}9bm1W?=j^LWmXM!(F$GcaUYh5Uh#-jei8WJ~?(-VPz zz@Bl`8E<|KMY^wkSGMsTo|F(19iSocpznUGJNDbZ?>9<*wWaQhK=lL5UQCwl zqK2!G+=r70vkXgeLs2UZLrH|fqo@xnfCwPwu~hd87~hA2&zvtx@v8+Gawe8T<bWDd*P4w%lPuoNnT%{|ST9 zb_NqAX+MCPvZn(BTfWS5$r>u%xCr7pm-$R;yhTY`uiU(o4R9<^ETZ(C^K&G}WKEMc zlyZYHL`~nBFi$#GUV!1|9?f%Ea!;V#wVb_osHiZA7A}KZMw^SUbFT}VUj((tGmx0B z2@pm_{z-(3%D|P5>yc#%rcBwCX)WfHpOJgcP|2{B1XWj?NGaoo<%%L~3J%<2AgZ+T z2LT9=eN6I=X_!xIJ#VgIpW5AtfN5FvYdxEl%MnWq6?kshde7`#9B=?BXbtf5H1q6-`kq zv=hVJX}7+h&@%k6$mMRjxwl$8MGr`|e>Oh}vZ|7J+wMg%I~96O)eA+j(Hm|1%diEVF`ay)ztSK} zln^FN`*@UV!kuVl@d&gUWt2e9k*WxAHZz?=?ZGl0`vO*LkjO?&q#i=Wp!3K;nJ})< zab~2PJc3}dP}Vo?E*hb0GIH!=U;PJ?Csy%~zb_93O(X@~T5f*>)x_UF&mfj`m#$@h z5o6||*DdOnPoY+`s@g{tA-h(Od}|FdTINVvzaIu&iWu$T7IvybeJ!Xr3wb5{$|NgzV1!UIlE z3t7R97C@;;Qcft53ye-?IHriboP5S9VfvH{qAW^qPc8yPQMAV%i$C&de_RAyUeQ&S zprVEF*Z!hx4yINJxh*MmAk@d{^8nN%6>ao1=2gw}POx$EolbXLc!s(*-af%)G?KZD zia;~FZp60GwWQHn7wkN*@L8^BKY>L8?C?z5PI z1gkSDZnMc7%?^#u-85w}SO)g-V8x9uNH!SPEwJd2Y?aJ+H3vdB;bk=fJ|DU%l- zUKNDEv4ez3Zli?+7qTHDn1PQ(A6fzEN<3lT<-o}O&$|7TsJ8e4kQE9hwxL)xsDhw1 ziDQ0^F!m6GNHCQW_Pw3j@PY}eZ1MK-2M zkLLO}lR40ZjnpgKoKjMOYwSbcKq{!Oeqt*G>O+-Ji@Y67h=gW68?)qh>y5gw%Ib8Y z0Sgm9?>6dnF_jqg*gE!zNp&rW9nVeah-uiw<4r*kry6ei6>6I%2)c8yZ{eS;ViQY4 zZjzPQKcS0?CGG+*s@KJ{Q>^iO>Uk=RQZjGDm6h4=5aKlxlgEC^cZu~aREtS_(TS=b z2I+!Lzg*f43PE_i6&J&`<(bS`%nTU1{*kQv?KeN;<7?l(=qGQiOc1fJ8l*<5ZxlcT zY)Z`LhfH|nP5gNkyNSX`!DL5gtmW=C{md?BDDDu2huW83K7$uL4pRPvi+-=(`0`kV zB1rb;^(_E_ZDNqVRJ#*o4W^okZxW`yqm#B(-R$qu4mFDVEXfC9@G1yWrL<5MF(r5` zK z23(%9As*+N!cN;Y0IR@|qiMTUrhiuNkSDl){^u1my!6?LlRzuH58y}r?Y){WiP#dS zSg2ZQ1_K_kQuCQ@LH^#6VjJ|_yX)J(KDU!T3CDM3d@Ns`jc~~%UcDMcGD00@IAP>% zS$>}cN5BpgbEnCQ(fsmpB!qZ5nu#S#$Gi+1G<>m|xfGvo*weFD;fBW_-f36X-lUKs zk0#PYg4-;u+qtO4KTKaMfA+cKJ@1jhx_YSr2jZM&CC@#A(rxsiuOA;SQ7JOK9L(dO z5tDw8o+e)-D!n~TEL(-3G{|kh0a-I%%@w?kxPXxYQKB4ufQj_eW=y$2NPEy`%S^3l zOoJ$5J*sBg)CL;_3wNgTSWe_V<8?+qKB~@uSv9A6zh7Q57dFIwrId8af!y!0C^=wo zE+No2;|oM7{1|I45`se+cZA*C(mt1L{Zm-&%11WO z%^6o@`@1@PCbkbK4wZZORtXczi5kb23nLSkNwB@Skn8Oe_AjfzyJo)s8olN`vsW(` z;0~SAj5HpFzWM~f0oAP~YezIY(db1cJrQb8)bd9W(Hl+Dmpi5@u{GFtS!3D4MEA92XP?*ey_Ea?O=YX*!8lj;{wA5}d>c{KVr1#( zrzF6BMC8}AhcE8(9vGBT3e;0D5GAr|+*V_`qYO_Dby&Ln7rX zE@+3TpoD!m96^4vd^br}m@jnu_rMPj@8k9Pzat<2j_$D1v#|VUpojI}hP(frK+nJ8 zJO71z{L60lzYys8uL8OM_vC}^zk;5BlMl9kO{Dst`RlfIbn1x4Vtm%>&c?g~)K&e; zwSJF1ary^^tm*0z!%5Vq=fH6Za2t7XcTM!|4slYWR&`abEcX0pqrm3RDk)H-L~s*T zu2$n_)@I^nEY|bJOfSMd_m{J0-z}{F9)7Lk!0J3KU7o_)TRwwejVZDKWv2(Qo#A^uDcu$792up6r_}$pt8Wd%gC)J+^&*%{R{sWu3&$ zY@hn|jlFl_4PIW}{$=d`^6ukeb^AC{c`fd+yPfdcV$0iu#!D9GJxKeL#K#8LXT|FW z@i0YVGe$Ig(W$-60(nD!Hl#Np^SB~A#?ve7^CZ7wKp*m_m9jddu&Xy?)Riwcv$zf^ znNew-mi$+h5tP^KH4Dm}ll<7_i!4HSzg(}^%f4N}0Se#e{>b|~4suwP3#f}y+YPCP z6rGlUKs>~BeXy>8)6iL|0i0<_#`AV)#@DgT!-Jc;P3F(+8}3`V&l{!>78WnCiN~{DF$Y@T_M|#m+O>TcvR=G zzHc-e{N=jm?2+2DeIK{2mu&zvmj`tnn=@Xg+gb~_83)TOB>TdX1%DZU zUFO_^sv%!?9M~}2aP%FRKML`CG5VL73G{HnNX0POv;OPjfofWJ`R*8Nr4Mi3Ao-${ zu*Lbv?&PExpl{fl0KvL@tuog9&0b5|q>@R50FKBRoggvK(ejAwA`LN;$F9oyKXaof z%Mlbg2qBIGlV5kr1unYzVEFGPO4}%Y_MO}DW?#QRpfTilC2b&;^m@DO_Oj{)3K4dw z;#2?BN5G33FDWvQqip-_sKIFZrG?l47M8v<2yu?OI{6cq|fir5GgmQTbN*jE=5^XWQs zW5vauhB{>u6In)7R@XDK%#`-j)bU;-00Y3;!!v31{D5q}bT147N^RkhGzs zl&ZGH0%E!>f$!AM6Tet~hSs53+M#2x@V{=`f6B`L<+4Eof%lPOMwhV%B zw#dj0i5XX>T4*B376b{W?Lrv{86Z_r*`LxrO+XRdqV!N8Tos?pj*w_7NM)~5A#JYT zsA;9h&%BNg^F zno@9y(?USm1w{*>tCLzw({HE|=M8EGDr@*x9yA-JPI!uS@1n2$2gv0gRV^pI8nxsK z+XVc^F?l}&r7|b;xRd1BfPq-`@tf_?(UObYQdg;IGxpM7-~N1$YTNa7zpME;Ud8kW z*oDyIxG%LU^Kr9vd6i7ATxs@ zExw_85a~N~J3jLLf%O%KAD{wedx#Pqqvq>7_`bc3%zLiZ5{g5Y??Jn<1;T3ehZ^P5 z8-|jUehH8Cx1j6m>y1SxaHP@4${k{8x!&~P7Q(mu$_Xh+G@0kBi4{zdwA`I76Bm2dWd zrdx1TLG=sa%-S!nBvav8)}fEzRIFgcmChyWR)A0?@DUdREcfK2%G=?@aUSA2!?om7 z)J$!P;)kk{DF`(a5>#=*C4?fBp#$htkngBeKP~wk>Kk$IN?T6PfG%3jXPU_mWkyWT zW>*89(_OoX9)1KT!OU(np#=MP^RuJm>(L?xW=y>BKL*E{tRI6Tok|iAlfi4^ zwN^Jx@TUg(Sv}a2J;;t{463Qs6&Z%}nd<^UI{dR@4UhTzjPAyw;Hk<1Ki4E(H% zJ#jC!1i0q@VQfFsCNO^(+sMq>eQHX(Dt@Jx>QTdmdVu-08vR4F&#(bCI(3gWB}?u8 zV$C>(C|;4K3suqNc4W2UBS$XWJG%D~G8~p4+1;GY0C))I7F58#y>QQIPo-jZI?7N* z@4i6EmDb+6(03GQR5tLZ(TYRp9=pSpXJ#lt8kut;fa;;Lf9Fy6iQWjm!h#%EjWuB!Gu*5j{rWJ!Dsl4dlPn+$G3sI%#h^fh7#`0@}eFXFx**E9&-q**J z(qQR}wf$&ZAY#7 z02}Vq=J6ebqolX8MU;h4$ByIIwsfxI*GK+vRpU7Ni@AzlU1YSmh`&Z8cQzZ+VrH_k z;y{_{7(zl7)C7m50wVtM=*OoAr;OVT7MS^bBqKLyP#;XJn-lyDMal($O&9v>HkjxlWCxbDd0U)t$wKHE3S- zMwSTe8jgaA6`S2it6J?V;*rI#j)nCR4efxRX}`X|Z9EuK1JwY=lwrwJqP!D~b|Oe? zMG@|pkwwp80hKtR#9~m%wqd_q-+=>FcL>jEiHK0c(V4Wf?p8}X@uLeS_SOuJ5N1+-EXQ5IS$4FORP)D*J z(yhT*{5u>i4muZ3*o=W-GHI^u!x3$e7xpH>J&(XbsCq-YgEv3g8)}eQtj9|rVStqB zYPbVM>~Y^4Djhv7ZuVoTvRGZqpPV1bwK%-rMns^JMO0?B#?gcYR^b-Y8`}GM>Wm#V z9Pa9qd*}r`u^4aF(g3%3`v~g+ht&~RWXYWw=?Ud*LUqo_jn>o=9FkUQm|ilq*83ak z4N)=|WtDN^&CM8+qz-AA8y>{&t8$VWM=5cVW?FHQHgcGavSeLkIy^NP5gwY3woJX! zo;sV14NFqsaFH@{sEY2^%upTxaZ1=oZJ#uk&-MH<%)wn?Y+&qLXJl~CP(2NsiIOo< zC8&fuRVB?W%tRqVT~RP4Um?^TyFME(L9cTu~ zQ#L*Xiip_Vm09Bu@4j+;Jq$K=6WvKqixgy4nXtJ^L_cb0!CeklLFpt;O?c`2dD4qc zfYX#}sf+B1gDVQ9pD_aO+GJ6%ne_akC(*w^JT?^vzUe5C2n4p-px(Yf49Nj+fNf49 zy*%Jb&L0R(AD~3wAyh~B6rs8pCgK3Gp}E~N$VVjc3r9Z3XS>^P2_dJ~p*28c`)vi! zX1Xkze6NVz+eqKy1V?nBk3qE7!O?P&9wt>U2Kg04=si9eNG#b#1dirj z#4pudNNd<%Xwm6J9!nN6ubd|Er<=le$E$Z0wP0y2Whj@|xq;(%<=7*c^%q69wM`_y z=^XHvqEaw3$E|qW*h5+-;k^&@Ry@|Cvjx$*#nQ+h8^i{k{@q+Zr>x*?#mQ!eR}|r+ zNA?w}P2xcZbMqu}tIJGQ$c4OSiQuHVzqM-9>kCUEtrFLk!B4fMYN3Yx<9NFE(8x}s z9=n!fB5vp}N^$RJVf4#mvz+#k!EeON4AZw7;1QMN7Tl}yiNaOn7T&7ziQy?nEOj#Q z7Q~dY_y)PfSauh$tZHM#B!@kZ*qrvsTDc^<>#0SfqEWbIIj)yR;)-au?b9P_m^8yt z<~tQu<2+>A@wYd@ekX*}7Z^`7-E zi^xB?8Sxm4LV8kQC#@=MEM7p~wC`A50<%*i1Il~d5Iu;eN4dCQRuviGNv26hen}=# zPaP`SW|K1-=l5JSh$}<383Bt(+906>f#h#CIG*u@YV~T+{7rP+gcb7k7v`Icp;}9g zVr$d*QPT#u8uA9~%W9%sU1(V4iLjnRvv%8n*URVbpENbXNP*$v74j3>4K?%7ghr2L z!X%m74pCP!#W0hJa!EpWgt)T-~XmFBogh3V(lf**kC}>bAOnY3YdoV47 znbVmB_S;DrnT&!w9H}K7ge*20`3NNTZ^MH73=CKRPQpx%xcrGS0Z`f7Ii%_Cp(wBM zx-|HS3_|&>qzpn-7ETCUCUgF3)oXiCSuc#nM2(kRLsy|)3CDWD1l|1vLPj#^cV9h9 zNvC3vAV`M=Rixlq;L2|*sIIQ@m<6o6DPKq7KF?6JO)6TNpp~>J=k8R=WPNltUA=Y| zIs7WgW2PUUwS7)ds)L06k-uu3RkG9|k(i;nQ8okv|FKoMw0Q<557&MtI(2*K=^!yN z3ndDVVuDIAe^H@&Lb#@Q2jq2DS}a4M#1#d+?51PVy1_zD*++Jn=a&I)l;++97d0aT z>ww6rLBZtwQ|xc}6q_Zmm;Jv%!n$GAEjm6AnB@l?oYag1P`?>GR%4@Th6oQ`ZQfp9 zVWDC5B;-CRo_-r&O(3|~GHJg6u+1S<|E&MqYc>0$X{htp4H_1~3A*Ui_&5lYtZjj^ zT2SBd8EsLJ)MXzhdBc~#+Qdr@@q|goyj3@vP!4)UKPM1yI%R#T)<byf zBlP7Bj0y~@|Ck;c90#2e4`{8WN!!H2){z!+ip^$5!UkJE@7G^CbHlBp183BcpWR8B zjtO0|&xsyPp$gz}^zETxcjl3Q!c`RYBya}c<0$79>X5E;Nh5bUJIDpX&I$T5&|buG zM}*BC^2t^A9P*9{;t5b&(y1Z=Q#wF8L&SAW>h_VigDGGsl1Jr>vTCEyha5khcDR9~ z2+i+Xnpva0;kFK9XN&f!xc9$e5Hj@H+EG>>)Z3tbd%(8cPsykMS!ze|Y@+j2$#;+i zoqr;&#$NTNv{&y;X1gN}dm!(u^F&UoJ5#VIt759m5KB;r<`5ORam58yoh`DzLEVPz zn!0Ze|1;*h_=TH`y0A~bbPc5`B}PMukE3G~6`yoyBNw%|j(G*eYAmD*giu;ng?dV7 z*#jP?D5YZ&6|cmZJD2jCu$a%oW2Ftyd=m%@#+`MNt{yx{`uKvD z=LJKEw{cS-)+n!h)8K^|E(D(Ci)QO-Xk+(T9^&I!$V*WAm~jo}k3~O}Zd7kyFn~AP z6rlLg9_1Wh^cbdYf;pr*EjT@|aC`{)y23@{yI2u8!&?j_zpIlu@kGO9yMAFppfsX< z%X%kM{$y5KV^6Qg0(KVC5rh7QffvJ3(GL)g&+Paj!bQtON_5iM&Hm{EGr%+$CZ;yZ zG^aGstfk~KpxMT#@ZrO`K;jC6XVgRs*B8#(=f=^jc%4??y__^tIHh9AUGWI=; z;Q}N$R9Q<-!}c3Ud>^$2x9GeA^5HsRmW1uncvmd+KsY%0MTst#j-`E9=8-ORL{ML= zI(YHLd1eZ)9WD$vf$0{q1t7i=w2CE9K8qdoLf2e=xB$2a`udO=d!FTMBR+B^x}U{Q z3|X%zG3cOVOC&(G`&>2h7q2}v*KVcXJJzI^&$JA5JjtsWlD|Dyj?7cPxkr@{+{0}%L;+zS8V-;D(-oTEk%8A zN~=++s9eo#FApK^a#^iZu3F7x*C%xGpNU+MI8yHM;Ol;``cr_)uqU)ImXkV{ z^ib07=9QBOZc22o7*miNI&}3n#(Ku`hDz55S|&c!E=R47#XEGh>Uw+Q0f(tk=gN^z zL8y@$`TTORZNic5V_}f{RUJogsM_j}p|z3Z0nw)Hv!&NRPTZwo)$q^f3<1Z&dA)H2 zNk+U>YE!JMONuu}<_o(Pn>#5S$Jg(7SQv~y1!Y=gUKJMxu`;qHr2R5ea{mSP%EH=A0$U+_FS6MTXST zJ8rsYvq+fb*?q_Hd>FW0!Lsdyw_gcF2lpnOkJZOvOi}!^F1;?rOzt z3U;UpMll9i(+*kO2V^5*wT2Su!BJ^?q^TvErb*|M%k#4|j;BlPxfL}}O^J*Z6`VUs3H^aUno)@k9cof&DN&goX4CJB*DM^TF0fvE%e zr~u-W=VPp zW{F{T5#=B&XJ@^@*aej+9lDgtL2kv?1z=Z?^B)Z4e<`N&AK(4=@BLrGn*Rg)8ry$mQ~wET{)L+U=dfls z4tp%dH?OY{&n@7=y|e684R`JofEPRawY!~L8#aKj=89>ykw&EBsBdoUuQ+N|XJ?t2 zn&Sa~zj;r_am8&bL=WZBNf`^!B#iP1pB1?pM$I2Z4lk z43BPWSZ`YcSL`;fV^V1M<#kus&A1Hnd>*~tQa^6eZj72reMUJzCD!xy`MO=48Oj0D z0sw8R3VkIMtNg&J-J=i$)h+IUK~_+*`fw^qHTWx?*&XFOQced5>mb(fLbnA+k8-!#B# z|9~zi#y49+Z^sznB$O&tgpzN@vbd{)c4hLK$#~3t0qFq<`I+m)_2`g=SH~~Q?S1C}x-{y)OYKi_cNhSBj{b+M$`fjca4slid*orfZ)V8tH&(1_;o7)3D(3DO`sig&ZWk~8DJ0Ze z()G6weZ)~^B8#O4GxhG8N6S>cLT(;;TYK~dntB)?r?G7rrifC zczU;gy8y@l(BZpf>k=wpeq>1)$uRz3juI8`25me!V@ht4NSZ;=c}MQbVJV;W;BCDJ zqz=cp zA`rpZAK)k9Cja3~l2$bFO@`cWV%xnPJk)dkeUtKc<=K~sFNP=8gD?6(*n_YpdF+5c zlC$c7Kf#G&_~xasCOXs|e3sKjA{9B-U86@jGk*F!)t6G+@W z{3#Jih^qg%Ag~*bBF-RF3Y3X5vJUvPGVFeUivR6{M$-l~GFWmKLDrwR&AUMER|x2y zUkq6~NwdBYAi%nyhXz0)Fa4Md`7_c$n|5$q!kn;e>HUih1|3<0{)#|e!_h7^wz>E7 zL!2+i!BPD4CE_NeAJxhy?i@4e^k|r@z(}f<=7Y`lEc??UH6u6!)H;YLC6zMm;!uoa zn#v>MGU$^t&sdLL4M&&myaVOH3%~L}Den^}lGL)hXCfyHm^mNtVH5?H;-Zu;$ClF{ zg(@}qO2*!n_jgCsu^uGwswxIhl+!(M-ss;BAx%pD4uxYQen0jZ#{{j!Gtj(2GJy0Z zH^O)jS;tolWo3ld90LeIi^gGRnry2bR4uSUXT}n#rjN6{xRG? zMhqEPU_8GAb_5IOnp4M^+*-(`?uTaHv#X+z!~;bH7u5$BvqBOG2VfFE@Q>WA!5izR z;zJO#d?mkLF-ku`2c>!-Iv8d^eBho81hj&e3`!?{}spd$l&Qiw-W%+M7V%;CRw*xQCX12+DlKi1i zeDA=GNe>9)@FV8wN5~kgdL$BV1v;d82pq*U;u^yOS%!3(`B z|Cn(Gi0b-36?pGeB6&U<)UOC`#%l3cKVlW?LtPt(Xpy~!Ai~yf=t$bMqIhT&TRsx* z(MRU}y4@dU-qCi)^$cnfYKGN2Zsa!i7cXy_BF;{h^y)IBmj{M0M7UL!4par)hZ{Mg zufqUc=mkv&Xgr39BUS&2jX8<*nGzo<`hBr{i*ff;0vFyvg^yCz<=y!@xk;)$M`;fE z!ufY4SF;AJXm*LSXw(fvLrRnV7Wx5JehbcHHh-=5{Qhp-+$i30U3pG#*cdeC@!;Cy z+XLB?4%yb|9-F(FuG_zRK2g^W^@>WJnVu*+ru5uxpTE3F9QjE!?f+UC?sX?3ArE2NsK&x>jn;Y=@rBh4*}TLTjz7SRS= z@uojM{iwa335~B&=@RC&uMna<%pQ?CU6x)~F%PYyZVq5IY2_TMU^d27;mB8V;3p!i zl5e^BON0DAtlfp@iG0l-%6VP?fa&z-GgJE=nt_toRUBuVuC%n9uTXQW*NZ`P$iDOr zeu3V2GW*<#>6lsJX*M`?$)8;Wa=XCYNaOm$8vKa03}IueWutW~xGBdeX_O%B2x1DQ zd3iK~oO5Cr7b$Keo9WKH9pXaXDFJ_q`9>LTAJY^LG6SDIBaB^zs^al3+cHr(P~|y( z$fV8Zeik*B#a=op=MdO%wPL)e)K!Ssl?e>-8_Q`7Z^l+0ej!wMTMCqAhPt5v%J0C1 z|FJvgDa<*X>u1*KwaRiVZS^0OaGxzjUqueSASINl`ShzWhsteRFY8fULS|`=?nvba z+hc9i&q(DKqXmJPhU_K5t9?$>u}G=&*kfVJLw5%+EK&q{!T{c_2eT(^miwj=rva6KUf}@8*sYeM1PklzoDRljT2CfX?H84H2wDfU5vZjC*w<%Z&mj z7CabGKYcaetI~sk>W5Nw1Cx&QF!NU{&InqcG=elpwm>vwEFlgr?l#TazX3kJ6Xqx? z?*$j1&{rZF6VVwEIWpxUJEet;MsA%UZ^rlvO+Bze zy<$cqw4SM4 z=(j~{P8pa-$c7&!)~Fy1L;`DBoYKyOsKsKIR3UN)Ef>h`xK~;rfQDIz>47IjW+>*j zx0}CrY}*q7fvW}zER$xlo*$Q9JDph7AZY1d@OC%dHPrOu?Pv-dqA4BacXcKL4#mnr z0hiTOlaBnzGOd|G8Og?K*b7qj3j5+V8gHg!F;)~2qAlumvcPO~mA+JOA^0&*d4+H{ zg-U;#3bCSeJ?tj~MalmqbHYkCUkz{w5mcnV-78*7o8st#=QKkqbas$TSTR&A{>0^& zOJ-=4yfT8Yz`S#K)!>jOU7S!f6WAhwiqyR6H5y$<*)EJJS^ydt-?c6Ahq!YWe-#%K zO@ix2F~gSO#o(z=BKJb5Zd8aY8W#;3X`U2qGC!mZifU1e4l_RLXmYJcA#95*{B<`B z!Xj*45)UV@UBB1wrA#P0Stmi-)bUPe!Wacw+@^@ExcUXFqcicTtY#_6MkRImGZ&{r z6{?O)M@`PIBwq7p&>E{_WaP`7c}cx!6yLU8eH6P*2|wJJH`H|vatK(YNqORq1Qc(Z z(>D7aMx3~W)+;iCbt<`F6C!9b-Pv@mR^ zWhq8iPzkBD^k!6s2^3Ph7dwFF@akL2{_X*%u!T^ATAOK; zZ9$#jbALlsz*<`CF{54Hj+y|2W(VY-2TW;VoioKbN+OqCHvAR&K?a^v`Tv|F{)q06k3({C+Y(@#RY^-ow|qTzgkAEoRys0T$J>$ z%+RVD$s!tkNT`M>t>9{%0B?%Mt7~aHc1qi}gb7&qFrjWW*%X}Hm=%m0YU@1SefxV{ zetv@v1L4woW{$$_LT`8wW6%x&}t(uW4gEpT&$x?6K>-QiT zC0iKuH?LlO5s7q+%`t~ z8DcTVjnhY`%lWm#_X{)G6`1vm`ETuIR(w!-$f>Bf;OrsWmCODs3>HKCpsKrWhHqwD z=i&}@FNqp!M=mJ%v-9T$r8ZuO59$%N7=hfms`xfAA!?*?cVe>M50Alo-gnl|0yys= zOB2~WGoGjQ|3lE5cyd8RZ2ao@OsJa8L*?EWb)d+udm4Wk2`-bq{IJM~p5Y;5S~lp$yp2eqSRqkzDJPT|2wPg)pmk_uptH|9<)s6nVH%6QlW zV0@v1F+SaJ->OKe;1NwswvZ7l1PZm6wsR0h6A092yQ$FF8_WZX5H+oDiZ{}v?XdTD z%HuuU8cc3M=`EWasGfyc^TIG6|jlOUSMYTboPJ? zWy|#B+kyo4^Z|s4^xTexmXm6+{rwdK`GD07V7m2-B|lB#2*%|{WM$WkOK4Dr5`$&@ zL4c^hCAAGp;mhMaW-~XE*?<5Eg46(lq48FGV?-=p*g=yrO%w)1Xw8{$EaNAcEF@64 zN3Pjx!ix(9gjL!MHK(EL-)4h-(dw=}MdU22S?_#3d{Z6b?u^|W4$WoviK z?E8op9CmGzh&xW?f@$;AA8U@@OsB^Fwb9l~WD`4*f-P_gykgoIB@1=hI;0~S5fr-g z*a9-ygIa?gypkHd=t!w?+H4>&$+QVj?6`MTEBR$egY%9l!J}jja%Gz_!5#>j1PX~R zk)4*Q{jwX{;Hox-TfPKmslYmeazUAk;2Vl*>{^;3bz44X%+g}spRh6vOA3RW^v_xP zJ8q2JYDDjI1>BPZTWJIkEJoZ4-FjA`J^Ka#hr;%Q`V z%#B))CbEpBs4do`A_9$lri5y7?JPXVi>bZ)5^HkQD{Ggtr8Nw@1T@s}h*cr(FOP&kAlGJ-oi0Q;mv=3qrNV!rd%a-Lqc+UtN%M)dqb!@&z9exLJc@T=Zvu zG)&z7HACC^=@9;k0P$g~k|z*do3uKRKzOO&2KY8OV^g+%?FqLTd| zu7y$>pIe3S(_V>6Lqr#CCTxsSNRm5t7{`zn?>QuZ47;{CL==j!+3t!=B>RAXNf60^ z33e#JKBy5Mlx-@WJXaVIPof7GXpuS)W12^KtN@Pw8cZ8*rR4IQR56=l!`z8K9I1(= z$xNs^QcS@^gh#?2MlvQ|r0mPkpp-<^4mzXkWLT@?3eC2ZEx;);j-N!*_iVi);rLfP z^0qpBK!+f8+ms{(^HTo&6V^O0`77~PTa)VnD>RqJnOl4^f{8^6@4fOJ1CJQc@r8H7 zpuEMV&_7NHANY@yXCPuapqQ7CuxGVeF3G_b6A~r*2QuNwN(c#6pKrZj74O}30-8{UMg2BDFy{on%rW=kl@x3*tm1==T=D8p56^vIuzHSp zSWTQ}SCMCAgYA#xV8MfMuIFn$5w22Wa&RSH4@(q<3)R|3_-f4_Nz zR(;6c$*^{(NCCIsd-yNzy+ikx^a>Nct3botL1||Qn;~hUG1JTvV^hi>Ww-N{ZoXo- z+s{q?)?VPmDyAi$z4#x*y<>1>Z{Mz+WMbR4ZQHgcb~5qAwr$(CZQD*J<|Gqi_x$&L zKl^^GcGdHIdiS@kRo%7vL-)1Tx{lv@oTdIX8+*wf?mf*!9M7z|ZG<#jmO(VnROAuH7ZD?*MZ@e)t)635I2&Q9JLpHubpzsUT}OX9rxgFch*oVgOI$ zOXxP%SZr9M87x{C4*@$a0p!$~vT%HdPF_8Rph~eIG6(hV?ye4af8Ui zCRIoWD-y25_@GkM^d-z#9>V%C-{1#tnuVjWnETObykce{X8{fY0=`#b0OGeCBh{4F zOGCzR$hW+Sed7&yrCZ@god#$j(B6iSQQQ;bDI9k7DlB1n;F$@ad&)duL&OwxPh$5i$TX$|Fot@4Ulo~79^1_=eyB%&sD$EeU zF6gXCKR7p~7d^%c8}yXKRwMp?ubBcTOm14YyKKS(vQ8^^a%9agsViIGferV&wYBt*3? za5R^@=lqQKNv2Ub?#_Ckhn-%>F<#bTK_IPcRA(*rw6epr35LWjHEmHRaFk^bd~esf zm!OE49$yCuIx_J;701`@eRk=sDGF+s*l1MJs~)If7gYN|!@-^eW@|0?h_3F(qSb;27v8IVshH%QU1D<9dzrQ^6B;x_7|@oNyizZS(UTU5>g ze?M?#fT_w}`B1}$|M8BSjht)&2llI)j7M1>N9GqwbeBfKfvdIY>$@!!N?vk}I>p1M z2uw88ORVkI0E3`jwvgMX=&%ARY0KPi*i~K|L+{xjP(#RoXqcD%=*%1}rEzu4LAs8{ zn(&BRoWbVtoi&bnAkfE$FzEy%v;I3|c-pk~R~Bu_rv#qz=$EdEH(2UuL!{ihZ@4f{ zO`(#i%5*bKn&(FL^bss6Qek9SUNLf?Gsc)8wTsgsdZm3&7ke`DRgc-WOz+%i#djjc zpk5d-`DlK6k+GFT)qQ~_vs5lGRS|_8s>Dl!XxvHId4c#@F&=Z_R<=SBgb6-2#FhyM zywGyVRVEtSXALDF@pzEx)P5y4oN^dha;julO3ABdthLWLXkd3G|2M4lZ}Hgw$G*n# z*QEAu%=ACSTK}?@{Rh_iON;(zSnJ47y=LqnUZ zm|D*YvS8j~kJWDk*7v;U+~<5|@sruL^w887x8vT_H>2~jP9O^*H2>|T{%!VJ?&$@i z_hGwIzeD8tX_Ch4qK<(4Q-9|{q&JuT#Mm|C?Za!Q`!)Zq6k-k+{&0)0>wH8dZ&?6A zz&ZEJY>S|y$J1^5qo?!j3gc~q_D)%*g(rEnL^g49W)f=8wb8K8_Gwts?b4_fQB$HXak>|Gd1uPVOFwLlq^TW9{_45e%ZPpAQT$wBUe_zx6)BLdix?Nq`fmRbJiZ`Q zo--h{T4&MPNBnaRZsUv@VjDO-=OE7~&!#2#i@~h(I1g*7;zp=du+pR?SjSJgD^m4h z$6UAKx>W`!yk7dN5KUs0S)TPLN~kI|D+V(Z9$tVRiuYt0^zH-%YsFUU*u;yvz;&sV zw+x|Am+p*pOXJoke1Ci0D6F}Szb%1I0Z;U3=gR8Mb$#*nhu^eKlK{hDbMB3+itAHr z$(wAy_rcovYP!&RoZM4BxbsU*xxun`$sm3w!c*(43B_oM#_sqbJn82>hz^b_P!^E3 zBA&pmt3*FSdkh@b%@?v>FM>uHzMfR>_4RZ4SIWt^2ar|)2$KM1CiLD(hjBW`o%PcW zMiXfvsfpTnG2L2ai~QYf!>^G(J>3NrRKP>1uOS%WFM~eyOuoB^X}*=Z0t5l$1BP{X zhjJ*rR3g`jP;EesLEc-+x*TKYWc!W0VgK?0jXH(~7i6}Wnl+<(B+K6LVmr8T2o8vG z(Qn2UL0HG~0nMoUvEm>m#|XybUs@wb(8kVXpvLp1j`>m2!4axlQCMh(w8+Vf?78w- zQE&zx8?eTyh6ul%I1Z;dx5A7VKCz>cM?{^1h`=iqYL4JucP-8yT(og}Z8WfjK48Q6 z3Hhf*tJ8A#tJXZse2B~xy~*Zapi!!ABg#FZvEUa!FF~l=#Gu@VbKu83pFf#^F>vt> zkdw%OjLL#&c6+@c%!h~V-2aTG_JYC^^3?+42;Opcd6YPWg+h!c0lDh8=z8GB@nlhm zhB4>T(SK+ySYpXX4?>!G&&WQ06U{4j{Ou;q+=lOO5{PaJ6@wOvA)Ze zy(;H+PfwkHETaaI^#{tp@N!3NnHH1I{PAo538w-uvYFR!j8p%*D zU6#k7$^xrzhufy?qL{};KZi-TLK7MeM9h@QR$%#ToTpB7*I^2XAP^>kG+BL5@!_#t%fJJ?dh7a__JO&*>a7bRY8 zSB%?H&@yBp5d^NwD;3pv(%^&tU~x0-A!T~trNE9R_2ezDCNH5p-NFF0NwuG-8G)dxv2b%*~wrCO!z=h%fC zcZn#AcsMF)-a0LyNXavGIETl;$rTnyK7W7C6~;wdaN=7k#xlR}nZ`^Qd}Db)>$?{r z0t0%gsKFVUz`sTm>fH5QoB9n8;_A|e7Lf`VzM_sDka{Sh|Pv`IJ-H=`MUs=GffhGt)O2O1oFOZ2*_U|X|Ncg-vhx4Qg2wD56lOv z7H!plLr8E@&AZcOquD%biTk2>;ZPJd(Nz2jAoEl&c4Og^T+Y@9`iamq9wL(A@r_u#XNlbLysFai|il}URK^hQJ{z!m(yNBEkmyX%I*YO zYb5Qe-lXTb#>xB%!NKXgVk_2k_!9Ic$lPWR?TX^X!eSL$GEot>$l+rX?cvUzLxQZx zfGfFw*-w$Yc`&T{O?_(rvh3W3kYKvDc{rl-HD+9~a&~7CNqF!iy5!eqG`Q6q^0#RUcXwm5lh{#V+@CX^1K*uf^+oX6N47~M2+OlAVd$7h8-l& zq&@-RRZ3aD^_xi|lzoSSWKB>BVk}gS$3-KCqf;q2PQUh~eXwXbpwf zfC7AHLtd!b(vuK!bewl@Y@)6rw9ZcC@X8kCEwG>4xO97xSkrsu?Jui4kPfhb8QJOR zs$Fg(W?LF}f$8xAyr7KU0QE2u=~0WE_dl(|&*5Hm>X1T=7Bu-pJHU4l)M3i*@8}QG zz_||PAZM3J%EtT7FR$tpni!Mnis!y}X|W~fcw7GHuoVXEK* zVsu+p?PLs$D2716N2}6*$e_L+$wR`gM)BxmBW5+$V8j^MW;U@4o2b;-fP*vih~iB! zbFd1JQD>|dWeOMw_RDIODiUiuXkJwj$GMS`l*pBplgOVYQLft;NeW3G49?PWhZXE8 z`en$0UnakKjB4l3?TH78HjP+hOLFFe33IiFo9|c;oOZDo8p)>?Q8l6b#B36YPu-A$ zw+&R{TG!-(t6b1zgR>>lJ`zlO3o={S>_Dgfj*8MjIg%!3d+j3_k3<99mjpY2&n;yRe+rZ2s zcxzVBu$7cm5nJt4@6JG!iFNvti;j8FY$KqbGQxz`Ok9Wl!Cs$xdUFsq>c)i%aqRAV zP;%77HTPzj3f;$HJs3e5;TSV<$gceTI7@UPW*(H4-g6{|?B#@+5h}g{ZU}O1uW#If z&+fYk*ODAH51EQCs00&QHC!$oBNBcvOk zT@^uA#6N4@i;P^Y3^5p?+?`NuBjEawk#@I#7-s7@jG2X?c$Ha9g?%6Z62sHXoD6FN zAnG`TigmccV#uekQ{saeXl%3jzullUMpl5Q%H&`H1!hn-E83SvV{O%GeU1eeKVZ{v zsVmkh0h+By1KO6qdalNSt3NV>A)Bc}>FTW%&Z~PNvq2^rIxI)(y-%mcx1(la5*nAr zVtu2#g`DuS!X+Y|BPUTM8?>Krfnf z#Jgg`K~>NTmBWeAT%X(ganMF1MNNLWOn$Q^ryjf}PB0PCTlHWZaux($(J&AY#1LT@ zA2v(TFo0Nn}ad(Au!^P3rQx6W%)}uA{N@;Wha_8cMY@2;s@Lec`Ei%Nt>urClorK zwI~(4A>SOipw~&`GZ(xO?>JmL{gzWV{(v#;oDeSi1wVl~F@@=JkMxSc+;96tZ6$%h zUU8ycS^!JXUtS~k=$-`~LbhGKzfPg;z~X6MLZJs(NL!idt%mka+UwY4+LL0$l45oI z9U7`fSq^pvf66ky6|;^q6QfZfoASgWIj~A3cA{akpPXtKI*B&!JVsMI(nmSgoN?sP z+5VC3hQakDGdN+1)9!{L`QNh^dYbYKw>cRe015x@cx#3QU&5M&llECv-G>#s%HK%Bv?o`BI491#bP8gMFF zZ~&SB%Z>sCVK1v|KbOmbddLU~=b}MSfu4K7co4+M6Rl6Y)-bbVp(k0R;vEr)T4ib2 z)TNVi0EjmXLk9;%rm-efOHk7Q=U7e(1i+gvYM1oidS($XNjd7B>5N?{CXDsWe!~TA z0aD24&SwN-bZdd&G+@`!ZB^=QCU3Qrq$7LgU-!j7`PA^k*(3Kwfn^_bc_LV1LbfybF zUOFZB4+>~pvJhv7EMX3&>%>Iym`2rTCk~v*it&($9|%6uRdDf~LCzV+?3O;%=W}T< zh*m7;P&#jD6We0XSzC>ut-qy^j_k9*PTh5}5>1u%TV9nfJuzeYH&o)k5-&Z+il%UV zRe;Jnl$|0bs2Mr%I#VNyv7E?<7T@p@QHe#w6nad`o*O@xAcztaTpc|*c6vuu2o6|? z=FVc5mIeM8LRL8>wd}+iUcsk>Q%@?wRb@2)nmC*EgXl2uovMSDH2h@@vcZjp1f@!u zLWOo0Av-W?k^7KqTooi10~xw%|_LSQNuV7*aklMlxV7Ze(01chKE50m+YFEK)(+JgN7K*xE&5vVKa}LSu1(;&F&SV zxPG_@2f^m3IbRhs&CL0DN#eTKCeJo$FqL-?=h?-?r|UF;yeX?ZibZ zF`;eR@r4EFMfJm(YY&ZNqJ(4OgoaboLfq<9if`)OH$8?}H?loOuGeshqwk7}4Bi(O zBo`%Wx~CYjNA%icXC0L_RR*CQ|1$HAW+RF6(J*5+}IRU-&0WBwGe8z1rAcC4B{=efag8|W?` z_7fzZrU<|v=7{z0 zan&v%w-(BCtD9H@-=vvVN?gE~1b>A;ifDdhe4w?D9hVVC-Z%#avtV3l^;d?g=EbKG z&T(QI_aTx5j0rInMi}{*0M+wihv}{`$>LEProAj(Xue95Qp*yD4;P9K#N!4B*4!ls zVO$S`)z}5ptc}kRc&EN-@0}W6+$@g79Zfw-XQYLU##f_D7l60DGy4&2tQ z=eoL8ApwVh7i+lfyWA_fPqEOU^Sc{gm`V}m2ifT$4{_G0W%2KJosgw)nE)$q3Z+VZ zAE9z&O`ZhM0(pEM%-eEO`8!m+ggHNLka9J4Xte#Gj!stw@=GP+c_soCQrUgIEzos^||iqA4)tf;Dsru(zJL` zN_KoG6-nlv*rtbIPAcGc#c$B6t>#L+?5eD{Vh&?fqtZNR`@GvpKgHnRf z36M-1QsG&jefCGs;%<@|ScqN(qy)^ID>2Pb!DWya5Iy+>vA&}eL_zaH6H>5%<$-5k z38a;zGpuXXua`(-jUo^vFis#)BcJrgb~PyK%t@8zpc*8S@r;HG zlFBrmk@MRH70`u<@puYgOrwVI`0wh9r(+vD6c^<8x#_v!2YykJo1IZVGp7ZGaz8m(dOU}sP7DsKb_17IR>*(RH1^zDEP_BiE z+R&Q~1z$egm>;YBT|azRcRnr-y*FE3?QS;9yALl2t~Z&wY;Qk1pU*CyQF1@?y`N7W z??WlQh(?z1O71PunY1I~;dYJ!cblKC1_{RLC;^6xZ)QTKu!GK=G1eOvE6u=kk0Ly| z9fN1I!lK`+%8Yn%any$G^tVOmT+{ef?^2&ph!1{Z?0zMCo)Gm6=H_m<=I&YR3-e58 zxV+YfYQ|Bb&@Rg3G=FnHSYUO{CA~_L*%6WWVAOTAHO#p0N~375@fu7(NJB&C9E(Qt ziG6|BwC#CesNM0tKdiJH_*z-@I6W5eJu`8uZ;Kvp(n-Yfz+8Cog5iKH4N<8uJAE7U z;vXz80CTg`v>;z~n*(g%&e!(Z%Y3}7V#15h?G7ql#{inX5WT)|che7N4OOgDKN&#< z{v_~eS*M;c(ykZ`gQlQd5%S3H?OJpk5`ESp^k(q9Tt2zZ)4v*ra@B4QKrUe&GjR;t zs0Rbvt_xG_z|eAWoot&fkG?!TDINHR0US@mBVVW*x682v2h`!^PZa5o-i`d-J^_`} zjPex9?47!;(;!P8K+Zh=gY7pOOn44JlKi>!X^(e|IkBUMKw+`9BeqtEFgqaz^mDbXO131fIcL!$${O6UW6G1@MWaS++;HZMdi zl|j8@kW26j_CVLiqyX3|eiKm56JxHbNK)h|iZ~(mT{P{JRte*tE5OS;SUT(M^_o#{ zMui9A-VhgW2DTI}?@s9{(jcw$@%n;p^*m(JklSS#6YYX!1_mID_$6yf^|QjT`iTtl zAjzR%hKA-$Z2w$viD7qiX@C0dZde*m z&~G=N;g<(p7fPq`1pe&4k}urjEd<_kBmOBxLH`Qs*3Am1HO(5gBF|@m(n%S;N#6oY zI5M#4Mn#H#sy%~6)D7%E@qFfzlKLk9_}uBH2=)>m@$ImydvpKlH30d}*RvlAq}}xv z^R?gFliYG&UcKF?JOE0x+lxd7G!CK&bu5I2jCz{`bWBi~g1`JoJOj2YDeJPW`}5+&*1eU z09O2mrK{7>yWyJUfefi891z9Z8yNaLK}$g)5k`OaBFPs7>};or!}um$qNSh(p~5nU zCghF1WBvtf-h&+YU(}1AN@csaE!31E1k`FISz~fV>d7mAeAMB{2-h^_`1yihmZ^g% z=yee3RWlKDIDZJa1ua@b)`(^T)rfNWFf=G66)Jcf*x#4bh?Fqv*{eHX$Dh6(InDY9 zs)7PKT2S}cZb3fLw(`meXrnkaIf-dU=dG{=>+OQJ*|qWIPoOE}wa_n)x&A3=G3$cT zvQL%`X{Iew&ft`zG<^!L?_lwfbx{jK*gkB zF`Nx6Pb}kDud`a)qOT!rXfHTbHdiZU)-(LnR8V|*G1t;Wh9n6hE`>%dj|&>sm1`5U z$v>c3Y_&93v~0_u#u=SJ?bD81Rc=QKfR_K}Sfu1-EJ}v{ z^&E*MR14t)ytqtn?bQ(mGsVQre_IboVrje-$z3^f86D0x-3EA5IhMZWw3KHV>&bJD z@EY!*AdAAe-3A;Ym2#OD7}MK@x+2JaU{+wIF=_}-+5PYgjT>1)V3R5eBK@@rV(IiG z_72i88lC5bZ9fIII$K1W4^+`mv|P#CkEBM1-keX9<*e>Zc0!sC>oB?Y;|RQ@f+4(P ztqjDocSRPvRs=gp{|iar^l(nNFlQ`^cmizH;nDq!XOfVh1L5)&*f0()o*wIuc?C=?p4y6T45|a?j zUZ;4%AX61)jaiVHKGRRM;)fu!JX;l$=tkav15|(ZNXGHa)pAR>IB9^nDD)3;(R5~P zS9X?s%76;^c)%QZ4N1ZJE)tXB6B{)xIB7X*wk5@JwPZF2H*vuFt0N2Tt`Jzmy&@mv z*FdB^4>2ARW>+;&amj1Fni3N zLK359{UL5*=6-5`C8njte+3Cpx&0G|a#Ld$X?|;a38{ZyBSBR(_b1ctz8t7%>3M(mghjMW>s&QyFwhF5**{ljBwF9z24df1j#_n`N z?o#AO@-TD#HD9uiW8OMXeo2tLM46*R+E_82=SXTEOIgDsZv1e=B^?;8C^uhC;nyfhLz? zdcBt@oB#V-aV^)eyd%&VP>{8NH#SbI#`UB9n>v%!r6WISS_1+CO!iiPe9<5xk(LxL zjvM}r3I(eT;bEcmGu<=&YMpJcWfp=~O;c&zAEXSlE?tFNa%u^5)#gS5&Y}DOTV2xE z@%Qm+A=8@UYM7(8;q19>4z)s=WBDR&SBk@iGx?$o7mCBCU-G&mM@l|qi4y+^%-xHa zsNu^*ogFdkVk{_^7GiRs!R0&Oshi41U4o$?GDKDidL)G+>5%H4gE!DPAEm8kN}j7- zg2S=nesz`vh$)x3<9cjXDLzG7X!Jp$vp4s2``^^n6Do_J`!}p3!8O`pIY1)%t|zdOQgC%^J#vOJ;>)`fWR3uZs(lU$J1hm zUyY5dMXZW%gU^mpH4Ij3asb$10U2K%g?q$F>Q)D%ULJYt<^9|eg5!HvjSKx4i40PX zQgVB_lOarlCu-cx==GL(eYUH9b@LEEZx9+N zV9j}#-P$sI?AU8NWcxnHnq9ZtGw3I+O&ZKOH?gD$$_j!?a6cz0jC#RZ2NwPkp&YY; z1mPd}!+}_f!tdreL8yvN8B?n?>IzH3`WNo&C900vL@GqNVAxy%F#?x7$Cl2^c1 z7%Qt`*!V4q1^qh)Ac&qlV20L)RVmQ&0)zwShQ-@`YV7zBjX91eQhUen!(=BG{?tAR zhSdz^37_qgn~tY&qa55+K^bjLXjDNF1Ehzr!%VBhqxvFy(&$VFYkl~NiKQy_x@$&e zd#%!9qi9pa%fy>=1t6+sd)qHl1>6oE(*rgguH>9K37poFW~_B&Q4 zRLKwMJ_uBaI|>~+Emct`k$^i?w3)Mv+ruml~xrdL`5 z*9^Mc08T7%vr@77*-O@oKt$6q51t=MYaIn}DYc`xY^Utql60NlV0MflMN`wx z&K4LGu^?(ESO`;OH|0%&1(NEYuw^$%1Ea78BJ(Oa&8e;Su%90CYb*fu%rpilhcv=5M*z#GpeTk8_dO4*qqGLk(OQng|ik&>jma_4YPsB+R-| z&Y#YGY&sfg5X;pRm4dJdLxTvBxK)GxQpueZ!-4mdXn>?WOu6WiK9Ov9j~oycCP#2U zhmmh!NKKw;lxnu#{7FGQk^jQKyCvZT?+Oz z6({YsXwCObTN4Z-rY#JI>XhZAIKL`2%kzmy&ikGh#6(_|nDtke3wPCXVbEG{uZn5> z+XH%|dyge_n@9_>dt;DYO#_v}&1ux|Eu*NPNE#e{SPeKGNN`#4@3JO;to|9+3j?mk zkRY&lbeo6yBMjJieR%g^7(zrNym0yc%~Zc@h=BDt|0yK6#k(5u>Lw$#qdk9k8ZJLL zI~vpm^EMj6EBEHT^}^Ud;TsN66B;oux9F>Rt8h@MX@DlKpOHfvMU!yQ3^ZUNEd?B< zkD0r@8&U_H67gzprE>+^gGXD89r|0z4V93m0~tS|SJgCv2i*YtZ*Wt-lbI03@V#lc2d^fvemnik z8F2a2Vr&Ay%>x>=3W5T2ehvj2f7@u2AAFCBwI4;!-PVy&^|8A|>%d`8B%!^MqEGn% z3Vi^kB5Tj{@woe;p~B*dI8U&PVw(<;txc&UhEUK2Grj{-5Idjf7!_(YhLAn+#d_$= zfYF=hpgS171YBk|Xf-wztdGcV=>lftwZ};}8!-@Mw0OTl3v_EQ$QkMgFtRn0e)4b_ zpjDTUCIZ$1RH!7%UsK{H@r3h36DY9w({LYLx_FOE+j-5r4<}VfHQ2CeN*Pl8?YqFn z)jD#($2A({=yE0<4YK@SyK1cQW}&Q`v{|Tx&6~E3ev?soy@Way>(y8=m+E0z+Y39S zhLXJOfY;ES!<1B|l3whWDP~EqtL5lfCd!1=2ngfKl`Q?=*u%!Crm{qBkC!56wu<7@ zc>weLF%bu-uS#?w)#Xu5OR@K?IMIm?fm~#-mhG%@jxfR|PP5^CmhlmIoA^%}g64nN z!Jc)hw+-i$;OQPMGJ&AChDtx6vp_{JsebI9*H0E!tpanTpE&%eTxZ0_Fg36-6QxW~9X+{l6yP)tfou%gD?q?eOomVz=VU%|$sM$@s8n-BR4+Qc9D z`07dn4%K)2h}y)*?z|#$K4Y-+Ok+oZ=)T(Dz~1T!t^#Jf#;M>n!oXjAFld$*gZ1|W zZ6ZdSm#!mcRw87khYG_@=S`*7MMmaArb~i~Hbr-HfJuhJv*+~OQLknT)k+wH#0q!O zBc=Cij2gHRkF5tEig4y!>(Aa@PnT=qCxhM4?>TiKLZd&G+^oti?Il7n#t=36fa6Oh zn$%qsUrA}41D~|w>)|w^T0d~^98<3=e#QKN`#Zrvda`|*-s*|ZY};y!m%F>$w?BL^ zF@DKkzWN#R(-ti2ZKy%l_rh+hZ8)$y7*IPb;t!4(TlTW}$YJt#hihXu?%(TkFVR2i zGvKVR{MD2_%%xl2zOUe+vL(|m`9}{+@S#3^biTtaq5H$aDq*EX+Oef0V!|r;;A}Yw zRy;Y_6q~QlZq%FD#4a0es876*1r$Vx-;JMFt9E?}43!1se{Ea`^fsyRrql`8E#-jo z9;J9>1gfcdV4qT@41*xsURd55FHO9StQ%{lQN}KF%@d1+G`P5MGe5dxDZZ??-HZpo z9lr#nfWtSH!e;0m9H)dB@VTjTYGLU2%d;ZD;R_MB5|s2>1X%JW0G=i|elqYT2v7!Z z4q+2GL68l&r0w*P$sU+V<>J?1#*ZZ;Su$IT;*yj~WzNF$5xmfq2(fgwsIE-S?JLbx z;W#S*UywX7yR}oNc}{1RVQI}Prf}X!z}*$+rSVbyar!<^Cumv#(97ajH}Ba@=B2n- zY?qz4I@=e+qd~p@?kBq^d*RJ@_aO7^P-I80IFe;`c0}G%$ePMb=@+Zwc~Q|F0SZ?i zl_vfDlT3=NLUbS>7pzaiR_=_v3B&3F7kYL%u*O3p?)w$uwRGjN4^VqOm{-G zzMXm8*<`{tr|%uQGaT`=6GTUAI2eSVWuvJ&cB~4NIXjoMFRe(HBqLlmuB6wYktS zZ7qgrp-^X1?G4FCR0`vRhkcd42S!Rkcy~{#_UVsO;@YhTWT;jz25``g9{z$v#DUv% zS@?&*sL1((XnAp}_|WOjlG;SM6hN}IAgIzgbgE>i35mk_siDC)(5T3{$f)83)BWp` zM;FHCG^^7NS0N^L6j@K0WzltVctuJS~_s|ACWyIrLq#zMT8y{kB+3vx6xaLDI| ztsIgj1?mO0Qf*;9^<{Ju(tY7Tbs9R#OV{>4*gINO&aS`S^qcpB9&O;*Cv;udL`QyT z@DcjWCUTS7Yd18e15*IcepaI6S-ticz1{1>#d}~4e9v8(RQxIgb@30(l^FKtH9Jw* z+YMOnYuVsu6uFccW{g$NnrAbDaoZm^lpz+2W-TQr>=X(w3@eYkip!{62@v2%GtKNUw z;64lq81?V3?C)bAI09N0IcBvxFafe?b)6*{j5^=QWg{e*%3lHIW;o$1_pra>FV*$j z2ct#D?LR23+9yV7R~wNQi>(sRggZ|!#Uoo!=l-e>hR#$doYx3vf}@##g8!bCoC9@LEyf%;+wLRF*3vd@+O3Hg^0z1)&zyIVaQm zEiW7$?;zliSuud&cCV7|CA#AE4A|<6zN~W zy8pgQi1R=FaQ_b|(tpN?{);00s~hRRr$|b%BoekhH~RCjEP}L^oy&Aou?~+w5dPjV z5bdG5h*hrU-Ao7HbDu7^KHj{lVuy`>YBXzStam#Z2<9YH0=k5J#2VI$1)6u8e62cr zt{$)4E;m$mTLlDKd@XjHbA9jft@XVvp7whYY6V+&|3G}|d~)7w9yaY}mp(4XUJ3BA zhSGbL0BVEkKi*wGYTSYvdRG#0uNxZx4ZrP?Fiu6NPSD&tYTM)hm)~B171UIOrW#fi>`*eB=?$fi*n=HLs7?Z?~^M z6v202?s`683EnlH^AKuP+_pPij~0)wiMsCDyM9mV3syh>?!1jaOWWW9jH7#f`Cf05 zsFOrJGSA&E3hV;p3voV}u)6vohNrF~2rQjVuxT#qCaqjhusAgiyn>sI!{1;%1p3Tf zLJwcOHe%tjE}}KRu;bkf2)T{czfrVh)bEvU-_aFY!v{O059YAYKAfZhr4__aT;dhje5uV@ggS(@(ITRmIg#I)uu02S&L)A z;nEil#fdbe$l3`^Q3m_{DuSK68yGy>Al(JF8F0uow;0bnX8Z#eh1#1810I_kA_>rswO|uczO&ui6OP4y(C5czSfUrp#9xCL#Fv zUfkaY;Rc4M-D)!OZ(K)F*cGWaJO_nY+DA-t-TKi!Qr?I|{Gqy@Q@(Bnd!YJ8v=<4V zKdHK$U~2~}R%ZO{?-mU}6qYyKhkO|I10$elDK>;$()xNAoe?^3YxO=?x6aIcyI@@A zZ+NEKZDB(1>TqJ#m@7i~So+v>!a8|njkq~)woO*v4he1o$G#BF2C*vQjTuIid)|ZR z6E-{q&bn?gU*BJmdP2s2pPFjd|1m@Qw1JlYDT61^eAo20CT@mPYm-q_VOKFC2H5XH zew-o)H!-aG^JAIQ0b&wsnA0yTJ18bkF8wgYQk7b@XyVDC@W2mHu(OrY9=eQ1d=sr> zwtEGCvbcu-gu?Ctfjr3kyX5|v?p}t8I>;W9^ulEkZqatjwUG%r#5fBhWUwurC3|?f zAoj<+|H!mq!Av1^egBjKnav|Gy;0z+jpq>i=pf|UA8fj*mB;*H8*AHzXI%MhP<7=8 z5Fc|7=+Qu;!uw>oABO-TFOunHq^+4%DZ3ODl zM$m-GE$7VjEQQ-h6a&`*ey8i~P*hm+Gor64!QZ8r?AnAc+@Q(t58t03)Z9L9;yCWS z4V<^vScf`r;PIU1pRllegOn66DEnKriGwF!16+&DQ=GDW+##i?@j<|3? zO1^d(s~xDYm;n85rM;3|1|jPFWH6(H1L^3kd4>ON@hp$4Gu?8@Lz_)2$X%5!tB-O0 z`r;&zArGlfk?mb}nAgTq>rOYgg3$*Xv?~Zn7?IqLxc*Xr&ccCeB`CFhix+b7sj>%W z@yzc&Q5x-Ioen{sk;U?I>Uc|lidu{hIa=$0sebTGwF@jM4B2xN`mmc|$(oVokv|@~ z`zP_J3F(1Y8c^KwnR>_H9NdsQo%4J#TyYlemR&M$Q6fA4!XG;Hpl+{w1q9A!m9qoN zQzmWz?rh{#3Q#+%Kh=UJxCwF4&`vIQ0)FY!0t4T}Dv79@)^gwOhp z7Sj!s=`|lb39}N6y7_5O9k(#uA2t!4^;mW)+50o7zS>e;O|dM7JbFD|eMSPmSiY`g zR;=6MasiOofCgo)sGBbDFPO%Q)d+J2fgoupfnT0}7>q{I^DNOKyu6aqV6tCU)5*ok z&b)YtNfTZzZoj4Be#9;PUivk~zN*j^L>`9#S$~jpmC$V6a!+Mj;<<*_;z=wq;AHI#J=%NP=tatR^=-`W=crwW|@#9qo-uarSed?$!Xc0VED$A7PIqB-{{!PjtG@WFh zkMIXP{q@d(4ICnFac$xXQLhUhA+p!~5xb;aDnz%Bb#5tv5 zli`Y3L^Qr7a&+_#VUsLHY+?!l_lB^3c#X^mot$f~3c?v(5vBNqW5=TQ0LRhB`BOKC zb3$n~a)GB}}H@AqIy!qk8CjDbp^$L9O4Q88z$H#FR>ZhZU;^(e4E?DKSd_9b9FG<4vOOk0%M2g9%63w;*p4mP?)p z0!LreOwG&juSP206MJSMo;b3|8&yrkL0ZoPw84_%;mhc)+ct%9BdI zFR|+;IL%YgXE+*XGzfVP?w=8!6liIJpXpii>mNXg37j-4pL|NYYJ35EvId+Z>mu6H+Y&RX zsZ{c64-RT$xa8-&71+p_x`Tzbr@3vcI>xYj4v=uAuj%*@O&#LThB@9FRK=^2gG zpVU(STB=>ORkfwkT90(y@IArmYhB3v?ueT-%hEBPvsJ2EDw*<@qI49wzFC9x6+dO+ z_y&7)Iwen`rEQVVy<57Z4KqG>HeZ%o7Wma8W8}uq6(V3+6(~|tW9@$QUci1Y9mBo6 zJ@S~)(*Xt73|eay<}mF=qS^W+hg(@R#*=xUA3hnN2SYxj1hA4YN$^72=j)~q7s<&{ zD+HSF>>J!#7QK(f7R6JI?7v~_P?3iU6CtMjVtihlmr-QnpM6j_RKWWUN zkvo@Wlcnu9BQHei#C%({M3>Lp(Y{WQR80lWTa+eAM#M+qW zT=2uj=%GOqSiX|idh~{Y1w+mzcCBQQ-;XkA_B?}pC6anDevmSt)}cq}d&(t+q_H>b zYNgns-h~mtE~$$wgtlMfoDNZiA&qpoB$s5j&5|4Pu=NqXdPygRP$yKOsZsKq5e?;^VSK>dQ#h$O#+BWI-30FV+f` z0>W6V4dQk|DWe;eUImF&tQ~qeXi3qp79c4C?lMAz8AsnQrwZE%uGXwTPCH;fLW`-1 z{rrYXYWNqfwbc00Vs^%YjQA}k(_lrppEI9=U8iNl4VwFodZOI`jB-n#ss#sYgU@`! zY1i#^5-}nqwXJS<0wg*8fE0AnGZ2PBP}8td(V&w-R$(Qz+CmGH`&F?sn1b%%wnhj9 z*M^ur{Pr@?PQi+3GQrG;twS%0nAortcedmZ#>VTww#f=aORxeCQuK3vWdxe?ALma6 zdU(he0`SE0Sp;RWrF?bhfNmc}X43SD8=M5y#Ypc!H836YsB44P)CMPJR_T}0MVh*^ zcPf1z7TNhFe_K=UVwL@7Ix1>$8oRY*AtcqXYBzq?tiazx5Ki1~9?Ht0niUd-i#F7C z^R%S#Z3Sxkw<+iu1{rU7R-vVK8!70xEz$t);Lv0ktW1ja^Gpiv_b*u*NVYCdT@F5H zjplZy{qJSQFHwR4XiQP@{w+#WF7eZNq-_0H7fnwo8K>;m-;gpsE7b*ZiI38*%PGid zaZ51gtWuSGpE2%AiT^Eg{99;hWUe%Z^cq zdP`a48&`6V!w^%I_C6Y*nbRQaQbnlHxV1|)Ub3v zgQY2=R1q-tJ#w+@10;d!b}fUxd>-6~MzgV_WhgH0bvj1e`6T!=HiPzpA}v5p@jkQ4 z)sBcI99HLF4e?s{EE7z$Do1-5p$^lk+}HZN3y522X=Yg{y?ZT{)=g#96_pav_(~EA zP%X96jwqXGY-g}yjXu~Np$bVX#{}&A2<&Ws(zUD;gJ~-6NH9|-(o7zt;s{j`#E(Rz zUXt91a|TMe3$jz3krqo8H^y^}8-_IF2AK(pUFkp_mdqwY>dGqFrAARnZq+*XZIEjC zeGe=N|8Ooygws9|6}r;tvM0c*KT?M|W5yMFnGtcoGiJDe@?&iUI(o0?=lD#d{OH!< zA4g7}ayzb#UeixH?`xd(O`T-tg+NqX;6_t>A~>jPK8d$DR)c5b(#qDEdswV$4U^hF zg+Ih_7cRKUo zonZ|tt{qOV?a&3r_AzB=J7U4W_JqPY8QfLsUNk&!tmo-iM6|Lc(q`rOhh=qW{&jpO z)D8*}WyMe6J4Y2#;@FH1;r>=sgF1A!*X`u0LO|wffsopi1M>bBm2L`8NK-Yw4gz>C z7WIIm6001EA_N1Pn(%~2Wgu3hy70s^3b2rxsPR-pO82gitB%zkgI2aM;)uLxm-$C8 zC?+F};9ya;5UFA_Y?)DsNSun8H&Pvf>ZUKh;?{OK$nKmBVzs^6D3IYIj&je)AK}JT z!Bh{V+37}KG?0j6w$iDmbFxni43SC5&nqwJ-W^3gw@ra`@?;E>uxql9Z9_NXdBcsS zGG+Hj_LH5IKZEJ@W_8m3+98^V$Rurp&x)eLLb?>o{Al9Qh%pNose*a)J1X=%gli*+Kw2U@_YgHMC)HwPfeP~Zb z3xC(N_o*%w^i5K_iECbr^oG=G^*S?B6>yPBxYg!^J~Am;^jyEOQ?sb0VNI|=`lu_| zjanVdaB199l}Wy@$U2=i77;M}$-Rz}@SvDpwU-K(`6N=74IyGQiF`(WKZYea*{9w& z(M=sUT(%rF_p=IYxME2=W06NyCDCfofBDJZlv!GL%=C?b^fTSDzZ6GLLU zE~h|3C3LUn;?4RJf&W6p)8z6BTFSS1>n{n{yKToCX;S^}b(+(Den}Pz)zy=*9Gy$`Qr)&^VLx^!S005JynPom&L_NXuuyRCw z-KbbXhAM1OGPgt2sbMxh>&Oi~nQnpfDFHpl6!DI*R~o7HPfaju3@T;C%-*2iGG*rO z$#`)h;Y8cXnFX}rn03(w1ExRM+GGpvC%NZ?z&wT;+*uT3l!2@=e%Lock_>9N?ZcS1 zx)(;L@kwvSv)Vm01fi%L>^C%-IGwtXr?P%;TEAs;?A6?Mg3aA%WE!=sQlIa!!kAx^ z(Dg43Rwr#J@Ef6^W@PW{>z|u>d=ft(nN~xWYK}Yqb%W)DZRX5Q7s_C%cSpoh`mglq)!t#ttSZ zTI#?dS6W{l+C6ITYbgCHdRu-ET#P%?v_ph*_9g1+hupcdR(Ed2ZUH20cskXv5?S@K zdw7KYl2+zdCK@Z-rygxCRKO+nOKng}+lQk}(>^xINhsxJJc%O1g_UrU)m2~4DMs~L zYoFD9ms0Q8EEoVa$C_J|9cqSvVE@wM+}4gae;?UheE``CtGp1&?q*zdg)Vf27b(jB zOJY;yZrBE0_0AiX+~DCg;{31}O(IdC+`nJ)@d&Pbn?Sr>-75~ZlhgYn;JfIMIQ0SU zo_j$;z|MnlLgJ1QHb@>imH(pOB*%jGN4f z#P>xyjGK|>QX0x4vc2$qtr!ynL-u@TVQ@$+eCeUb<7Vq%BdzE5kb_V6KkWc= zB|jn_D;muD1-?qdJ&p7Vz3kA!?EDRS6_QERL=Gf4pddn&;v_T8t)xelzh^HJ5Vqzo zHIjG{{SrIQD^Z&$F!tslw{CBBzIy0N-ZHIh>pS^dGKp(Kc{69{Hf_IGUC5- zNI)SRuo=}3r0H?J0;qiEoD@bR;o`%Axq%*eZ28UYAr|yz6!P>K(|E2Fiu4it37aJ? zAlT*#q5nG+>Z|>yJ5M`v!RxeTdfg*_zS|LSxJr4+0i@vD!`~L${RUKf1qA?X7&6#bg)*}CK1DY;(Z@-Y=r`+;zB z&iphKL)c0xX&Ctn4u~gU*j^wMzA#*S+yGJ!o*m8)2rLb+LPrZW@*z%yY>I0U`0#^? zU2jhUCucHog4*s+Z+gZ?qt!*%wd&lCM`NIH^Dg!#|D(E|PC{Q0(P8^iqS(T$#hmzw zE$;+zEMU#)bwZ3>oU6s!Nu`66Hq&ORzTgrx^?1nL6Oc4@y%5GTC0je;B1q5Xr;oXq zk}BJ!`dgZYE7rVtm=ZSW!|9c^y{-GJaiINge6)?Gt5tRsuWRSeKmd(R*_-_bvIgKw zFk)(F;_TvNYH0f(MD}l^6(=Vf^M9`XI~MOBKhl2_obmjVBKQBcU;S4k-v1t){p;R; zgS!7iaK_HaOv3UnD;OM;_%c^xR=W%ml!4PW8e+ z584ASHVw44!JVpIwQ^l&`koyx)=vWYG468Zl6b?<;;lMI!M6iR^leM;?flX9?Ij7> z_ibNvW6hsfAEcTO3H{T)JGT%eKb z^779{NsC)2Lv9)0bWlm`HM=Q)*sUw;LEh^Fch#krU@q3=;cAs$OOAxGSz^|R(?x1A zbY=k`Bf5ETo7+}&e!@2o3S_RbUay7=6_65Fk#s}KBm-0Z);%Cp1k zb&y12Tkm+**AH_f_;CQjLdOIyhPA**Kfq`jY#=%$KVWrV80_M%$0hReW8ut4zoRWM zwVQSSdnjwWO@X|o$9~W$6s*J)7DHduT&d-bjZyEuCN|6`~ zXw@Q>A~Wz{W|GA#jVdy|f?fhqFAzvoJE2f8#&}GSK&kCadh-c2?IgnxIZ$qo*^Bxp z-h6b_hoB+F2_J@@fvc)F5Sv{6fR{3X9D zLq@Fh==hjL-Cp4Nu2o@H%^Ajp7d)Fu7r5QU9qP2MrasrQf)GJ(G$Nh0wWgYNZ`5~T zEkjKf-&OHa4#C(a8|1%;F@N^*g6V2uTl;6Im?@rTG*I1{sUa5HS?^5Kp)~7ELpdNg zDo|4Qe#|>RS6=jn!G^gK%&>5>O)XfC@Jmd>!P}gMVS0b5!@h53L{IHu&+K%6Jij-+ ze6L*|vl;$yA(-w$VEUlTLEs;#9*c1Z8fagxRYTClBa0bu;IFzaGI80}X+ew64~5`A ziV`gHKHUH2JKPhj=d@~7>1zMY(|73U*r8s-V1`bYZy*t0pb2oTSe;|u8tQ@w2dK@l zKwc*W`;?o@`SIuv{yExZkEG5RR*n2uC5hE1v*f@d=%jQC&Z;K`veY+f($e0%X~g=E zSe;$1$JSXEzRc~+g$=hTs#B}U>CIgnLS|)UOSoZzr$j~SYLj7DHL0RND0^`|(G)Vc z%%P=uE7LOO$a>ANXL0w+GuT5p$Xe@SFH^?J5DkT$;yX>QLJo~@$CI|mz;aTeG|OD> zY_D{%{7nLp^eAlp?uQ9GvKTQg2&mdF*~*Ov5&6C#@d_;H)7T*FmjiQ_xa5wvWrFu$ zt(U3S5R1$%OeMaODHem&MHEC!{g0pS59bvsV-s@Ia}X8Zx*tOeu;RG4O^V?8V;K7WG5 z6U$i!k8s=!q0_)-H_r;K8O=2oG5C<*wh+u6!s!itg>j%S(z+BlWO;cKnIMV?7 zZBr!jz~n)<2_rg-m`fW{=%t)ac=ekPIcJa8WvJC!v|4iQ6A@YH^S}UtZpfXCh63ea zxpF#CrO7oG@?Daeq=wi<4>G6bjY$}kg&($y8UJl_i8$0(>g{vtP< zi1F8+_u|S2gb-QRn=b@6>F89y-<^3_dLR||YOX`>@=gy99h3!X$M|6&8OSDQ&hL%eesy;Mo-`o4 zLd5`4&7|;>O*%D#xj+QKGVSNwTB>6ba{?m z-&Hz5 zmO&ksQkQI?Sj_`NhQH_-lql&Y(akc<&MdoOANiMVu9F8& zXmOsJGP5Ye!aPn|QM$2iNWJFodrs$YG9L*kKM34p9ymY_6oJ+1yI1a>nW2J(RFG}< zJZN^KZ^qbS)lUkzx4i{fYcu*rLE;Mio?778o{@Ix@S9GnXXoHU9n*2=S&b z-9;=Ym7o~9sH8?1m-KWsQ5ecv(^%fmN@NSe+9GVgLIodA)F_%ak(rdGNj@S1DQg8Z z9~{)nM`*cPt{fe-mDwJv>Iz22Pxv^lM&m4~RERn^Kr8msA00_XUc~g`>XJI?`g^62 zU{#vx6cSy0u?U+MjMNV5Owp!jBXs0;MmQO9c>)#K^2sq=WR-GQ8Tkw`$yy^+qFJC4 z4S6dioJnKuuklQQ(jUxm6}W>Pf)9niiRJJ_O6yfL==bq4Weyi%)!cta(VQ=8y`zNh zMY;(NP_Q>Y?-hhlLyOg1?Sp$6?Ths92Sm_buWq?y2hHy6vPV3IHdGfIUClnBgnfJy zk`ZGU7q?@_fMKZE;x_>OlFPzuPRSy2Jx(PL@z0aAYaz-mehTMZ%_%ur)<^lVt|E{W8y+L$gJX91E3iq4tD_+UdjkSySCNJFp{S865%6syi>vBG zF$1J^(Ghgy$v^odo&Rc182^HWOj_`?E8>`1-Is8D78gU!@O0h5gIuK!gtJvWycWP> zfriDhlY>#UDvFRI=pIpRP*TNFXk5tX6{3kyJQPyQb`qt535O#=A>*u_z7|E-ClGQL z)aw$tfI~@$TThLECG6GE`PCyY0|Z)$A2LEL_E*lv>*32QP#gVz42Lc8zaT`-o;7X) z0$1Iz$^9S%P|?fBs=K3+ggfi+$u1*dsFb7WiB%`k6?0``nwt#Si(}|ui+J!7sX8d= zl!}e6p|aE!17w55aqO#uNf$%Bc-i@!$yi{pvTB=_F6o|zOQ2~stTGLa`arBA2dcu# z{!E>NIBGZVfV2@sl(m4i`A<X#SromRSV zZ9*8gln~g*jK{&m*r*F2!07+&3qI8 z1efJ~!huPj?*g0j`yECmFWg%0+{d2ce&E^byyci3erNJ#TU)Z3m&)TF00M>QXa&*C z-C20hRlI>c1xD~p<$rPBYq2wT71Hw(d71O3lU4Yh^Y`5w|MK&m*d}g^i!0~vL`(42 z(>Ricf4?Jg$p^s#x{@%3DlHODS>u|~#ak`qs11o}3#_$;QrbJREPQNW-bT*5fBlZX z;kVB@BK>Q&H^MB008qr$%aO$d;=j?h)$e6FTzPwkkiJ1uw8g zUTYaBPvRQ5JAUA1pBYR>rj2QjAe@AoR=7^4i?2)&vaRI&MODIWgTMZ`T_f(NtNW(G zCgWBQ05C4|Cu_`HRZdH@#$n-HpTL*Wd|dy%yymlqucXsR$Aduk!4jL5g_kpU*lQ9S z97%ufY0==O&I5FoF|p6_QTRmJ=Q+^3yo0g9vkeO2B$kGx>M%$gw*HMdzy_EV)1`Kn z5Ikw8x*@Y7ZPQ!S4`2<(xP(&RxOP%=q5L|8!4w@DKpplegl2ra+)u@j8UE}52U;;Z z9Y;pg$DxW?F5^{)qh%6ebk&oM-K%xf66MZ=CUE!#+nKyk9_U`|PyJPUQ@=8ZM>S{g z2Q1Ww@?zzDh%w2ZO)JBZYin^tB zln3Uo4H&w$%^7}v_a&DEu64B?duah|AW>K48#gDx{3BlgRvovJ@ew~<)D!4L@+}88 zZxcw!+7Sv-1Q(|I9cIfWx_&^sfWZZr0=I}3E{_y0F*88@o*GHukk2Y6AB2}kI-?sr zyI3AOhD*>&PgOA`_SMdO2KUjZ9V;S{;VmK?1iCFE8N^vOx6L!h z5*LNRu#g1AAxX%IMv%>+NLDgs0vj>dfy=WC*5gcymJMB3Pp$mPiWovKwv5O_l3XBQ zvOD?zg*CpDeZmB>>{njj?megfFWC=CB67sDjF~y+6DC1f}tXz z*6|s?i>Q-PXm7gSsn)G z2tbGGh(?SQt+i-rbK&T|F*U14f_<6OvL zMi>Xr)8Zf!zN{O1JpPVCRGrXNsfR|65^`f??2Wat!6}5xx;RUBvGt#<3Hbu=Y6D(a zuB(84H&nkc3SxjM4|I5aK6HrW&MNk;)`cNxBm;E_In>JQzPF=?Ub%85QwDVAsY_D) zcJX{`z?j6-T#FjgCbX9>^8eTyMgUBA$>4nO6ULE)<~!4U)DrU1s;<{=o-s|BmAd;#T$2Px*Pu-$v-Ck49mWV} zzi?6Zp1gl^6sWzQyDR{IiUZOHh42#^F3>-u(5j@G@jt<`X?-NgP}h*YZE z^iO@U6@;rWT!O9|$T*R;n6v=LhhB1?754@H@Vd~B-IFbEZt!GOgS-i|iHniAgR_`4 z_QWI_CM<4*NGCg~V+XWswEn%FuHcCPVrHy%pVbac3yfcLntRbhsS%W9^W**~j%Off z2tO9J&VESqjM zV=J{yIiDFJvd4U~R}L~BAUs|{-5|dP35n>0iYHeNu0N=INtJk^Z?8s$pTA!32|Qr_ zz-WbH@k(H;f5Ugc5I&aq21flSjzATqj1FTYn3gA>`tEY3pk@?jFBL>f3KXBcfiO(sk6wuD_U0jD}XK1t;6^XKk8Vw0U96MJr=>eWQwIm zzP%Fxy_9+&s)%v`qI|q|pJt-Ac6q{~R}Y3LNeMie=leqEE^4VLW>l+U8yYntHD)A4 zaxO`Rj}QtDj!*(%2H@vhm%p}^QpX<$v5LlESV9~p3l|1H1scy9;93h-j)vh-oW*M( z+*AF_IBVMKq>pM>>xNm4Hf97|QMMs#55taK?8k2i7u z1w<>Ju_;|$06{BRiNJ~<+GznDeBXz^v*HX!+3>{^${bMCp|%CN$sVUqM%>6ed`c)U z5T|^(bR-wlH@P!Y*kZd3U+n@UuL~H@!8FxbRGY5GrL5B$8Oj0_wRDcW`1vV0PI=fc zlyh+C?B{7_azWL95(>M;30DR=g+T&?xI1u+94W+|X0gww!jdyz#0+GY z1$DeaHDatR*{ENxTs1<{2LVet4w?1me!;E<31n2#GJP%}LWzd$uKKP7n@%Hpo0gE( zRzf1104!9)wh8=4VDl?fd@_UMV<}kz!<_UufkY z-onYw#{M4)^ADQ&H--7{LZ|=oX8p&l^)Ht5-^%>s`Cmi#{%=4hCUF)<7Lxzr$NK*O zsQ=YC_CEpCKM?M}0iZ7RY~u(<{so`}w?XHuPF&sZap~A&OW z37vj$GrzsnGB6hSdt&S9@}vhBX{6cukABnV+BUzxd-N06&Q5b4;^S?-}+H^*VdGdGr>~T{V zB@%?qSA?mOs!+3Lc-i1qI8+b8{Fk00L;`r)!MZHIXs5=-*eVGAueJXY>2efn7wv%7A@!baR0&hgV#{FjsP6VFfL7@CBY4{l! zUqa!j{6U}KusJhh8mu^JxRckZLn$5}ghU2!$s0?bURqHbn92S4Pm2fcC|QAKpBe)k z$!1}iEh1Wq@%&zK#iPK{K?BQ^37)z}6=ZzUbWW{x8UFx7!Il!cfT{AeH8Vr=yuU+d zlI4&_o@Gai@V{A_j=x*7Z*TS6(W3Oo!iUyW$vAKg{2(IrW+{$@Fo#I3s&}H(G##nd z%->7TbRGFwzOE21Gg-|>ApDh6Q*cV2U*TRuJPLh;%)b0=U=Rn*p2ncbA^_NMg=Qc%w z@cZ@s4ANQ_mkBcoEn127mR$H9PMNqND~14DuI4$mCLUKd8SD>~goycv>)xTaJsm-h z=LvB0Yk5gq=D^@L#&3UvctyQpe+R6Gz{Ev}Ye9sQSc%iue18Yjn}7En_~u7$xZ8Bg z9Ckzhb_A+~KI$)34=YtoiFKFZ;YVwwzb_-`GfhaEt3eJctP_#cjV zOZCFLD`vtyE1v9f(|zdmMI~YIOkjYni=gpvyLv|necz&^B$aM{?_^&;`ej7%@q}eC z4BcWm3^YA0Lk2)G1hbsB9~7N}R`e$T;TY;A_Icy^)Lt-;WD#{1E*B2NQP>|-gWr=j z@OKS8$DB+Ij#9AZqR_h#kAEjcyreSp_)C&iwjAMWPRx==PE1KRI~aaG^WEly(d`{9 zPs8tl2okK%`=K+@Kj?>=c>Y%Nn;NsSR8niWuy#Y>GV=y!2~RV%q7g9$@Bt8W52!|o zhww|CpRB|`?lxgF*}Cy?lkPgvga;!(2}P$@Df+!hDyIs(N1j7~r$JR}FsY#9&hpx9`=3sMi)j*1 z^KG98Pw%UJoLr>dZm7`okJ^uuHGv}mq$@nsA~5_fSIt_;7-0tvtuBgjNB3|y*s^|i zFZPqWfDf++La2mWWQ%x*TkP%tx0iDTN$x|;!_nw|gW=nio92YH0!pv}7eSYW3o(N& z#K2!EfVoU`NetlSS$gq844y?+IZ2}&2r3^e{keFesOl84(C_A%QC%);v3L^zJ4v6f zN0+2+yD-fVQB-LsDhD+$9Wqc=>3N|IfFGMm&ceoeb?FshbmS;r=Pb_2;kj@Yl`;WC zEu&0Y_6bEA!pWR+;Jr!%N0nQI7y4Po^2|P;KI!IOdLe6$I+h+Ir(X6lyd=y4N5bY( zEWj0Fngs{9P5ZE~L5&)SdSp8%KgG1M?hRXK>x*C(LY~QlI8XYFpfD&QZeX>=QLuuO8KEHYYv5 zM;O-lbqw8Wwtl+I-wU4aZ=pK-cWk*_TvSh%TNXvD9NYq~bNX$yJsH+%u%<0Oi0VKC zo;jpO(UH%bLO#}mKQD!OfA@yf5MPa9XhopW6;dGRyme zlZVX=5*3AA%dt>Jt;8fV1dFrX4C zvnL`;DSfXj$6!7dD5WAKVg}>LKoOnI>Q0|NcYQAG$9eLgs!ZEh)c4x)&%t!G7i=TM z?h=G97ry$NByZ?oR;K&N8N=$SJNhOoC%z+J=~cfffV+#K?-cORSfN+y*axCmTD^dI z?Wst0gzV8;raSz$1edU2d1<^>^&v{J%}7bO%Lw;Z)So?GsG+E|d5npGWOC%>)08g? z3PY(@G4`O&Y#;2-k3@Y1UuYY2kR?mGM*4$r2CK4;wr}~T!vP*uA&oIlAKNBDmFW0}lIn&GZ7X3<+RE^z^$KNUCcLE3^Ev0p zE2jNQg4b8MIIyx5tN5M4N@H$M7*jX zJFtjon-WdyN()bmIwavUGsb+oJi0|q`j1W9ds;?M()uKd#eT9h(KJUy2r9K` z@@y{v663WU<}?c5Bj4e~mso7vg;BuR-_izJ-W@B=WRv?`m1Iw)qu2;PSv#cOG(yWoIJ+cX?f^yZHV( za;v5tUm(2bMkM=sE&Cm$3|pKPUjZG4u7WLJLN#t`3&c{9YpT|U zRDXStsRvWvTSycE1Yq^K-WaghZp=!rHUcdDT4gy#fJN95VO)`3V(bj+3+ddH=lKon z{6dbs7;1;BY(Q@fKJJ4S-(=e#^*T%+V4UJ)I{B2$hGGRq(i5Z{&5^8 z?GIFIS>H*qo*+|>Zh1zNpj+w1Bg&}7!>VDM45*@;+;YLxo3ji6umWpg%KXqsl_hox zoFKtC7y@^HZlx`NOh?S}cmr^HJ#7J)feg8D8sUkl=(uFHgZ>Br4yKV4YNRt&6tG_d z5cwd&-7a?CY~l?eBxNs1pk^^vm!P(cp;)NxZB7-iP!TP)5OFS*7&k&Xb;v4%=#|j4 z*~(;wn$c*WiT>>Q^bP(lcUV8tH7mv<1VRUWSG48QqX(jwwdDp09TnmVtlO4;w(U`3 z7w))@m{w83rnGejYiNjQAEiXi+nHJBkdW?M<@9<`&CymgaLor1M~b5&4Xp1WO4R)9et8%RBq;5*N0|l(sg6= zis~91JbcS;y8bO^+yVzgG-pr>1O%t1mj{qFsBd3HHYw+4_Q82rOm_108!&rW)zS)? z<*5}0XT*i9XDF=Pq2(uEz|d;Wfru3X@_%k~BMB(;TB8f6H&E#Ymbuvi4k8efer~oF zZ);kjCj_g}pQ)6SwqQo@ZvZ95X<`a6d(4ywm|V*0*fh<;_@tC-ySMYxU)&8hq=ow+ zj}T`b)wF>?;g+U|WR4YWpm@6I{!cG^i&mXch3G4fQ0kP8m3I8yn80x;!bDHc zvNe_+IM(5N3hOkbhh%jWM-&4Q2hMFpQfSBw!A@N+1cfgqk5Pr02 z4N3(C*M6*ScDCWA_Yb$r{5|nutVqh`AT`DVIBR&E@AatWR4oJ~sb(Q*2pk@o@hz=U zx~!NH5D!zu1bi-$4}3c(r|Hs4?<${yD2n|B)L1t&3|duboYt1P8XQ91?;KjK+-bMq)g{|cR-VwHoGSIw_z@5% z2%~K&6Tf3?evdvL-Y&GJ1Yy?iOz5jNoL8gLoH|Hixi}oa=Q`A`Trq=23aulcS-Z!2 z@RQ4U^J%W2FP=G;rn^DLQcc|ZRE30YfiZ^+^?R&fdAH~1h&qAn8pedsIkp z$POj0teKP`& zlR>Kr^m?`ZKH-y7e?W?Ii-eQ}s3P^jf9!Hv#1bOqo-5_=a`FRLFJL?-Z9PaTPD&l& z?)!JWor!pm@O*?INA?N;JBEq`lwz1e3j(y5an+~K+cBVJ9xZQ^{YBnv+`1eQoK%XZ zQ@w$LlUf>d>yYcI;uhB8tVcm)UQCt+l7p_Wl(Xd!_&+is&`W9i!b$*rKN^GsjE}n$ z1H|N;9=W&DQW8?j6(P}N3)>;0D03lvbdU3?U|BvO6!R$$ezbro*Qn)FxC4Bn&5*#8 zVvhbmz#6A;mx}$Ooh@u4b|#*kKYBxJ**;A8vjHL(*PgW1*M_N3OZImx6gWA7O4{L8 zGUb@kWSI}GA#L8bfwj(lYJ0Hxeq)PA>S~JCUL{9Xz&iIgrr8Olyi?inc5?hTj)r}S zOhjwuh>q7&h2?_g&L+_;p7+%p6LCYp2mxH6N8?j@F@if241oFPTHc=66=WZLGxp2; z=!EJ_XB>11XTI|3%3WO^npJ3S=) z$&>-2cnzW&BJ2-xb+n3gXzJoM(F8UtMQ{wuTOkuUlRnC_=+N%Cg^=#JDJ~ zmERs3T3;=S?8l;t-PFCl4Qkt;|E0Fy*7+kL@-?WFdQ{ltY&?*_Hg~<)6@Z(ZJdk{K z)8TFV%!T$4nGouv9t~46#8FiullL7r8Y*dy&jLKFTY@BMS~lV8&%NS9>UAMFou}M` z$yfh1WVbjh`A3=fBh`pTP=#q2>sfX8t8;=c$e)k%}T`=$)%?QedNShjg0f8 zYUneC>c89`fbM8*ri2LU*>Ye)!k2ueiqC`wqPgo?lrMdbwGx{)1lib8q=m;?7%K% z*Zy}HF$U$c#oGqDkh7Ect9%L6^lianMd2g>%1#n7vlbY(Xc;TT$<1GpM1wyDFoio0 zBwwL~sbXF9)GFcQD4lqE@K&o5x;mHRPx^Vk0SD7^d-F6}s^^~6;RRaS5E-5dgv4J1 zG=GoZQ@E3m#^u-S3@K8>alLh2%1*5jEmrOE@kE?n7cA9N-to=rzM?>MoZ%t7<1M(z zXBV-PXhS;mZQ!WuQq$Y`)m^YwPqQ z|CwrxyzwCO6r*=hFbNliQPNQRu|WVk@Pw42X%8HV#weefIQ@&>eK9a)9*y*7B)k{C zcu^mRlfisq)wKI{y=cHrU3rkN>#@GC|((^=WAGx7r6vCh1pS&`_jM9|{9$XmXLE zkPE1VcB+T5RzFI6N9^%e&LqA(+8(1MdXc{CXW3n;&|gT!zzAIje4jL|Oblwdl0Ejx z8V`cLg*ji~4|zuji4zjEZ)vk=ri;g}sEHLki1+=XT5Njx5kzo`eG3d(YG}GROk$X( z;Lmg7)F6LzOs_ZSTkX{n;1@5cB6VqNQ@;(DJrwDveeLb9TqSB2YG>TWdX>H^%i<{} z{g`L2?Juk96-a3zSj8(qD9cJPvH7e)OHc_pFCIn8u9#|eX?PF%@Yv)4n#x-a$(p+5 z9RvW%S~cAmU8?kWIH#rP*Wh@R*y1QV zG~OVq?v=G>x_bfJrW~LdrW$vtE`@Bfs91G4{32q82nUsLyfMi49N4H@HaOxS-5pL=vgkGJKt3Jpm`Iw) zg9wd-lFVuurI<4?Q);75yJH;$?|Zc3j*Sl~Cu}6UkU)I#o3ji!`e@9KOKLqZv4w3a zYWzN1?2dr?>#~m3$hvoNmA+=kP0%Eb;NF-$+vF!EjtRz+-{6q8JgblQ-DL?^jt7`@ zg00!GHG2K`;dJoGMckrkY0h%unnriHu{z&ro$}s`y(Bx zF0y4+>kUGB17)n(hZZQHi(n)>a%|Fd_* znKQFb%!l(SGuDc=zGOtcZ|3z}_g&R5eN;eGKSO*)bI0HlsWo9~*AKymiTk1#BE*3l zpHJWsH-Cf^B_Qcm6dM^p1CGIg7J0;p7CkiFjZl>1pF;#QEJZ9O6ak$+i1`H}(z7A( zzXDeO@}byRIGFwuSp6$>@c)Y?^&d{ue*sqi5jgnYu%!NLzTf{Pu=-Ci>f4g~Pi5+V zV@a_y{3Ce%i_iTBq+)0Icc1G2Xh~h@tVQ9DM0!hMCW5^7`|OSF~IxxghY&wS~Rfu5kVePsn%e^g8v@YV_^2N>a_H>it2l; zw}sy`=XRO6spmaUb7|VZb8V}9IjMXRzAJn=ym@Qfy36 zb;}KP=)%w|-eb`P{u!&@f-5gNTRTp+Rq;VV@-TAjF&!da_D1&!sPu?NeXzdeuf4Xu z6DMqaG*VUdoNi%^VG52>$PU!ndh3xx*w_*32(u?#(Ly?Kpq7TFDwh(8FvkD1 zErose@p@WwgpD0^lBKJ?te!w-;2}VSY}%~ZL_)d$dSe}jCwrz#%}&{SikH_7kpFbp z=w`jDWY6~OGODeR=?WD2j{S`f1Jm>)(G8>Iuw$xOWy3c92eM(}r#N*~rE$91DH(i; ziW%K^6*?Da2ia?qB3fr6f|*K-ZEWIQMdKE{|7((frwbCtFH>-1VY*fX*6cA?Ik37* z=JUo7z6jfBKpe^O0?F?Pfn9!i#MNxzZP01I)8~^`EHM6kM^K~oFRkY{E>EF{>-hVN z!?3N_U%YT#ue=E`V(d|P`p~gxS&j_+`{6&daks00MysI_qx^ppQE=%YdPO^f_dRZhs?eFJ zL`U&Uf(Bz{)lYZErKBex?`WMs(?0E*Fi~4wmM?=*fUPk_c}oozX2N<$jWpJ9WfpHS zv-|DJd-8YUx&b9TGIEHa+NBIwcM=Yi`f=&RGVZ?%e~0w~@Ys5c?pL%a@|1FjRpH~s zM3W;#NM$Y&f?>(H8Fr0) zkB8rDylVA!Jpz33ZntFS!(OnWdB~^YwsrdJbl$AL&s_|O0TSe39a}&c*v5AXL z{t$2b?Iq4@ce-mMsNt6n4*k6Uu!e9g;rYzV@8$aTiES@bjp_4(l??=nuQ1F4Z|``A zISS78=>o<63h!%=8}nz>bFuk8uO8{UTc`7^r+gwsvRyDpi;8?|2{h1s9EK3^9QL%ZNc1CJ!Rafz_x}#znKu(53?3B@$526`somjzxizl&-7YQWJ3>l?OMzG?dl$L z)KZCj(M0Gu#7ae!fsPT&;k&i8PCfJEoc8N3%1>~qR9GHG_3;jm2|whEcYutvp;X&R zBn)`x$eHW>X-&Tgg8;pvvW7jv{t9sxcs;Cxq5Gy;+Cv|TDBl2bX9-MGoGxrpz;#NL z+1f#psNXS+sDG>vaTkj*fP%-E$mslsXNtmih?I~Mq>2WlqzbwaZdro)RSnIMVNJLW zp3o|KxVun=dGy4m%{8NuY-zX*lL>1=|EnN=ndqX7kpE)HVD2#k{^l{6OIAy zcE0m~5kCm2@j{~2otj^Uk#HMdmLn-9uLNB^|M^eMTBQkWhuvH@WmcmCO_u%sP#0AO zCE-Hvcp`DMxfm418jQ;3fNZf$sJLN{p2&fq;6eG!%4{uVR(mO`gHno#0ICQT3kt5R z`FakelI-=H_w@$P{KbafD-^gf2oKDn{&ynVD%hljT?7bgbS7lNIAIO1$Wj2Ea(yW? zg{tIp+&~12`fkv{jzrJYt8OS5nCXqC9I|jsXgv<=Xb{gczjCLpjfYNRpO7zb_T zfXY?#?9Ogl~t|^aEP%FyRhBt3+{GI!h1T;jBzp+X`Eff_s z3>^L%<)iM7v-zZ!@a*L~YrXLpscc>LO5=RKKD~2I+f>e?bL8W9U$oFN_<-a22Wdus zM_TREFX5<=7UAfAo*rFON3dq8-s8zM_{*D~AvSg;)_bP@{zPkw7Ki1#^|LeVMis;)9^fC7 zKpa_w_vjJ8Y~@I^^x9`Kk%Daz+vc^!x(5}^jHF_0%HlC^6!Rxz#-~qfoBSTJ6T*)u z<;Vjy?V9%1;eCL7Ql4#~24{3_56L7ovucqtFtaZ@y-L0W@VOpDjwwyir2@Okx_CRjE7x5k#&sWtX0zV*(yuNG%98_;M3@z&cy+gRXq&8SZB z2=qc?FuzMkOgQ%vMrxrjX=<_)$t`CJM8W_MlO8y-hd+MQ=wDD6cUU0IKVL?eJ6+-> z2BxB)JxP`$d9r`0q$G50XX{qKo?3QzOBxp;71RrTF_-aYn81wetbPfn;i)ChA*A}+-)=eFa+!OzY%Z&i?>a+vb5w#?bH1FOVKfHd*cLEp;W{tM zFI(PVaPw0T1rmgZu6PHi#1DtXF_VcvzwA1EUT#wk*K3yYG5WWEN@3s{jHulqtWtJs}MTAo=$N zKOUB;72y@VBLBJJPXKxKSL*jSQlMGwJ^U35+_NixdcnmeLH#so*joE0)&#;6*`b z+Zd?g*PGqBhdZy;EpsyY_9QzKRF2eKZE*JPpx2!iOd?HcEWtpC{gu_k5wE5EnLFce zg=UN<&3x!?0D)I^r%0@6|C|(F&MCed8?k(|9UFs8iW7xO2_xnCj5mRLB8dt{jxle= zq*t~67e~!J0Q_K8gk{JqQ-WjXTA8yYR5^*`MsIby@@_I9lzR~%o0Cy2e1fT%TjHWL zNd~AXgv~HA93YuzQIqvgeWyj1b#Y66^S#^}Yvmd31Jd`ajOV+I{plK>eI1qfLk||1 z-oA*=!&|Y?%nmIg`*_MGHYXT)&kEpC>=e$>Qmc)iT3uj+#L2M>g!_j6tpHe8_XF*d zZV;y=q#R+?PVDE*Ct@qBsKqwg9#&oL-&m6Muki9(!cH%EwTVub6RdGD85>h45xB^5 z!yQQ-CK?t11rH(t%?74bWKL5&PE2D4L6?H1YAA%`CT&wq)8wk|D*+J;mw{nh?<+LP zD_mA^lG3m|gZ9UUA>!Ci6;mh!axJubXM+sTnUmby8n7+$DKNP>!PCR@_-PLwyJX14 z$;1Yj;ErIWYvrQ;j7}Fstx{A6M1sj)Xxb0N$r0D`dnV%^VR!=rUT`~b{V~dOGZGAG z&t)r8NcLP#Ht+Y^I62;BW>X)MXk`XhIS*UV79g0@N1fjnr(*3<7G&n0{Ag*m>sXxr ztw>4JvL=sYkIfKxE|kwxTAWOrlX^W?-(vZW7Z0R0&@R$WsCE>LuH|jfgX<6hqz&&i z*1euaE=VZO^|Lp72y#C-Mqqm$X(!z@x|uleD1P~XWZVabt9zQt@99_zEVAPlqRg5Y zQwx(bdiY6(pwK9(H3{-L)sk1+5Bi=ok-C{RH`JXpMY$&f0M+gjKs}X)Mv~d$wFA>o z7*c2H9yrpeIYx2TyALEB+HymShDp zWdil!GIS!K5b3^e484AMcj<@-`*)v6#?_<=Q4r*hO%ImH^t6ha@23|!kV=+FSoIr= zU(D8$>=%DR;DO_XMJubt4`OixR8oRL@kazBdR3{@X`B#A40c3H(f-M?ewJ+yflSX0 z#!L*`FJAxLDpq<8b9LZVaxt09t0CJ&>A`?f;|ysCzmG5TDgtU_FkGH6HNzMIZCfuZ z#?x6Y&XmpwWAX$q;$mM3wx_~OVu1*5yF2czWiSrq&QEov-pdt(_09|z!&gd-5`~D& z>E@W3h7nsoa=?op_okev`L~rqW1o>Y>d?%gNvP_a?^QJ<>o^istn7VMQ`DXF{gxUhGSaGpSuCH&-A;^Ct#AN+$)=`A*ljyo z2y_6y7eR z$`!R_6R!7?;``oQ!?yh3MQ@2X+&@dYT>%b_JOK{9SA$9+QIAOxF(s5u=uZCo&rQu3 z{e=Qrqd=m8XucHpyom7*G4er4J#OqXHFm(ss|r_R!2L3rE5@%GyQ?I`?;SdCu$8lW zzxe)9zH^6Bu+L0+134hg5#1ZwE-fGnrj({O>c~1-q>jysC&?;VB%IC46WuDgRF>_$ z9;R;&jznra+?(?60Nsq4G^F`@{aya3$c#C+;x>imb&WmrM!%CHmyiUrYNR7OPI&1^ zP?%{sn~JPg>yB>zOHH!~F7uU8q6DwLHMMvFX+C%Jn@#0GJo1#yy7Y!$!FIDX23qB6 ztd?|$HdZRw8htG(AfCzbUG;a-sni4|Ray6X9W7A`qUqBmwU!V%{IC7aauO!(sIpk@ z2yU&)rZ7z8T%9-V$DwAmS9DG)-D*}bwm0l16hY{>!v)8~hO7Hai=-95xGTvop7jsp zu4lU^+@mCEj0O#U2{QXeZG@0Hyi1}0j#Rtoo0X>QUjD-pNOqc3YBYPeY9krcTI9b0 z8c{OzVrr!Uno$5w{4v_lgbGf2UIlsTq@VH$w&0P)vPORXd}8fS^B8BM ze#|kUMe9&!4lz~x_3l@e;K4UE!P~C)u&@ODqQpzw=;vng&(`#?&(+V3@zinFS~`8s zlSCr;Qlo5RN`^Ap_CX90RGsxIxT8g!Y^ztB|MU=lgCh)CX?mxvU0OKwun{UWI4FOZ z#D>fWB3pzqIjCC&l$Lx<=5G+8GqTz%m7OE`icQf)M_e&Y6u_Dd83Q(6nUHOC6H<0H zg9oc{e3(_JG6eRfg$eIjtE@SB#j4R%5cg+t+~UWx!Arysp7y-fpnGWYlsSVtz7=j3%A*;dmJ&A*eISk*I9RXALy zMdDSG%yzL=Q=Md3BBdSRrbHj)OZRaABN=@hFCxm7p^>{1(30`8@WgFqoD}w(`T#0% zz&{7vQALic?jnizWFG7RDvz4R2>2$?u6OX(tQ=Yrlym$~k&R<_@B{6089~;pzLa-t zmBLqs$$);Ckks?It6PwvC=t5R{YoRAIO-Wbe-IG>3<#-w7^vlKyU9|CH~$*}Xb=v`Guce<#kp2E_e**hlb2s-XZC{pEfwy)Rso?-u|M zlZgs*_TJd2>q7bvFA4_bFrhQlkFwxAf!Pb8N(tbYd)pRr_E{b0lZuw!*sbP$vLW`AY>D*7;s*BhekSM>RVM1DMGVqKxI{c6Da}X<23a24 zU;j1lk#JCx8ShU^R_6$`EGY~~QR}&Tiy!z5M_2vH@|Isll%&Zp9?#baMnY7ER;n03 zS*>RC8a74eSq(#8f2hr)23gvGchNiC97?3>j&Y0KgRvg+N6SUpR$23G)Ck&4*zJ8a zq-H%t@Ow|pv3%!+!w7ozy({*(kt1TW`Pv?kVr|2b)mAFM)&@7v=di)2X0ewtEi z!G)tnkj`hM3+)fs7!8Sj-`Kh&sbYzPR>PK|1mHMdZERB9G>mKnHX;Og@YkT)Bb}6{ z;{TwT+H)uZ%H=^JhE_QZ5iW`1P$?mCn6<8j6Gv;AnN{OT%m)@YRv z&X>P?I*IB0K_AdEkDk@0o{wKVgnx9N<*#bOcZI~>vY^QdPc3@E|B zi)K_9zj!jT3N^S^27;^3NTEc$rn9Mmj^oYFb$Tq5CdlnFqmp^DzZ&P{SE}kK=T$hZE9Yh)R|?48o8HL+4CEi|=m3uANZN+rA+FQvP-L ze}bKV#~1%*A~CUZ{3qD?S18_pAMCI*{9EK4A^raZJO9p0{yQepzyJ1MWaa+{u=8Iz z*8c=M|AD3cPw{vE#XgGTc*N7IJoIw8qct!R5X(;fM?V4s7se+Ai<1b?HTd%2Uyyfp zev)}QKfk#|1?~lEbF6DvSXg-2WbN>&%v$iNjPBcES-4}sj}rFc!8(l)c4W^nuJdr)_Bw~t%`$PKvejPx zw$gLDHsSg}-gSl`yRpb#b@o+S_4)DGdU;y5wDh3<>*h81dq(99`l-t`tJA6K`M&Ec zZEGoOgJT!NDB?n&N3JeTF+RfRnhNi|w6oIo^Y3y1)&&nf0}NB%)sQfALi2a6F%X@L z7q9$aHBS6Cn&LX#nYZ37)G!v{vfrspR&g!wC0v@!6Ylm~0{ERN3#ivu|UPw%U66-h0!E}fc#u@HB&zkB-H>#}nV zM2P_ca1}_`AN%h8Lk8Tm!jm0^^@ZuE+m5B()J9(_1eS0Cm_igQhp^m?0iwV^hjS+^ zy*RWv=_{@r^QSnV;#gWo76yK6E}@68F*DThx#2q$OwKngBxZZ#yer@ZP9DVx6#l?C zf{75srNcvgSonu5M+T=v!Bb66 zxfex!%X%++jHMCx8u!(4d|cnL<$q`8(cX(6WmRRn9dc9jO!U<(vOJJ~JFQJaN%!w}>nelB$;w+LP@RTIEs%grSAjqDum5tSpdgtjd&RrZoSm zJhjC9G1HKa;3*Kn`bQ7oV6I967iGN>5J4-EJdyzy)(1jnMUrVVI&umy=j_!Q-*Do< ze_D1%F_D<+VtDsDD;VnC`Z-y7r#y-dvTK{}eB|ZkTdQL`G^cN+MPo0sjOP@7u5rBR z&79kM5E2qG?0>SDvXZK-qY)?VR7LQ+6m1kg7thC`y>&T9#;(JWcHuR4AT{UA8d#!XOaZaLP#x z0G-_G0VA52X3sKLg%tW~E#dT^!{u*;w$^n_9VcZs14=e^k;~T2i9b!qA!hqKtWLOh$XXzSz9;&R+Qd#+I{!VK`AWfaV-2{j@0w zW~Qcv+LxziFdn{tTa)#fZs^m;mV*@Cpg_R$>XsrrheIbP@IoxLB7qw#j0MckO3hAr zP@5;4H7xG?YN{>^)Gw_7ULpU{x{&uwOgIJX1rX{Z_zG*p!A_&pkXLvkPHQsB=J(>3 z^9b2%V&Bi{<+_!T(BWQhTK%lE6_lYUZ@wRq@5WqAg?q{87qI~$P$j?9ps^Lm zX_i%nDgz}uSTIwfCV=$aiZyeQ>+6fp1ilU}OB7NTP^}%u^sIl7piU9#2pk1G|yIKYelFRSPA9lWlLpsEfV#Ev+?e|FGGFUb_C| z_c`Fc;_BR{6G5r6-Hhq+U5?>coi_)MZhxbZG3i*OuV%5~5JxUclv=u=#khK_a@%{P zZ%Xg+AZq9Zg}-cjzt1XR&R;5qFP06l3pYy;MWiqJKpI=3_ny_HT)7Eq+KOYi*8DxZ zMmgr)`mxh0gnA!lgc3&>CMph~BK%qiBIbzTzVLvtfy<0i&4Jewx&i z&3hlO1Aa$`DAaT-<~LO0X}#K{<+4Zc8g4>pCh|}H+?-2Ae^^lw;UG^?gb&Ate*79o~ zxKtkJX%MdOIhBB3NiXyP3ANkluacfO91S>Z%B0{6Z2+3Y0ck=-rQ5{Y`=b1%*7zXO z=Z`pP3D|&8NzfVNry0YtQoNe2EC$OKJu|itYu8hLsYY&dR|S|QmR)s!EEW%gMrj@m zq%bnr=KfwJ3*((}7px@NHPK@0HREI&iO`8!c4-_13fefJgfoUO_4;3V&b<@kz6sZ$ z!&-vhS#nS^^9fAE?II=NV&b*2#gqlBTM0};)bVg-1{Eu)I4@&j%3+Xv7D8?X-w!$@ zWlCtNO2|x1LKgmMswJ76Cez;vzEcgx`tnR}-@PeMm}TT%t7>7J+yPsv5`cVVCPB$+ zrKT_;pc>ZI585`rd@&(TkJ{+>+3%z@rP8wSR3#2iqRc>$6;>=uDM~{vKq(nV$|i-S z)c4%D<>H?Y;0l#!+jJO8mI8@Id>m^oQ*)`3N;)$sNeZp7Zkx)N!URw)LC{4MTK0nM zK;Sze%}iS`+4#zy*MBv@3wkBAoWk{HTt4QiLEE9q=I{UJa<0wM$DuYc^j zu7+;7t**%;PAU%$BuPp_9Ef|U_U@z2F~yrLyUM4A5pflcn=NrZQUMeI{oK2?e@>^H z^T7o>F4imDX@RY_oN9fjz}w>>kgM_J6|fZN8N}1%7L#Gd(ERDKsnsf4-D^*hw>`z?|MmCIi$rcJS2fW0`$2!Gc}#|yJZ$Q(UA zfi#y`(=0YIx;xt$%h{Tp$^8ZwOqFm=CUr_6la(ARQGh$Q;b($cD&`6aOp}94e@S6dgFu zpc{H}j93o2h$jb!h6YW7k~w0ArYSE64I34PKfcW{?4c64XT(eWD(`e{ zoZcJV?z(rB*kdMESu^WqjgJy#l>Sb5pOGG*@xHKsEOn)RMfYM zzrhmx7KdovWz6A~x+sHO!H#ip0xUx}#2WmTk)eTxbiF#3C@o+hvM1Fy^We#5$vSO| zZJwdo)dUT^gh>?*LTSdAR4iPtr6c;7rHI){ z`5QN_a|DQ12j$$uY#5(66K*PBjs8YvQ#l}kLjY`QKS!uY-|Bo*f=ru?qx8hb! zsv^P=%f+M2A_Y_Sr(V)XOQEyi?~Cs_WXj$hHbWOKf#$zXWm5y^T;@6q^RRSj4UJ&{ z$I0hrj}Z}LJPf9BFlT2$fOoM2auD%3zs$jaJ|yz_A40lvJ7i(RZAbwaE=IiaBMwY( zu5tdvGC@zn!PkpE{nKj!8EhsK1~gwx&y(^{%8bS|q!ghZ6A`Kg6?s|YLokQN=Dyg) zbEwmd@eF5*cuGrnDF4{5ebj72;ToWT5!xnDhBqKQeY1tpdZ%e>V=b<2+qBR57P18I zb2$)vD50j~>Bc*jLu_Ot!uzOfJ-l8@)Xix^ZX%%Wtj-qGp*3O4o1?9djy3uhh`*&D zqaB}lYpfp+w%QQ8f0ve7gvfJQ$;zw7wBRq0{s6*$QCe%E>U@wr$CEOz?KveMJ|-BT zSh8IvAKUr_ruezFCqZ4VKKcg#Ty+ZR0Bx&C>OH-uP||F=s;z@Cjwr_j<)5C4PmWU{ zMDtq4v(vJa=O+;D@Q>IAdiF$VF#a*Dc)7Vs!aXIkNpF53Su8`tt~zKoW=cLv-2kD4 zjbcKZez+1(giJh{<2IkVmJ5$9-(+5_1k5 z_U2->T}yRuW`364y59#9?8mF(vEy8AvIr&tp$5uC4*^Gn*dZ4o#7+Yn90HofD4$~_ z94pY1h3J=8+{MasNM*oc>Kma8P^BvGp?*`M^C}@vJ0)l@2$l+EqEI^cws@Jy%w$EQ z*&;)2mA?1sqj)Y+GSPRGh-u)4O6y7tfq{%IPe~a85&fDp#F};Jl4J1eWembU*BlM? zX`90{nJ+X62V-g9sP@sF{m`OkYUBS2?4GG}UJq(G2Q1T7NSd(=dq#~1(sJW=#{4|D z;k!8+PN<GtzUKK^Jr z2RPA~I_r-`-52+wLr5o;5ET?OzFDqtHW%g92eSDXsRef?*x<{#r2}%A`Hy;a)k|pN z&2!MA0SkQUqTJV{kG?WjsHNv-a4?oKR0 zfuyBxkf0AFuM`rwp4`VlAUD0IehS}bq5(Z+fsq6Y9uz~R$lCSU$b2ZbdCgoAbk^Ae z!Ua@Fd%bS>W(CL{xWl56*I*eN*!tEyaqbb4Z9SP52PF45fPf9bNL*JZMP3iOMdG3K zq3K*VG^Y3t0$M-4oEvIL$|~&{xCfR8R?sk~?^3t^8U^w&I|lt9nwBaQ$YE5Nw4?5M5VNvTVNGoA_4jX?W+IuixTc zrkyVIE=#zr}R!fkK|ki#@-M*EAhui>S2Z;EL8 z`wOc1rM_I82S9xZs-c3c>39MHtKOOTNtO5#6Y&R#jcWFS9&#pzj`t<~_n;b#I0d?| zGPy3B4bdEUy9%#DzF*x+%3s4`Q%ToOXnz%dN$;HQ<8#EzcY$%r?=NF~)GtPFShIlZ zi``mZ%V&21t=vYnCbchY`?q&JVr=RB^m|Jq;N_B;2C_kO@^X*DvrL%A+HNz4U#PuI z0e^Po%r9`w<8dm19UQm-FYk3sH^ENQW41R&V`ohbfEJ4=O|N zS4JT*pvkqsJuh6^uSP%@_!fVF*|UYg5aH1T3Dp+VcHzZ~2f*iS%Py&HUivg*Y;rd7 ztqadX1-vtLGXv%$viMNesJr|EonhNps7|87@5uNc=QKEScw67|+YOD2>b_SQ(fEds z7aw;nY4$1e4R&Q(ji0{WC(SFD%|t(+AaVTy+ZxwHz(ju&E$izR>@)%=_Fni3!#Rif zXA1xEJGzFlf@}i8cf`dHiRBMdut*2)V0hWg7O(UtBT(pZb}JtCz)bj!fB>qJQ$Du? z=(z{o{6K2rPcGrn*mPP@>iITwONxusqNyx&V z@^??A6g6#UN#Ut>B_xG}^1e-rD%4n&0!UO$L&R9!p}IxQ*!UvEAyE{AOlvb@XWDPq z!q^s)Z1dq#17q;Hjf;k9>KZz8@#G84?bH+=1?BN^pE##&vHP8f=2#%OTpY-(P}$I0 zu#t-uz|Z3Y2}3o8f!iCWkfQj;TvK!_H8Ap5fG(0(QY3xd7+y;U0)UaxYXFC$x0|IM z4L)~|a5-NbSEnkKfxV#?b;iv)Njv!Q{bofppnQbM65!niX&eOCfeo$7rWr(P8Rvu` zSz~0SWF!L{uW^<>LMezflbkwg#c--?h2nve?S%VngQZS`Q^fsq>kR-@oG}$h#%@r& zga5f_zTlzQ`nr@4Hx%7o>7z3xqsU23Ud^3%y!ya~!fLY;o2?SmJ+=@ZU;evg$t&?4 zWzMH%y;wC@Gi0_T0XfD%eta#qYJPzY)hInDx1!g7!bvb)*|P(qe{wkpvQ?=#*jRmG zAJP(mavqQfs?|x>DFCD6mf#W@P+I_bewb>zBvFkfqQ^V)_I-A&K6%>f5{a%;{)r?D zI>kNN`tf^}6`AYK@$>ro=|!}C#;m~m>HaySrj0!A{zk!>z_~%2Oj*G%m%7U=U-)cS2Jcs_t^^&W-}qd z!^2@M`^&9?@R3RJ^8+>eHd{0;@`sSiD0s;TexmKdu7fF|*pCY$^k$Q0_Jc_Md=eTG zo*CYEwvKa=Q2#9v5=!k_U8pI zj8t%Wy+3y#(Q5wGy!~wb`Cnl*{Lh#~s~l-~LKAA}H09~=Kcko~g`)_llHk5z)-!5{ z1lYf;Sov5ee+L*7UZs zF%mvtkk5?mQf)bHq+M-yNnd(xGE~{`;;V2#zIoRN7slX$@Wxq?g-!y*Dl%@#7!LPw zeevpeKd}LfgKe%Hi$C!!OsZz#Ej8>Y3>|lQ2zl-D5>!m_VJ)AMk^g^?COc4}^|grjIC=WWBb#v%-srcvnz zFq79kCpg-%P>iZQQ@f$?IipRnIH>|M%}Pm9`jgvC>(E3(Jo%i~cr)zk*ks^PFqz=m zYj)~6ramAm)pbSxE9~>HytVJrqyLG0*ctw5{P`D#`CkOku`~Qf+MJTHqph=pp|K+& zJHvm3wEY+C^AAn=?_r;RSw;U~rvFRq^PdXO|EBfm|22S)o#DR{uYVyR#{Xz^`adC{ z4jrvJoFRMftzR{vc(3URpa%5nKT6uwnRE(Nq-t~Xo{6Md%x)FJsM{r2(B8I=&OY7U z>A2g}ah1xI13}K&+}+(@`8xaw)~ePB*5;bI$Hh@gJ__Nm9OfT$I z)Zbj6YQ5gy^qXwk9xp}TeqBubt+HL~?07k|_As-(eE3*fd+b_k^Rdiar;Hu2Gi>5M zXQT_ZeEO?aGm_u7r@s^|iO{FtGz6&3aNde+`-qup5d!t)P)3|F5xK{# zlaHXGbQr68{3-zm z4AqQk0h@*+>S&{d9S)}^>bcIRbkIw*ISo5g_X391nI!YkQjh7bp1-#;`8U^<97*|{ zVsrfnPe##(cPdwM5w8({ja-qrzjLd<=;Zu zHSf*|F6_Y9dZV~bAZ7dQD77engq>}Cs+C6m;q~jZY4gNGDPW=h`wf5GE@lR0U}d$xTO7hexpHqB&s^IfLu`$&o> zBT~NGJcg(&89^HysVOHA{X#LG5ldEc86QwCCdX?h>sQydtkAiS%}l}`pZ;+##G!tA zntIl58OWbB!`0H}Z-&Yu;t(R@MJLJeim}QBo@7N9k`Y*qn^5ePwSYM+aMEx{)1dqe ztT=uFYjX{K6D;)EC>IO+FHwztYFFryr73-r>jwIzaV!2u2D@ugEPb>~5!z3dAnSse zOYs2VKD)`9&>kLq_HoB<-0E&2_J~bO_c)K1<@NWsxu08I9V}*POK#c-HxrZU;~p=M67As;9O=(-h3x7V>o&~dk|_^KZC0U9G-QM9Ncj}zA8dyS z6o5wO5n`WzXe|`cX%JB)!Y3> zsG<}klmatjsb3KaxC}p#RCoEKKQ8aL89L6mRgmO@U4WaE{xVuY&2=F{39E!OJ8BrT z>I)tG&~W4u5j8lhL_(J%4XTX2^PD2oGM7jwQ=(2;gDFdFFYN~kv^|ccz#jsEwd1(&Cxx2IgsMhZfn4cN-DYPpCtm zF-sHagpC^s#F_{-MXk$Xj1_6YG#AT#4OMGUi|46Fe0bt_8RnBk8+NfL7s8VLj_iw7 z8yt$YD?+Glcz9voj8bq;TX{GDi@X>0MhD{!bB3kE$tywK{CYbj-eRv~WLB8hw zg9HSjN2sST442PTe&FFW$#Mx12yk@^tZ8evwQ<8Z9PAo+{?Y;u8HaifH08oPv&N;t zyG>bThWCv@VS^3-vHQG{02voGiW>v~1RoiJc821h_|`lGLOsyu*GZaBiTptUEZ}A} zChq0g9Vj2BtAi7Ev>O~hH*{^XWnw$Z$N~LQXPh;`8v;U8L1EQ7sL}Xkw37ewLb(iL z?(N!j3TdQlggqr8?1Va3@N1mKpbJVlv=ID?sxek!Y;dNgTvJ>q@h}#i4|Fst^w2^M zKJGEJ6+0B&8SFhK81LUMEzh|f1w5wjX!V}m=9Q41_XyYcElvJdbsIj=JuA znuF!3XH6efPrKFBgsjmUx~1h<8mh9vRCs(wkt)b2L|AeJB*HQcH2!IHqKV(n;NKbx zu)A7#YPb7hPkZF{_wH=7PAX!&SDL{V4c!&7@OZ`t8SYMF8X6S~Ru{IT))a0^sn<{9 zM5bchsrM&Jb)r#4iOPUqX=<#ILgA|`mYY%vk$yuopPZ6o24J$c+l#;xR@0?(XtEehg$Y( z6}Kzp6GTHoHL6Ig9Y(30VBjxRz;XA2B&`}|O){A+MM*{mBSKu5DA50m6DoIiQH|ir zVIi*onmPr`IKiY+Isl$H$v?L%5i`M$n6IGU#uU{sN;<3a&Fz5y7OSS?IPv1pS>X@v zSd_zZXPqhB#YkcMJccC5a@Hn6f`c_ILPM%|5lr&-LJzOy@JCa$oVy0soJGy$RMeaN zS^BZ&Y_1kAf@MDpiu=7eXoXn1=mxPIeGT?eA-JV}$nRQQ@|ndwow1$g_jYajnbn7f z**P?bYk=0(d2YaERey;9Ny)UjNYVNt>%?d*F_Tfa;dDO9$#&Bo@4m^}K5X?F!buFi z>&ZDM&V?j{s++L%rO_e?&$AfnpM3!JxEzr2>aQ3eYBP=4Bqq+qzp<&MIZhYa!(5_Y zu9BFlPL4GNg3Wy_CbIfnXfDj&f^?OKRdW<*(*>x__<2m(k8kQfWf{pr%pReSdB%KT zjOkisPb&o5U;FEr+F`?Z(St-*%-G}^X4PaT92~|daV5H&nvnpj3R|N*Y*Ry&G;ha1 zG!PBH`V^;7H0d@^7VP{5);-Xt($;MY!t3q~^h0Bepj^7TxMw|79jfmP5>*iwC@bd& zBz%wl=7IX{YWY@{a&M5a_bTfgz!m3Qks`y_ihGzk%h!o&lCN>bR=ZoNu6VKlW*LF@`N;*muHdM zXJJSx3@B1}&`NN1iRP#q3GaJjA~XT56X-Emjk7T83d+?MuySz$B4sW8P$Ky@P->d` z{n%D!f#&5I*699j)Z@w1s!Q6iq>8UaHQ}xIJ)2PR#BB)+Z!~{#^jFWY^_}jYDizcT z#!ZYQU$t%r*7TH&djBR4kT>msFShA*^M*F8Kh6nDVaRyMV#r8+H(NgeeAvdOLBIc{ z{*`ay03VZsU>sUdy#vC8Y&Hi%Y(#zWG5NLvwbTznoWYln+rqj4B8aWO#^3;d6C_WE zo;$#1uwj3t|N3ELj^dpb3&a={mR zX;cxJ|FC|)av>{(fgF9KF!>S$8z^KX-7A183|Qro{RCv46M`^TO6a_AMEat{aiVun zvekfJRhXx9A=go#W zoHf$%Fpbxljh4bPORs)xcut7xpPutY{-DTb+*Y4MfLA$&5DQf_78{H6K1LRMkT_r! zO9UD|9`O}QG=det$Q@O5S*0x%5w#U?DwV&rio>$?!9vL9RE!FnMkR*Ld4b%Zr_@1E zpkNw8XSF-Bh(zA>gbkEh%w}3b$divLtu4pCCCC1K!w#xBPd-#rC=aT+Kt5C#S6~m8 zCln}}ZvyVKry!;X9H;^Ib*O+#59Aj|{#huT=j`UB%ud|DY&A=M<$?7^64#-UW5S*2 z==CZPNsrrxUj7mT6A0o?B)6q@Ir@@@fQ?idWYQWgijAQ4b5$3>V#+a@E46ChOMTZy zGkMK5s+}~i=3eLFbb?!WHytI_WG{D8$x|pwCWOPg^7<%;Vj2-Jix6jKg`2w`q=F5` zp}j+0tREKHmW{cj$k3bj^EeL+I|ZjwPt8{_1*%GBL@~L~LkJl}N_ssRl;`HUHKFmx zs~ENFJ1|m#0Pdi`+**F>US0rLtI_+R82%6CNkf)NsJ47Jc@f;8>wIdwh>sW-&)8x1$#p)` z3@l2Q-DnD3+V{ue-`9lVHd@YfgO9#=L8)DNr5$f)EU#v-jTq~Ph(QV#geW(~mM-(y zvx|N_7PaXAAnqQ6V{6n!ZD+=|ZQHhO+n%v)+csuw&e*n{8QV@y-le^&zV+4Kb@q?* zt1Fcr)v4;L9-VQI=X$U#_US;_8)4%`+2D0g`%xoSrp3bo{`9kh%h(4HukG%#o47pB z)ZI2;?AFZ~F=f@+$B8d@O3Ncx;%igUuo4QxW26y6V9wQ|H`o0S7l!J*C{`0*H&2HPfum$sA*hjWo-Z9m5YkC3x{Px zPjd~U8MO?zWXN%7ziWbBh#6DUua~X$1eFWdUREO!-XOshNIM8AqFt zs1gd|BLNk5X9`Zvw>dOtq-Z&fgSLBj3vDeuDzsA?{bC7lW_l_8K8sOIJOCXPE569@ z*@Oo7=6Ins_ccX(lh6*GNNJyhO+hNsfUk}Lsfs?@=9N8U;3lY`#ZT$lEIY8nj(XMz zp4ttCq6RDFm_<>#*M^-G?m$U+!=3>OB|K!2@BUz(0AVZ)Qod*uG)n%GA5l3RuD4$Q zCm!I>;ac#yi(N1CyWYDh`bZ0QK35`KZ6WLJJ9Jdo7R+8p_+$6tNwb|Io58u$z7pc0 zHLrROv(FJ6KcpLdffVOX>JiW;@)3l{QR#eGYJbdyU-)9uRsqtVq5`O>KwG$uj259< zbgrsYoOR%XZs8!+{_-d9fgz`dzi8OaXhJ7|1CS}Lzbgi~$`Rr)Wt*_Hz?&i{zWhW8 z)QJmr_0ZVNVFN77dMp4`NFZ;zU`sNKHNEVw@9CbRNi%*k@yDVMF^jui&_DI5H>|l) z%~dw^2c(HDFUBjxm8-1t4IbvLBJQ$BdJjOJp1Aoqs?|KN!gRb##J96~cryoqTypmx zH3?Vmn%jkFlD0=Qg7rc$*yGj$`>3)o=wRGkbW)}v4O6J&v-GldT~?a{{k*1d>6N{p zd+2_@Dn+gWLrVs(wC{Pr$EmbFw{RA6+n@*!r0++cGGaeE71uU zWCSd03|c#HtpL}w7jcplG+v>u$GB2YUm|Z#>*s$ljkBUL5z?yWWU0ZK!<{CZSYPhW zD;O6vp~u&NTPaWzh+Tm4<+bsku}K(YU|leLF`saSHrR$US&CMFKN826rwAQ=0O6@>Dl<29)oNd$+3u z^1CL=dWyVoIgLNL1u;&-1Eb#*5F(68_{lxURFCoPA3JZ%wQxiv*Vfz?#tYjl2uyGR z(SjkB6;)qj4C9f)(FSlVmGxl7GFmUAa`BpRyz<2C z>|R4j%q)ssQyUe|h%OOZxQ}99@r-@nnv>$xJ1ePjBMb9N=Lsw)szCvm*@oKweJm8A z{52esjxFD<=fh*+s?kFJ2YF#(7Rtib>Un_9>LJ8hq?ja+sCJrC&aO`_liQ3hu?S}n zY5o=cXPZp2w7^6d@!k~l zUKG^By&u2DQcF&c6Y2eiVQ5Z7i$^GLcg1>!m;wT|wU8zAgxSb>!--X8t6X3?zeXom~s z1XfS9oOQ7>&@9SYRkU_t&|5AbOnG#yq@7%t?Lh6V(7iCgmpdq74URQ5vlJ$mI~<5M z<{hdt9@PdAnktnIk)It!uQh~J-DYS@mB^P)c0z!X8AIXXUr9w`fdB#tYr`d&>SaHk zKg)x4Gmek=lex1lO?%78V_14M^E=@}hPqL%^&_;=D^Hau<~Mwy9^9x$-|Hv-bmX|sJ&!<^(oOra#e8!ON;d$&v{8oU}JvqL-CE`x4E1DnCx^21WM zv?7ADlB~QbEYUF9#laRQ4wz$UVjkqGKR%JsJK6qmud8cqSI~xjbSTQnM%x&y1ERj!`VU6Y)FlnE!jUR^pf@A`!QW?~ zf)9rc0oaWVRzMi&!sRz~H3QE7ErZ`PICM@U%XfFjjANMi8|FiJQ(+20?)M$2W5=94 zF{Q9dv7!=McL8?&xs*<4S3WsW6QRQ;yeVPnRwGe^;u&>hN4Qpsl`H$;4=U`yPD!rW zPM>Su3t>ZwwgUmt`lkLWq%;{@-s=HeS#v4ZVaec0x%1Il8%mLpURDz>1w$WGkfa|x z)AH#^NtNp1V@hgwzr?tq#iR5t=<}kpB^4jRZP?TSyxL2Y%KPgO%aL(nv8L44SIUT! z7N_nIFbM?RKB~CD#o@Ak=(-0Y#qY1A^hu&kd`lT{{Hm7ijWpA@y^t`o!ze=SYBWAms-F zgN8INLly9s=@X=HlKTjF{duf8&-eLj`u8LhjZ6k#-w?|h4aS!zWZh(6$W{^TaFU*{ z!}oGy{5`u00zM#{5t(AP^8F~AMNBkUeq*V$<)?5A=+Wuk0l=WxfCLak?>*9`&1MTXpuI3u()XN@t)MkXKRP-Jg z;E7bO0rYRMd|p3Xw3kDb`vbR~uT##>Jf+)zb3Ve58XrP-_7<&2){-f#z29RDff5)d z;lzjL@*2q^_}oMBIHUMqIRGA%P8SKQHsTglB_Bk|z}0gRq@mDi9Jl;lsa?@5IO@UY zUa=bSPS2w+>tun0#2U* zmq6L{H=y`2#^~`){ii88nP!P7SDfdM&GLwnRRP3#>A0DgbOQ!YOL1cn^rk#BG`@_m z+=imrSysqhhcK=BK4FWS&Rk%#BB!~J?3HX8Er9R)kc#k&Y_+&c@`FOu)sak&LaQF4 z2v&#Aq6nxXcNs`NP`Y4}LEt70g84+XBm^{r1!Uu|x~)zmd6YI*VY@GscRE;aKCoZX zR)i0QU+;&LyDyQ!%S7r#I1FtBKi_1RcciSfDIm6V6?c$8B?3o_5lt0aO+DjLvc(0F+l80UHFA!gt@o znB9ApzC2)`u$QkN%#7~1X5LKDJv`%8F@A;F%w74fk>yV;A<73yU>@@Wt3 zszi{~OCJ(WXIGm1d}LU0Jg+e=H^sh@2p0C(xE{z*Ds_arwIs?+Ey3hq@t7epQs5F} zh954iDn7+RjKNSuL((%0@fy%2l%0D1L|5IPzJ{%|5C0)o{w>7)ZAy)UgYlnJYHalX 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 literal 0 HcmV?d00001 diff --git a/docs/final-report/STF409_A_FinRep.doc b/docs/final-report/STF409_A_FinRep.doc new file mode 100644 index 0000000000000000000000000000000000000000..f7b1c42963e57788c8011bc7367bfc82cc1a84f6 GIT binary patch literal 147968 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 b&<*Gg^Z-~+;vnys=O22&Vd3);QsDmsRD`XX literal 0 HcmV?d00001 diff --git a/docs/final-report/STF409_A_FinRep_template.doc b/docs/final-report/STF409_A_FinRep_template.doc new file mode 100644 index 0000000000000000000000000000000000000000..417ecb4b322e221f8b7f913210b3c5013d6de1ed GIT binary patch literal 82432 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 literal 0 HcmV?d00001 diff --git a/docs/final-report/STF433_A_FinRep.doc b/docs/final-report/STF433_A_FinRep.doc new file mode 100644 index 0000000000000000000000000000000000000000..b5d837eb334ce8d9c923dca4aad7aa871073c82b GIT binary patch literal 883200 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

vlad!o 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

w)Gh7|){kR5!h9lim`J-N1)N{de2N*H`FB!nzl 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%0Db`i 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

?tza3e|Gr2`;b-&uZI(dg@!gP__Nb)1uf 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 literal 0 HcmV?d00001 diff --git a/docs/final-report/STF433_A_FinRep2.doc b/docs/final-report/STF433_A_FinRep2.doc new file mode 100644 index 0000000000000000000000000000000000000000..30d9b5d0d35e184caabc3289c807cc483166df28 GIT binary patch literal 308224 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%0AY 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 literal 0 HcmV?d00001 diff --git a/docs/final-report/STF433_Requirements.docx b/docs/final-report/STF433_Requirements.docx new file mode 100644 index 0000000000000000000000000000000000000000..42b7129f7112fe10e129a884bbb31e6f9d77daca GIT binary patch literal 458813 zcmeF1<8v-RknZ2uwr$(S2~Ls|+qRvY*tTukwr$(ClY4e=-KxD+`ycGihxs%$HQhD8 z?&)Xxk2DA<|y0JXC`$t^$tfFT3`fC7L7))cX|aWb}X(p7S|Gj`ObceA!4 z%m)Rg%mo1dTmQe~f3OD{m1Qh91QEM1?g<8U0-9tI@=zzZ9uHPQ&xLC)w&J>sdRDP0 z?s{%2aU=FQkwssLW0T!)t}-|ZhPEPHmr#rvnOOIWvm>DWqlbfKNWLroPIrewOM(?> z!On*A<+f_-cxzNXL)Gq|`$nxI7u6`_Z~LpNjez>et*3So|DD1~OZ=;Z6Pt7Lpjl=} z2+3ODPm~U3KUm!ti2_oi(%HLm1e z;FVj#SFg&Bi|3*GYxRxINOs`xyAw(kfsY#4{DvOs2IQKO57aU5jhh%ja`&$@3Ncqs zLI%Lt1}+sV=4~vt69)*C7`_*5c>>A(^nHsJvF3N|mg9T=sh&8MrcMD(lMCb814rLY z-Y+rUf%li8%^w6W35gs5ya$L$&gv-zZ*u4Q4>9_me^mecfB^pdf4t+zVYfW|yTr2p zaEAHEyRL(=l_LZFf6V{O`TtQZEA5SLamNNn}7I{i|!E5x@mvUD#^nUGFx>>hGK>Sf3)lBy{ zh5I#KYi?t^%)lF$n8zE*RFS{m5G+K>Pi(?cTc8y*+O5WLQHigAW4 zE6$)2ntj(if9Xl|M>irmh!!djDs1M#%Q+K7LkGcWE#G~lhKGPiofh5O^Ft({fx(Rb zzh%U3W%Ps=4ghG`1^{pYkU*}s4n_?B7Zf8~Luc!M>G41E;{SsN=wEXDx6l9Vv8gR% zyCH$x#lZN}hgdrjdP)9-HkdZ>yPmN&VPKVKHA7I^It@~wku)pDr$;87n5=vaHpkQ7 zLOU|mz{t6*{d}oHb;`BpZ$v=`1M$QFYg<-r8BZJ182MK4*tN@jPDqSxazaKYWV|(E zQCMr17slJ+%1h7Z!B!42H1u1}{fS-9&Zw*8{l=K1{N)a}Y_~hQeXQIZ%|w;!Fx-~^a|_8rI%Z4kLSbf?FPk6o6qa3-1U3* z3F^?w2*=Sxo0hK~e!rTLWn1T^9!QAiwUst+g!6Me>AcIu{wMrN!s?cf+;YfA`AW2F zd$j;vxQxT6piiM@+cLrqbR3xwtNo(MUSzg1rT{IE>$p$RhlCfBe3JuGjU4^bu)Q`o z?dAz6#&wlp+{t{+(R`Q7*~?LT*OQ7>J|RsP@wBU@)tckXyD@{Gt>@W-X0yeEv`!jE?KsX#t1i&LDl}&E#N|U zIkoCkJ>cU)_;5($c*(kzOWpH2k-?exV2lh4*CbS$)@Z%>7+Hg)wbCKFz|Wx09X_5h z24Q+{BIO6IC`RZ})mkVF9kHVl(qv3^{b=Xxc##&D5ysWDxlI~RSIqt~72Ff=4(vs{ zdwK)sSqOcQE7dy966!Q@t`Ibfcs08y>!FgwmYZ<;o_$43D;R4_LZ3D--l-4Ucf8{Gn{totqVius-OvdG3M%EhNo5i7 z{Sitfrrx&rqU;N^2T(Wc=>OU8%hrx3ZX`Wd$9ptIplD1fbQ{mAQ6f1TP=9dOB z>d@kOP>Qwj(n{1Tm)P8+L^#S@eVX*_lrmYFxQRSQAzl>NKImjq;OW9_wzcHCK7Sr? zmZtFCS=!9H$e|3xk}Y3caFaMzOXiU!pXfYxlF)b#8A|9B>Lld*sNm^moemZ#3Ke`d zC9s9aJZooEWX=<2^dktV2R)>NYIsrru%a1x(tabH5pq*C%3VBK-@T?WGTg2iNGa6h zo@T$FC2YR99^&pT9Tc%Qp5HpE2{TQ`#_%93*I?V?C-I#B6jX48YJBRJ4!|gdOo;tF z$%X6WlrRrjQ-|jSZYspSfp%Ll9TlO^kaV3Zpg+un&6YqNXIhm>%(C{C%xB6yLEC0suQd9fzi5?Y z?bkJ~z@6JPy4?nM#fn%4ryYtpNx6Hi*)I4`p1DoE+adGwIf*O=v1jLQP=66C7x9P# zgn#8I;(jQmi55^;zEwx}!b_8a;*gTSDO8MeFAGv54AY$mUziSSA?Hct^|c;}nsq3` zVhy$g!Yql#tc!4GfC+6+Qb+`r3q$w|<&pRtulx#kIZFK#t&Uvz`zdgU@XK{N+@OJx zToO9YiU+#m04=LGdS9J59B)%e>Z%|vU3!;^8dYxSPot9ii3=#GbMCdF1d5^hM;Cxnoc5*UzXGXCXtt6G4@5cg=dhjE9FcyZqlU5ktE3` z8v=Q7tl>Z<8q%x>)ivGO-;<8xjYtVeXsffx0;Xm1I1dGoO$g&9!%;2^^u;%P&IsYm zWHY8BliN)KSHP|Pd27Pys$=TTn{i{W22?;V9Qcgc>W=_r1gqh>R+FXbxn+#9cbUJs z)Gfv$&leA%OP`^lkxr+n@IN6lN`S2R{0##U3OGHt211_faza<5_X)rMnYY6>WH0$I zsK_zsUQ)}%)nx3e8U6Ho4la+rat`_R_#qd*_0LevL=PqteaqS3&)`Cjz%M({?Fq8A z*EXwMNDRc{4QNSo{)rM=ELR9!+e=RHuCmpt&xsZC^7qQ24&FuOYP39F83DLNxRV}W zHc4SZbf6@O(KhSvDq*ZSF*qYkf4KUDQ&RS`j^zw|O>I59#BW(sW&7)af(XW(7jVv0 zt@glOD_?-eX{7ECHX9t3+90lFqt5XDNfS-D*Z^Gt5(wqPY$;qQo3Ua0j^j|q_N#QK z1+BMEwS{s;SO>jNczd#Ysb4?t=9NA)d=>jd6J;QVa9*==e;VZL@2WjoLVRJPQEr>? z9?~7xY5|65rbEfiz1lcg*0bH-k_9)e|8Mw%j8s8SI7)w zQKTTW5ws_i1%lh)-ebgD`-~=MGJ)DF_{Bp<-3{tDx~-Q@);MD}hr?>c$}(=58rNW^ z_^W{~y~H3ZizE~jGW_BBoL4?sq+Av|Up9|Ze7nISz?wDuAPA)FuG8~a_+&{jlS=8Z zSAV#)@~-o~c_9tR>^^Ou_th+6@l#?1f3+@e5_wpHMMOSBWZOPBLbNvN6ly=5SGqNS zjuB`q*2<)DkPQSy+%_3q%H>aFRm%7od8~R13KHSRHLX(C@T+VhaLOmhlsgp||t(X^IvguVYRi>%Dl zeEz)b8ZcI%=Cn=oa;wstP*TL);abhcKKB;-P}#$rK2%vg6}&WjU=aao6^Ua!>Imr+ z+8pAUsQu<x+$SykPGscO=hJv6Qjab^h)HXGYE-Lxh z#3S6q8``fUb6-B#qapIJslcfvAsRl|O!m%5q{~}8A}g-mci+ucU}SONjRYrnAF~E2 z8fttIwZs)ouSMBjCp-%&KW^VB++fYaTNA+?xalXA%($+YNg<KFDmg(7w4k!Jnm=5P82O#m5j59 zA1{If8M!6N#7G@sgk8n>>z}R4Dd*7r69XCECzjtlsf1=an}jUJO#J=&LihK_RSspu zt@g9`d9y+4s#JrC)^!)o`sKRv{^06qPjU!ScmXdx`b5Jt$&{w_Q~So}r)EdMC1hKV zy>4^1mu55f!&i4ipYsZz03x7{jVXY{)}rmz{_qWjWl;6!+RfnorQvL^H{q}`LkCuUcj ziZ*LAC}9_|NB$`4Bh%7v^5QG;8lp>yOP@yfU#p#lOwUYR7Tt)w`4C#?o&%=uJZ$(K zy+eCb>O~rS0yS(IS>f$Y=24SrD8)W+xE+HGZ}Ko+Xeo;?D?ko&*7 zNiMh4dM2%Qh*{y`L%P58+QiMk@|YMwCNMP+k`H9gR;u;GErmF7_!lCC|Ke?nFl;?< zdNWCnINdA))4tq}FgPH6HfT&*#>C(i9ATs}=ZYI`!xbL`PMM#odhZD;rEX?iIGcgq z>x@A`YT*WOuyk!|qD%_%fU>JU#9k)dSV0Ue-UfXt_u}q~U98zk(S9lUnu5C61mcS< zWcn+o2Gregs+8glSPZ~N@-upyxmAO!4me!;;q8aS-N;1FKHgN$LS_fdrelWRu{`iH z+l;tH@TGA#qdBPt-5%$z!84RdB*=L%Pq-ub82KKmcqDX~o>UvCKcXQAZ&%g4J&VdC# z8Nmy80>7)`N_XFDgKgZ4tMbchz48Xt0x~IddqahVmNOEFfiw$XNAD_yYBu+hgC~={ zvD(28fGP+L|1>;-ZbRExrRtwR6%1Z|C_#sM1Df=gh10|6!FD9g zIUPgL0gy)AjNPAZA9!O*ig%`EC7$1Y`a(l}QATg8@ce-DW*m+0#gsmVN=0@JZaJ2<`+Va>dDw>5TMQ=0oJGu(aBx^) z%Q^vUn!siYv%Ku8pAI+$`v8fEM2;5KQ`UdRzQ#jEnO=G}bkxnY+(h=d9dAdhsml>b zQoxvSDB;!07-acY#yS?3N@YE(|0V*G>VpztX)S4@esU#LBd-2!_3T;7Rd*&^iM(-! zjlu{!307OX$ummc2KpOlMbgKS@1PIfq*&y0rQl*Ut9Q8E+j4iS?YTw}07E=GVxbl$ z9s4)@N3g*$lhak(Z`b3`br+%_HS4GrlDdAV74U5C%M;YCW^T@(G*)7=&4lHeVhf1j z0^`Y1So%hU3!7&+Tnut9UYMx*sV#WE89ydTP@-$Jyj|fnho}la5RB@kjjIf9mfA$n+WNIVm6vE*N!SN~ibVPmq)RLq#W^3%wf$!@ zHuuANYJ#bA&SZJ^@@Pi=i-punZ8c6mSumE9t*XQ)ZfLhx+-~nyu1nihq6$7Pdy!(_ z4b+ J8iAeEa%HGEksHycNx^;spXHxK02wfx381bvFqnEAkH{b(#!y@zCJMk(>ao z&(EF8&`vIVTONWe9qq&}PS63}S@<{(2LxUy!*jsxa9;*c3ziX9Cuy`Xzb~>-CpLXZ zw=o%k@-!!-5~xqGQFB5+o(6<4oo`PRW!fUxt4^-_0lqD|tmz&{I~m9Liecm=(2!N% zL$~}Ntw{ap1V6;MN1i>PaLLV^K)8ZKP$$&>MxJM65?T<&yX;8RPKZ4W8m~sZHqeH@ zfUj6L&`Dk17qBXj2-Qj}jGx&NL7{ zZ1Q@TXP^v};wl*M!o|5^`HVD3a}-8aF-o}QTPtqT0n9qU)~zQKytkf5TMRd0EYIzP28gLY_v zbj)SS%Ez7)>E8gku6F)Egq$Rh|}U)$IXE;DFOuA8U>n?1fW>Q<;vdbNP-S>6m9mTvr^5tOCV%?q-Rq zYnSw2GVkvfd2l~(iY?paO&d$^Q1emX_{^fbJHs6_)K3cu(?VTB=7e5+wLU|rJXyOVGut_EDfOmfD*`J*u>;@Naw221H~< zLyzY9MkBFvl*u8YU*|A5xc6sJ>dDL?@mF8hNR|gS*nuS947@!2{M^=NgE{xc++IwR zV#WQ!&wv$(3&j}=D54D&qmK!4c!(ff#Ce~1!q^OiB7iolbDS`HpQg)z?XC*f!vUKX zCcO#z(kMic7oKwe{4MuY0&_Z|hUC439K^j6C40ra59Tk#ik&qrNz;x=^5^S0^O8uC zrL&2UcABWYo7@4Z`)ya%xygmNdJu}4L;aWBN9e+XI0+qzH{AkNz=8jeIRIQ-v{rQ$ zNnaeg0Vmu7EX#<9eQVztsegDI7zr&L;k(=8&)3JgP=$JtK+}2H>xQ`0?#>F>_sCDv z{;DuaKHy`L3FO;Kt;g5+_hsH)M|s~zAkLuJB>_G3eQe61w?6<3ZE$B;)abqYg)%H; zG@IZ562mJFDCnD4GIc>PB|XDv9EQBV@ARA~2?)Pun$^|q0#SLY|-9G)RM)jLU7ECh31U&b&~gH%o~lCEQ*Bb3de zV77%n4xO%TiE<6ail(L0dN@{ABVfqPk_AJxg01{1U_kbv(Aj?oh#C*vQ5YIkS1bF{ zf)LB%?m8lPeB57sIh@D~(OA- zbMOpx&(~4Q&+A3c*VB&AN6pUnN6Qaus|j!o{^#v&m#r+)T5Itxi6kD1UWV=)XcHab zbqqJ*D?YL@A(pWqGO-6y*oAhj;$!CLLuw1{ni}tSalvr1gL!Z<)58@Tx?pNREa5Xu zPW!8zEKCmj-;9sjwPD#XRYRJ?VttkejwlnMmT(A}^tjam*2p+yl0I4PSIjUzKj5zK zWW)Dz8SpZN1xqzCP?2}5S8dCA3Y3{2PST9n0BWTZpcYE~tTnjLJ~(z&FL5h!+{iQL zHI@5!CL0BT+t>$rGhiTSx5)1Uf-a)lrOY6FJsX!C@$bOz{NYhR8h||)LEI@})RgE- zPw?q=5uyKv4wZKn!r`=6K)8mDfFJC#9E9|U&S~w*?5PudgiWs}v-zCv?>}2UjA2K_ z^|2019|=;mfm!E4U-hL%k#m?ZM!*;pXp#u-&~k{=NkpT3MovN-W>0Je?LZj@dNgbP zr2h?5RZX)tq29`Y7^h)waV6nno94velu(%S8%oNkF829tmlaV1{LWlcg;yfICK-B=& z_F&WSRJx{U3dr=^n;6A$Bzix|KT`18r2M%R7c)YZ{;kg!lV9K+hbZ-3|7TLkY|^>F zzoo@TJX(pseC|N_z{=5jG$&1_N#1qF?;@TEDy3Igt6(g2Bh?#i!t)(@9d zH}^0dhJhk~7zfpuK6H(1tXE5VbLe8@#?-O9p(E7x64yArS+(81x}ucdsUI}|kOk%Dw3y?$k zIJcEnU(=_gI%y6Kq}o{(wPOJ)aV@qBGeSwjZ)B2|z}Yk@WlL}hF_{H}@hWy|hpS?3 zZuxijXuH{6OI6LuemU6A2SE6Hp^{z792rL8kI*7dN*g6r0eo|!gyK0HL7u-LI+m+T z=1_^O)HP8_)egd`1>8*1j@tfeg%-ya%_{9Z$O-geA!fyq=?ezM>)~9 zW|h(g!I~(?AqRbw4XW6>+GVOyu$2i_$~DRMPLd~6L94YcLyx7{vDw3sQIock_&)xf zf>`rTI}dlTIPm7?XaAeB`iVLq=YEqC#XSI*8TosP01w`d*CmDPwDbxSECOcAgr3NS zImPO)Ipzpz#GfwA82wpN8AvUja>oqZTCqkH-9W|zBj3D22 zI?70WW;g0$he+V05to;&;O~K{-_ah*w#pZyZ+_svx&jP~_}>{Kq`lFh<*`!?iZfyu zN<>k~3u-;6r>a5Pm^HPi$|mwMc7ok6X0>I&W{$TG@j@F+EUrP=ytZFV#M2ey=}JhY zq?k1Q$eydSZEUC6MhzMgy2wzd(4alXtoQ|LR?aoHu2gXDO4(_Jx779Z*AO|j(KOE2 z({OVH(rogOn#+KAahG~TED9-okcHfzqCTW3$Wg(K)zDwLIbQBD=l%TiV6+$0|cQL*R%|KB*K*NZ4ltM zdJ9xAL7eKyPQn6K5xFlFRgDz1qln1#L_{*}nVszjHJ9_lc*<3ImDoi4K1mLEcXbh3 zC#uZGLTLz9=dRJAT3(=j)QV4+nTV^oPkSV^!dB~%w+MnKMdc%aogy}lUa>ztRD`$? z_(NS@Hg_^DS&WXEOXTF=KJQK6_{vN_bTIv8S8%b&p3Ur<9``EqppqTVXgriv^t4R` zl6fPEP``(%hGOkiUr>=tb38M+KhoIZdtG{(U_r!$^^^F;twz*sHE>n+JEQe z_X1A@oGMmU4u*?O-c^i*<3_Dhs)W>5;|oR|+gSiP@xXmCN22c6ZyfrYsRSiUo)FMC z`bpcoR@o1DbwZpouuXHseVuXy!bcgcm{Gn0w<08rGjkH=MQMS)1vRLtN=h3iDP06c zf3=TOhrRh|cel0gT#8#&KfdY7NKzDkPpDKb|F-7%l^%<(Lpb;fg*J64Q+kH}PVJ;@ zRfxNs=f`(kFq_-q{}jhJiIG6JG^j^qSKJw5p}CSZB~Cx&3^4`n$2$?4M!An~r$w5J z^wxhr+!Ud&6r9xjxCE2+`c_0ui7xo_a>&g-jDCF|k-RmEEs9KAPv}c|IXWvojtbzO zvrYPiO30F~VAEDK54Jqg(9tCLh+8;(Lb8I1(F1LVX&)y4z z$0r21J$A;6b;dRGMwm!%Lu^LZ1G8GU6OcU47u`1i^?Pn(G=(h)C8!>r+^IL7)6ZYS z1;vjL7yYflsawrx!7y7I4^PTAv6umcwur+*$5-}mQ@9-=)gTEetmn@I#(NJZqP*+4 zgsshv>388Z>dOJtlrP4$#p6yESDF{e4O!euRxOm!B70;-L@ zVR>C*WzwW>ZUv?KOF5h2(j4Oh)X&|Oj9YhWk=>{UPKY39V%PROJVGB|D;JqUq@8dK z*gM1%&ZK*&yC6~Tn~zgC37%MkQ}n~ptkoUedeB>is*mJ7R8b-+v$G?!DV0TnS3qtl zkcFT6OGW{t9ruNf7}{ETkXFTaNN|$2v}D)sPUp5`vSP?YKB;(#=Z5wc5(sqvy&5iz zUX!Xe%3UT1X?@5(s5=Dy_!u$uK`rD3qm!e3*D*Z3GWPVge7tXLTB#k$4ewjdfkh`l zL~5mm)Tb(6%6Gkc%^i+8AU*BMG}es$Zl!g^1OlM zUYWAAMDsDoL`()87s(BlOY8P!r1W!IElYN+Gqpx7h2qmc-Fi_JM55hlx3cmQ_~R5F zdHn`|KKX%$-l~P(koF)AoM75nD{Gr@b5sY@F*=!r0!v$kz|F%2ie$wvTk4Rn5*7nUO%agyb4#%wB0E^XR7)Y&3 zkWO*+OkMDtJ5L~*CgWsBY1}z-Ddd%tk;=+H5IOVF2USsvd6IN5xs2DwYi>bD8k}9J zL?7FACmEz>hB$5$~}p}$=vMP^*Mt>AlDvn)-h!LJbN%&_to-q95rnL=86Gpa0rb7Ta*1xFII+8~UHa@H=1e=lp zX&96jvx!i+L+mDEC2?o^m^8@L`Z^S%=m?NQ!y^HAY|u6Gx0n`&Eiu(*JRHDD5EgxM zSod|-?E()j4$)v}7yZoEJKN99AG()~E?w>*VkEKMlqOuoPMfeutFu;4Vb|iq{VilB zgK{yQ%I(|# zT0!7|w~O7r10C9yoZr&_;Ycc8xKi(!AV<3&FN^CRCAUHsvcLo;XOE zmLDPh%ZZY954BR%%s#U-)OHrf-sm!qSWZ3<{R8hSLMe}_lMdyL^}^RI3U3`GgW6`h z?(a*B^c~xZearT}=PeAW3s;ab?;&oL3y^KxXHkmig_Hownb6(Q|17w#QD!$d&Sa+N!_`S04f` zZ-zPR@v8;Wa9goSVXl$QsVchMy6F6QQWYrk^wS@#FdBnA{9F9I^6YB@&af41&Zeh- z8*AG58E`WhYyJc!U9J92LQ8++vPYWGZCz=^6K1ZxV5UF|-rowXCby$am?{eRto^k~ zEH{lsT9(4aqMj*9{O~>K#H2rd%mM*o2`z`2CI+VXc6|5O;bK<0lETtgu^z8 zHG59Gg4g3}7$YA#tcu;SurQt5471gAaZICRE%zVq2-u}6IXV{Jp7+Z_rS12}K=K^7 zD{5f7E;vI08G}X6Ya4&rw1ym*G|bDDj1E$Bg$6wwNDS7cB}mtX*^biDV3B4!Z^A32 zY$eq3brEs!aKkl;l8{!xDfsup)|s8W;_;>crp9VLa58$xQq6;g)l9lR3)9!BdIm7K z!kx)K*m8T`^B`+2)hba=R8po%<>Y-tGz~6rUbS||B|U(uIA8zK!L;uG#_Trnb;N z?Z`I3qwZ>|>nt zQXp$^!wgXf0q+}xa4nR1@DNKr=*w+L&@My0E`wUsZWgTQeKwJVAm5Ip+j(iw@&zRu zh&WM;=n?lG|LYdA-V$y@mCA(&PROwXCiGQMff`DaUBPnCSf47uoLDe+ti!3j2g!<9 zfVO6*8;m`UtL#&}?45zPyHnIoK3nQa)Y$#C?LDqdVYTCrb)eYJ9%&+4NMWs5$wGU3 zYvnA!{kxv4*_>fqORGxRnw_D+t@ay+L00EqlMm#@Iy*wN2mJ*36f=Y@~qNN7Rp-An}~>}2-$rx1-(a^m=BIe z-EBnfLO|@Qd6bY&w(13jrbJ`$Fi5pMo82XqKS>x;0|y`d(*bDLd!mP;X)wzuOceL8 zrm5k{XAZmhA78jk{xN9MD{lBx>qEs1b;zbQ)OZkMQ1)-hN!Q4QMQ_&j9*)myKHiE~ zf{;p>=sCOLhnyMedU=Q8&LuJ;0{Uvp71fA#>X#r*=d|S&oRGanPcPW5qyLooZNYzi zU#23${(K7O(f@g6qB~a8gyqy~OvnFXHbyTimbB8mu5U+OaDLKl7F4U@`?iQ4*lxSU z`#mcrZBk!EnO+)&?X`PJNf_mqfbho};S(6D-Usj#ZeUWV9cxjfDajPVeIs-!lO~u_&uzF+Q_=J;wz&QmCZijBwxJAbTLbBwEFf*^^)wTz5URgZY>4eXfpw9A zSaRtdtZlpqB}n2bPw&!9`@xiFz%*bIfIxB(g6xTGx3;+p>MHX_mOPQ10&+P{a@2c! zZXVvvK($2$FX%@+gv-QLVCC(p_0ZQ%at5AGs2&mk5bd%3Bj@ z9P>a({qN%tGfh>h$k?6QL4r`OAca2FgDLhg)Mb(AH_UePZ_#7l<)>Oy%&yzr_?Re< zUW8%x&g`%}h0%=3nQ;BZ`m#r}S>l@V z1T!oOI(8c2;ikx@%Q+Qk)0|(Mord+^ zlMAg5j=AgHYeqD-<~Ui_1ml0mu#93g*n!)1 zy042vJ`NhMjdvTHAv5eQQk~eju^GYIMGf%({%Vqj(K~{GptSCx5{il0Dd0A_I+5^1 zP^26&DN`?Oxr%GnY3+cIAF=W6fbqS9$1G&tlWR3BQ`Z2=wxMk@_ORG3B`h6&0#W5tE;yMD+U%iIYA$eG!c7)hpBLc#WqXA^6ZzXX8c|F@^M!tfK?34lW zo0tA}=n8P)N-=WwoMSKOl}_(~`{CbpX(lUPuc)(`_7&|x^d0zgIV<~wQtm2T)_&9| zJ-_uZKT1ckGL>b^9|ihN8>C}{5szogUObBg-~y34x;sU3eFDMp4g*2cZTHoK4HSu8Kq zKtK=79J)o;7X%|-w!0I;4fpe3G8DJ($CL^m!p1b+T-$wT9-aSIoF&SE?)(KJ03veu zdOYSf!S{I=;UTe!{e0f|%m_4_=|>k=jR{1; z57AOmS)qOAM%|er(FQP@|0|evFo<{g&Y-#Sw7h}BNjM5URM#H;>uN%8ShmX?&_hqX zYL}jRyG13y$q9KBJ%)>^d@k-M1aXS9bp6XmHkLs1jS9)jK*ml%A z1J|LB=n{#HE~S)xkvU(~M>4S_@q2hJ$3~|e1EFEI!LCHVh%1CFYxGbmWf^YSn%Q{B zr7(9`k|uHdc6GHP2u4~cJ{vF#?gXxWskp0ppJ$IGBxhXyv;#6IEol-=mC*b zidKj)D^hzLXLGx8zosc!M&qD<7ye(Y(ndhy?$2H&w2nYd?5-wBA{=7fTCX2WQk+Cu zXY~m_`JVqVCy=ljxw4-9IScXLA=Ck4@g|fjI0cnPe>5oZe)prM89}2=E~~}5cFc6oft;xn+=V~O5sYl)BUO64l zPsx=J5(jJkfxg9$u1{fteYI2F0wN1QAxD5;)Svz!uCtG3^Vxtwr;(FU2U)G)57)6V zLln0>yLr&BJRhdrLY_mP&>7kGfLT}4ktCnxEODUdAgI#2TYE|qy)Ilrn@U~QKYGZR zS;hATj-x8-)4iXKbl7u&;x*l34&Ztq4B)xjLnRkIU9Df0K%l*Gj)DxiDH+fv@!60w z0F-|8J>BAqHwvM>nkgG*hp~8|xKvzixzDdOv7F%}mSF8ebuD)KA`VoK9vf-v%6CvF zSo7bk_?Uu{0W>Pmq54!#FfzQ^W1aoMozQv`r6m>lDQ9LA&zu=}{-2IbLeSb;-lZxv zGc*;xup23>@vWEIw&@$$Bxl-=QPSsC?Xs?V05r)3kU&V1xKSL%1w_n5HDeOJiN`u1Q%2voeKL?~vc|s<}^&4}CIxV8X48>h5P9M}sMSEk6=vzy_(BQ?R*m#EsSl z*N6y&m>D4+7M+8S+Zo*=(Jf8wBFXcHZdwL5jBrZeb0G8E2t>Tt;T|K~MEBDZ>2}92 zB=F5FlXB&}&eQfyVg~tuq$trA{;#rXx`R)EF2kt7iF&!E`EwKx`k@cC3owx{&RSFX z9(UflYP-`eu#-A{EYXdc*ntw0TkJH2bYhQ#S!gnYt`P=+-hT#Uyd{uyR3!T&e@r@N zUm_8jY`uVL4gEPz7kcwtdIp{U6RS{cEO`o>fS+vNZh%7Zez)7vuiJi50?c%}I>o9E!p4+IAB}gskz96T;x0`2)<<^lJ1zO)=A<3RA^C zlU5M%5!fHJ=5w=QH^4{Cw~4RgHu%Z(<$*Is4oi3CP_>MFM*Y6kG+icPvBI!|qdeC4 zl)}oxET1V@7K}hb|6A+V3U#4zE)7vjY!tR9G+7J$mw+1bpGbnJa*2qNxo=-39i?6= zRyuz#P`W1rqvw5`5|;(tu+2zgVEvPMCsEi;ZsCz2r8JQu-gh_5MJCm~i)6|}Xqe7dU}%_4 zp)IYnf241qqfQ1)Wqo97hg4Z4)89M#pbneLX&?~=8$$f&Nn ze)33%x+uh^%_R#L6CIGGU@zXGCC%W$8^*r)_+N=B1$C6gOg zd-`xBGsclH`wFAJ9nq8q$-Cl-=igLz56mrLy+ zyI+_^s6g&dC7t%$H$Cx6YZm4bvqh6OgAx}rODmKa>D|(ZO(bKsYHF30s`q`O|7);O zCCoE1vCJe!e?-2^O0{%mV2@2cia@bPftlF;lh*M9eLgOwMTzcB%eR>)MV9KA=XMdD z<<{CFkyUY*Cn0gez{f7fra)_6#R`X>4o+4Db;X4bNz>0N@yw=4R+U75u7n*Bx^9O2xkZV(!lw9Tsh*tQ^Xtuii?clZDUB-g8j_Yg`Tx#C zU9@vE_3_1uFf@sbEfRkPz8VNj*#I|5l;tA$Y$)Vdyi3l>&a$G$(@9T z!m6Fw5uC4z+jY{$nSPSuJAwSPV4}ORH)p1$3o~KvDti|L3ou15oT;4D`RcyPU z-e}&q07LH~u&KcSfYxsvNBOXMel%s}Fx0(P%P%a$0%6oaQ%7$7P&y)sV&wD3Um@Pf zs|JWQy@53}ymj5lB5ZExS0$s=-wkNYh-(uqduTL8s$J}HY?_G(qgGKHTw&z@C9+sb z6M!+cus#Q3kCV5-S<{VjPs9acZ6Q^a*PZNR180mPftF5FVJYlTFpu`D4j0 zp9!0ndfCG4M)LK0k$2g;BoCyK*4-^DJ_LxnGpnGanM9&Ux6yLAb1cOHr#c;50$F%8 zke_?+_iSvCp--Nd6M4N#! zzs_2>@P>r8c>eQ{^7ey);zyo;XBRD9yjZV}Le+GsFcHlwZnrKT9nyP>6Tw{buYPF{ARKX@0lE2pY%BzsaZ~*@ z3};vLHn^F25%RYfoUTpOB>Vj`)LKrdT{8tzX|6;mi>jnzkP?#!4i&ekiB{ZP&}iI@ zc$(9pUOdQkZr_!eYfvUnvFriSI7-i(b2>y`(3{b(u~kn4!NL>Ags@1$bQk4i|I&w7 zd}9S7y4l2XL(!y*>&N;-Zl(Dujce-nr{dB5MPh&1KKcf2V#X(U@oG(G)3I{d1+ zPmTOlNv0rez2zHgj7XqOHA}7>yln3&_LxNViV@Q%xJ~cnGP{$V;dmGm8)=%>yGcG` zx)^n|h@DSD&H}t9#Pt&5Z79tYNt&hd_CFh^;Rwa_?*H1TPHrz&mABK%Bcdt*y(H4Zb?1vSz%d}1~7wcfC8Bw4m*AxnA^9OlZ% zp?O+j9~EpBAeik_MW0HeX`0$GId={_MK(!QWeq0UP*lB-Qqwm1(l-`3&CUJW!W z@xE+Z|DB*|`+`&)iJP9($X>hmnHuNV;`@<3vO}i_q#TSs(VI$NJ&c;BPgg(h{VaE3 ziH1x={gVwbn)^rp`WY+U*qeb(W|!$R^J3#Vch4`)F`O9#EsS2;O&!egKX_-BYETJ< zh{3Scj2g=O-xj^K409ar&X6xnFpFt|Sr3+SYPK?%UD>U-Tp$8+o^e8ox zZNj#V9h2&gm{675W37aFO29Abq9Z(VDMcNs&6d}(>Qu`;H0?RH7^g6183q|zt(>867Lx$lnxr(j^-4(tU;dnq zYl2qKIJ#9+pswDqH%=z=yre#E*VMJz`05vU4sa!fXYQjZ+KC^S27`dBdMlKYrb5C| zlX5Isql$FAkUa`nN^)-ByfDyK6mKxmQqG#?Y2RT^ggkw5)f)jWU+-t4k}jvIbm1-g z;hL*8PqBp8kV~aK^=!kGHh$e6$<>T?jQc6}ou91OW}YaNa;8|qIbJVgr`f~uXS=U}hj?Fe$`da!6NpUD zJ^G430gh&(I$U{WLN+*q|EwtUIQ{X%sVYX;9d#nHB;o%r6&!y&Mb{?+b%9$jtEP6E66Dj+<eZpA#>I=NjUSUUMp!RFPA50 z(W7K8C> z_o|~WN&8FRWe9IVy0?v3KWXMp>w{>ouS?H9UUPYj(C1pE<&2y|<(cV)jq5&M|B5Y7 zxg88Jug?4Dd%fIcmP-GMjEVL;a)Gh;+V)et$Vq|md;L`%IDh9bxpfQIQ+Dceu8xYI zMVl#Akkf5R$J;JK!rMK7_~5VarptJxz()M5yYliMgLX!8VZov&T`DE|u8qd~*O^WT zS6{>b6n*lL;-xlbGF7o-`Hxf0q`H#V7KIvO%Tr}xlFhm&9>T*j9u2j2MG8fZ~X4 z6(zPn8|`*$?OR)orf>w+^h*D{A&6u}6luz4Z{8-}l-)aD`93BGU(9scbgPO`FH_rZ z3NzeTJTfG}$-|`0vrS4C4cX;=Kl^`3@xD(Ts7c;Q6)uYe@rxX zG~;o-GiCqNc#l@=jp#3DL-gb!Mc$m7mphh^k^NhCo!+;^n$i-;TKU6Bm2F;XN~gDjDG0+$|Ty2((86D}k) zf^eE_V-P|M=keU*=Bvb`4mFOg7NI)d@Sh)B9C+2DmX3K6`AkVga+ybU{njl9PYaqK z!O`{5$t=z+V%!ZXU(&GHo^XKlNTyH@WwK>65vJ}4`r_4OPfE9_qqgjQ{L{x~>>*n& zbB55sJ+{x@ZZj`%CQAfU%c%c9UE2Vy=AOyL|#i{p?-NT(PivWti!iVRp1N?8HmPz*h zwLBEPB4TMow$hs@nnU^Ly{1vI&HD!vN}C3nH5}VEN5cXne3M1n7mMEMTR*{aB)(&N z#1LqB@MQbOA-2Z1nO+y2BrHUHtcRMNq2VJRiV>0y9u)(PZ(`6RX9m;>-1~PM=PiX=f@dT!LO@GCz>3#sTLY{u zl9PklhF~m4N}Q$1a{*giD%1-16z3i|T27Fu%C3ol7cv@G>oK?*MNkQC8eqPd*$deb zPfcttE{+xqm99CsxP8r}592dfX@`cRH50&QtVru_D?NTR zaRfd5bC1Z_jrndk(t2}CJ69VF^4;-<|c4qnU!dI)c0xf?K$%mO>nUi zMje{Z(5XJ>wg7B@^T0#;A@7OYMe)Qy*3|lg z3tx0#O0y{*$I)cccrr_0hXJ`Tr&U+@ibt$2?;Tx!8WCs)mXIzkPUWhqLf$QmCwCP> zZ^w{kb4Z3>n{+0#cP7hs6{7t<(f{|vG?y#m&IIK*!U*|8SgU(FApFN_LAg>EcP9j% z0y2vWErGEdMYVj<&O+j%+W5=so>bF`A4Hw9(~q~4?@El=kT}hUgXH%g!mO7=40pKD z6nx2FG7eqK*C}P@Sw&ZQBWk^;@3=_f)a6Gp60fslAzew{iOf|Xh`5n=W{IKvu> z*M+T;#qi&F@%a0)l|?yP?hiM-S?$lGDK>{2yj44wc+ZAO*SutTQyf(Ca&NS=CD8mLxs5T0lEBbYqYKLx&a6pFw zbjq6%|7Qqx{9sY7Nl%YA_FpnOlqG<~ZseDi$g5`V2CHW)o{s+kTGe>~8}_ z43S~GL16cA@LF_x(gB~iHCj!;5|2IkAMr5m7fA=_*};$3BYT`+6{e|2X6)P+Vz7vz zi|P?3fZMG2Y71V?5Kw20MZ)9`0ufHDC!E;4r0lPwoO7IZTvGOnkbj3SH#HX=u@jdD zu9uXhWD{G;6822M4QK&)I>2iA0D3 zb@O0t2OFM^Z5(I29voK2_FHHi3+Dg>Pz9`oQ5eZ|HRmimej5xzin*G`0Z_v)WZf3A zo?OYmQceocbT^|PA1+hpWbc0ieFP5QI*+w)66_P~hCqbbWMCx*b7x?#d_^tg+!Nrj zn^HwbtE{zOQCzoOTaRYcX#*c2km$*|dXtl-7wgGiNhZeIEK+6Z8D|VR@LgxjbnlB{ zRkMMEstLUF6C>-P*OBU$^5int=n&$CAbxmjEE%D8>Av}9@21Xx222lVY{MZo*ic&D zA=N7y)lUZC0QPkfi4MkiUF?KCd$&*vmxez>IZS}In8@aGL(E})TEXuVw3^-=B)sH` z(oSYa{G0P3oiVXchfx+D?lOwA+AOSv**>hEmxy4ZIlK@*0aC3Fgc|Ms<(i!F zr>xM-F!Q`?CI{q;AmnRFOZjD}`YxM$=&K-64@iJkIbZv+L}S_}o4x=D5Spo7DMvT& zpHl}=fACQ_dW_L&gozteLih~FJIV=`~|0on5RAyBp|xO-^-cAEkJOjHy1 z6P>&Dj(**ha3NF|Hf+e_He|tn#C`{qdN;xsTgXfD)%#$lpmsE9JtBZVHm@IlGLeMS zlkJUuOqh00@YXR&y>Eoy#mR|9q%G@%^K(>R<8hkr@20}fdl{muw^Cc#{C1v_LTmTt zLvpwh+Sl20%u2FrN6qS$XW+ii(T3G(aw#JZG253fB=S)XD((v$Wc#^;{jJS#EUts) z5@Ol~u>#jD_zRYsH(E`A7q9z9h;UC{myN$rl=Ne`7jM^DQ_R1u+AJcBrt*9Ll3bmo zqRyhxvEl0q@s{XBDal=lUN4(~B;lQN=$1Yd1Wk7#E5M!_ZkcJ{S1Rs8H*rYW76xx^ z`dWE5nb^7GS%c504czUk=u6m5L&$@THZ=e%_e=0Hx@VfDYY4|kNG4_LEwoAMkPTeo zAaV7fcHRy?uQf@rt2p0iM=uYFifzVHVi)OAYJXL1xQyXwOd7A-2Cm~=UCSNGz$pV)hFs=&QLu#!VT}@zKD7n!sWbnoNI}P?Dl4WBOqJhyXVfd zMlv(~Pz(w(>Q~>yeSY-~cj5E{AOIfo_51P^0C9m0+~^#A*!3lmi*LXxD@vV(UGQ|A z)uji=kE54ov;Ob__Hp_*qxe@ck&XWvL#umtzu8ya9onI^wJ5@cDqr-D zy}QCip9~Ip-)@v!VQ`W-C0kTav8< zg|GGL0iJ)V$MEc8cHY_wDb&)i_o8TClt?(jby!MxAD^8=R;JgVBsA=HOF9(fEibQR zoNPV_Q6Zk)T@s>T0b1WvSvPkmB(5WKELI8q2 zxyiJ;lk;uZE2g&YO;&N{4KHz&Kn;f6qq^(EGgR46APcRQIctJik*#GZS0FxM`n zHf!ACilu=QVDTdzBxDBxaF1V#HDDk{9t@NSc_iE zf#*$d*hjl9s5yaHUgb7w*DfJ7Wwy3oAWtDKrusE4x#?lG_xSOi<@$)~D}4Hnfpz4a z%aso%w&+<|wauF4sjYkS2^xAW2O4jy={9eB))Rv%#-x=3M6K4>eY^Hds-~s1a1b10 zH^_n;M~SDlJutaORnJ$ouFuM8nXa??rr}NWeZ+(sq=_KQw`q#=I z{3n=sSKCs>P#^uRVQIA`{6wwBwyo3 zsQi)5@Styj-sW@YUpMvA(W8w+?B=eGh8ZEeXD4FG1yQGJK9#=@+hPmHICp?aE{JU$ zf8LVWQ*%KGWhg;=87OpRUZ>$-mjR9dz|N+uF?6u}p?yGi&6x{|N_R>1QF|r7cizQe z>}71UZbrR92G#bscG#&gIF;wPKUjFV2Sc;z&Ya|u=t#~EoY3|R$t2S))=;IWf4wt6 zzD$>hKJG3E?#?+ue2BJ0dx=nLXyXaGrnBrslw6m=iE7FqEmIm5x?RWNL+BJppFDTK zbu5w{BGY~=+7y5t7GGo1lL@Y@^?5VS=m7UwbAnv-5S3}fX5WbGr(pHs9|jO48^Qs! z|1N1O$?&{wsxu*y+&mKXC2{A|SlU2o6xnThjFT5g)`;wk}xTjg zx*a!jxIAr&HnSsnQ)>psmxN(Fi(<#cNT-Bqgi5G{ss%WbnUPGTP%)KArO?%?g-a#Q zTbB4YY6TP_dz?z>A4bmsafnc13Cs(tjHMcd#L782c7lmc>wB`nOy{LfU#DT?_{nl! zo?_;c_OPPaw+|XWQx3h9|54lus*sT9l;FgLXKz3$l;*H&7f*lf=I$745I%om7K;amR5f^h_j2-mzS<8nsAD-cJJzG1^0i|Qm$fi zDr!@gRuYDllSFGV!zB)<6TxRmbb-T_6$5UTA1@!@4~NA5_{5pS-p@kD=pRs`h6kNJ zXM8`y02v`4@h9w0XUy7V4%paPW(sNLE8OActE3Ud_*6_eNm$(7corR_iy)G4OIOia zp`^GtA88^jvzi{vM2v0+)Mu(?*dAsZ|wHuE8-o3i!fk|KZX;`k`(; z%P+Ha3wD8DMo9mYD-Ot!y4wy=a#i7%JE<*BOM zLIG{ATvkk(yRe#U9p>4Ak^IYxzSzAH(;<7dRVtT>l>&v^HjSraa41ly}y;q$cRKc&JdPhiS*`eSXjpJoGtbIm8jPln1|aL3sV?1f<}OC=XRqZFg|<%BK3 zh|nl{v1((p1~c8t3^+xx=*rs?*#<^mu-FZEwe?)ALS`Xw zx+OM{lWRrre~rOYelHELwnPxSHq_5AK>Il~8@ifbw3=&nbk34)7PECibRGFwO~zjM z>21uSY|h!Z_xm+^(}Rog9IYMk?9grx<8t`3X9kTaY3!>{q9qnGR;_IL73@wuIDQ=c zyj&PHF5X2pr{8p^w9UdLaB!7RHu(jP{!Z4T_K_S3T|V}dL(6^8+z+5hw!qRcp|?A% zi|$%Byl(HqhKz#(Xykt_E!QL5Q^CKS^UG0X*1Y_^L0Nkq{*qB=E1uaiD}`olgxr3b z7_8a(^`1|Z1NNI@tSzbCk_c!`ql2A21saK%gzbA4r8d9dB3b{zQEQ#G2BY9F?N4EH za`Ahxs1rrX;mTdR&3|`KP*mfFes7Ieg8j54j+Hq2Y}D-87FQ&xu4i8 zswmnRmzC=h}K69sG3!{Ga3La8b@S2b3Z^c~3<_uHL zw#*cEK+=*aJzfr+L(O7G@@nE=KC_j%bHYL~Kjdan#gwJl8w3WQDT1!+_j#TyW_#kY z04DD0jP9m4F&Evmu)wh)VRk}|J6>2{e_-+?76S-0g*Q8(s$P2Eh21B`&S|)Ca-p8U z57xUYGtqo^38)kv1X_vSol;+NgI-?(WM}1D4ZpibLX0M50^-i}He^C_fZ1Vdm zdqz2Uc*@^tNDI^AG-5($m?9YTV(Ue@08*hkbr&N*PbE3KEw898W>ZM2;#K?vb&4Eb zR*$m~OU3L8WUOXQxsMRqVmmAeV^O^^UxUgL>#gp z@)D6$-w|@FxJmmKzdKQBf~C~>D`i9o?yL`wTwW5fny_h5E$xE1LT6X!u+L-G{xD*9 z_LMVzj3Dr5LC`5qS8GZwXZS|-M3u6e;h(dbt?qQokU`&pXNN=_FaNn0CaW@RH1}m# zH|9+SJtaLLGv_gpjINi^&J9OTe|1zSdobWA-kFShQ9B1ITzB2}>yZA%-B*?bnf|SJ zV^W_CvDKQF8GFPA= z#}%UqB-h}i;s^D*1eIQ3?cV#-=L*QdEKuFq&63!=2U_j&G{(g})OLt#d!0^uYHxGt zu1)XQ75D7{BL9*c$CSwVpra5Cz05sQAGFKeF>4m{XND^RK|(bBB$7J?Cpz)5PUTI| zjIm@8 zw7bsvv|%%bVEzd{s!mTdGyr)Dt^FAsAKwj{jUa|s!~Y_ilQU;D031|yz?gCjH35$y!APkt8LD^-Xd_cu((p+Vbgszh zy+Y+(NPbxOJb#DdmZ~ybDY?Tzqr#RGJP{(_*C5_2KhR%=y5=S88UPsL-vyTzQcoS3 z&2V5y7c&^30Dgc4*pP-I4!Ntzj1w1FG27KW#Y`Z-`av*)G0GYqL?1PwYYNpCDx^|1 zCK5yV`B)~MF724n@9x|{ZZY)nOS?#H*A~~8S%A-{igBLzPFP)F$ex(6Kc`}gr~RTT zd=5Up4zSRt_%UJtk0{}_l(fRK%k1+ zyAvDWCO;Q{e>Kigt=fW%jPzklGqhgc9r1i)zP;CPlRjM|GS7HuPSZ!-6K7S5-|#}Uno|S<3ZQ=JO_+=28o07ZLUxg==_n6vQymO z92g9WTrO4@ix3*g{7efv>WxJ^pn+RzA@&g=Qw}JP&x7^26`HxKK!{iqFO9-RYxPU7 zBeF-ss#=!@Lqh3As!IbWBnWgQSNS9UZ??8m;rwV+14jg<253=n4X&hH*t;{sK~zZ1 zv5nNn2ERTIGqI)hM_UUaOxx9J@1&)HaB zL*QYM?^en^D=-`1oC|BkF}+_?9S zF{rB^LzT6h+c?*TK>8?01z3vsk0nG%2i*AQR*hXUa;qq0Tx4hybK#2# zshEZ&jr9$Q39X1QID>0NHXz$x2OSIu9J=Gn-Sq|6d}no2_mU9OL8yjyT<;xM7O|K(&a8!y6$3&HXDrDQEgNBAoSaj`P zY>)c!#)a9S>T4sTTYT@{xF~f^JQ+DT7V>jT{+c@fKbwl%;Jai)!#^=WnX7kFmob`Ct2W5xfb}BhUmUDWjGa% zkL~5hGDT3wa8LMMa}&3IWJ6qg&R}Y+=rn2v@=xmPl0`8rlbtjFFp&|9HHpRwNl zJ)cIEA9wTdvDDqRUARy(Xn*@6N?13jxPkJP*Fl^82l%e2Tw28H`N!$?JyPHTS-4JS zb%9v8=G8s+mNZhQ>h3$tbz?qsUdEHgU$it*vw^)!JKoTH^c&6h#zsq|T54_UJ`1f& zyWhOBDBbNiUC+J1W6n)cV0sc@GeB$$xTTZ)z~6O5cNDM+=#3 zl7o7)Gqrm$L`^jc;9D;b{Z82;wgolU4H^*6{e0I2ZcUGA&mr1f)x2V2LQBhGq)j!b zhV0VOEP`s5zNot9Dyi`|Qw-%RU_Kfx8o`x^TrTOUN6RPc#Wm8ID?gq@G1EHrD}J{^ zB#w=ac3v4bbLB-&*6(>+<_Hx|Ts>a$0994MY<8}7#4VfMg-Bg~YTS2DPS!i=$R`uL zikvW${<(Q4)y$m*lyUc&`sr~2id)>#0vg`bE$F&bHHB3H3Z{pG1O-AST{G5Da+hCto7>pZ%_?>jd+I_+Q9;)oYg57AkB zlR1Dc5mx@m)PW(0j;E?_P=gUQVgU1t49edcz6v~Z;OmhbDiHX=-96m(Js6z4%j>7* z(H{MtqY@Vx$OFaqu6KbvDW$9*Q?17J-m;~KTWeta9AQ_!rKhs|sO0AR#n#i?z$33k zZvQb}aW?Yk*R&B6XVDa(RQyN$oNJ&FLW1~jphbA+czJY;QTzVw?f=v|%#i>pFBUAf zLAxd@qGNhkpA%VkMazs?=~L=U@QGNy9h4c8GAN1@tuT=_)uF=FJdXB%*)Y3Xzm!+r zXbJUfUnM(ij5m|keq%YlUP3+>?b)LwxSQJY>=*}iYolaXNAaJJGlfr?1NDbMbGDyY ziYzf*>8a#Wz;~$&J5Kdb!oNO3d++@~aD0$e;gb@h?`YU>bjjenk^GgV__4!M$KEaU zxh|ueQ^Cm)z(&bYBzXfuDSI^=EtJjIU=2;Y~M>yIv?l7t_C9*-iX{-GQt2KQ^*}lGK8cj2ZD+8t}x8G?{XzfsHF0 zxa(N&$I3}ci>H8%vv+gOc!xSHR4MO7>-mBJt0@t``3IRs?M%OKBXix^r zX-)c=YdCi{V+`7ei87gcTE^S3f!t|rnti@MQD~!FQy`h2liT-9Tb5qdpyo-r-dW+N z(WnJm#d{ICoR_qmv@C=%Vip9xs?Zo)^J9h32K-1>$9wZDOZ=5x$1dwV4qMGmSWQ^H zj9Srq8?~UDw3xJf{NA0GOyH^b)BhWK8@GhX<lTp0Ftds$oV0i8kOS9hlF`c6mYF zYf;m(WN+y_r#|tCpCO*up|oJsWI_xET1zf{%jmZ!>FwM-@5?$;uPJ>n07y2?Sg;uE zEL|%RIX=Z>yg9!4(&Umz)9C*?A0=l`L`qeXLs6-Ube3^=H+nR*CAGorc4VE?1T&nA zSXry&(<%pqy^iG#IR?7ndvu_Xz>I9>WKdvPayX1AR6eHF7P2j^Fdr*U=BbAo%KU~B z>gqElgV&)nWG(o=?$_F3 zI5MccIGGnIn{+%N-|xT|ZQ=}vI?%pjE;N<=pN!FHB~3xw6sjuxeebtNt^7L%4sAC_ zWL}>Y!-ofG=smT^vyCi$AfxS6r}t+Wr|o2QA9p(`*n z>HujNxl8UVi$%u#TFUsBx*CbGeA+bI5AF@d0CfcJbPZ?2q&P=zaJodWh}1EAww0ED zzBSyEA1F}yTvRd|FOop$OWRt&c3Y-QQ*}T%wbi$#uVR#{eOrvPLwT08ww~LbpV?Dd zM+7-I$OfX#KmP0;LXK&);qIqHnm%|K5Y-X|m zK;U9goNz|Px@yeAFNVQ>nFuNY6~I4G2r^{LV42oY|5k%@l7mERfk-gPQBey#xF$#O zDx6AO)dQpoE>jV$i->I6i46*$Q{#ER=R#eYpF=C^a&$xo%>Y=#&{7Zq%0sLMml{O( znsaToBQ-n=|Fz= zYKhu4IpU!LmSMNN14yMfGoB{#AkQ~4gcECz=Hl*7Uj&R5+R2@+ZB=X_&(eCE;SnuP zzYx1I1+7`P??79t;#LZj7szw8c6k5yQ@`Is^9RHYxXBMJVilM^#0`0O{;ePLou4FOdH;ueVr>1$_?g??w~xL!h~#>JJ|H>n zEltiY#Ma#ebGL>A0jxajo8G9cFD_|XK6v492vW236i;bQ;6O!ka| z@X&g)DljlX0U44tQ9(I8Bnu)3Kk^i`4@<_s9-`Uh4d#gtB8S{zN5(-f?UTCSlhbA0 z#$o5_%6=RHR24F$D6AYH_)&R6p+%@xa7#{1KG|k?`Fld_A3_mxv6ZohH}b(VbpYF+ z8^_Q}0}zjI^V(Sv8&Ln-{_o+hy=s^_a^OO-~GgY9x}AVy9^+U(M;e0WG1++V(!Nb6i3 zAjCHM!kQ!1`!%EnwSmZX<0h(uq<1dP{f%Te!{~sAK$BMlzM2>Ta5qzD7-#NRW7RNC zWNm2~G?9df7z;bByB8r-+=C7)kf+O@n5^OoU!mvpW-Iz6B}IR}iBh>?Yx=eVNx;hw z$0gAP7@mD@d;_6-iPu9nP=lXkp(NAbpu8*QxTQ?YD{RC}nZs3yNOGyNYhG(y_8=f| z-t_jz-A@a7fA9g#cfW5QfXtGI5mY=m52#x!L_yN7X#@+9Q=ybX*BLoGAdh#S=uN7fZn61ozh>3H1?342JPvVgC0uAqJxGLu z@qQ1Uh=aCxzVoLy(Eu8fbl6o5gyaB`^ynI=vaD)Gik7s zBMzA>_wdC9K_6g7iYRjHDUz-@(9=-+F##7J=_5++Vt4Ya)>ZWRy*;bcHIDxwJc+3^avHc%Yh)b72(McXt&<0*zh?!wYT4#H z1R8yXy26_tRLS1CLH^!1_N-z-SK5a#*6^jW>$#j>p05m^X&L< zJ$9!x>-ENAp2pQgAc9-3323Ixd6~&9)KSYV9wcqT91tX}i-g61>73%g|3zSp?bO!3 zqyeak0Fgi%h)(}uU1+H;+zu7~^$N1A*-u$R$Z;t&1i~lhzwzr>BVu_DkOzhKv`is@ znn!K7lamNsO4Cq%6OWa0{P~kYYI>b8GfM*UGlma<>*eK8 z%o@Ecz%$FeMkvUVeOC6Zs0pqGuW>c>(~AAZvM1l|0V(mbiW$=>jEn3rF$AZHzL>Vx zh#MA_Wn!qymXOOiod=tQEBipIvq4jivI4D_maM;!O4UM5GrtLI&C61-APr=N`5O^bA#iniw=VipWi1obRS-?6L03tp53tf2Itr} z#A7~*41XL3blV&as@>38(vF!oBp%oo!sB2qg8T_t6G9NFOXN7k&r_vS&Uui&il*D- zGwH$9{C`qEEpP00+UaVN84b4EdI~DfO3IB7@N8A11Cg&#N#3-ZUt6(o=FMz7G)(~$ zI>T^{K@~HAe@Mx=8P_8xb_mJ5A%#Pu&{et%4nh-0qLC{I6t%ivEh$vtCLJJw8(Ms8 z^eqM=!LG|LdFHfq_^A}HOt)!Q3j~J3qR<21GTi?s&^Jh=2efbZpn^K=kU_A^59!m5 z_k&<%E62jlN(`itD%D6(vh zNIr0oEkWJ01$Df>p0-f<^Gn@3u90bX)joPPc3a?+|CD8tLCn~f)XwJq@*bB%2DWde1c@O>3l6z9R`1awp&WaS(#%=<{}O%7IAUnATb&Ay7=vU4 zZL9qo5qPp)L?ChaB^p?|&X1KJ?0$ z-Z8K@fnOD6pSs?uIWcPQ7-!a>H#`B9mGb(ng~ZA8Xe?SPV%{t8MXZi2aNEr+bLUS| zQIi(4ABN3ja-)Prq($4)79~nOZ~G0UXhfl7EPtUm%M}YnZ}AT{T=9688l)6JRvMUM z&r4Iaj8CwyD36<=@vZzpL?H2Wg11LH82>V)p&al5D$e0;#=pMCRHs#=*-5i)LRYa` z%QRu}kR{_LPF%-NWU&@$+BTkgwb7)ANaBY-I<`_uU}Bqq@689zW$x5Y!CIymK!R1+ zZ4>+AER0p`RbjvbE!~J)8SS6PScpt2vw+YcQYP?X?io7dT|~+NQ9U{ykx(h0bVPkF zsgY#Ryt3e}o`<9zGHP?|c8nC5=Xcp4j_SAUMGpbZ)4sJA2$Fx)19V$P2#fuJrJ4_W zm$g5ncH%X*{()NkwKEHc*3|as$aWtbL9FIDaLx88up~zeZOiFJ+JV#{!a9MKy+;o@T}3r3B#p+)>;PxrS2tk*n^|_>U<2mbLQbvhWmNZM&XX|z$Jm41nNdMb^Y-1a6}wa zlXN$s#g%?4l4dP2>mKqJ31KY&+Ycd-F_@@x3QUyApx6H3T!*31Iii+WYsw;&hP5?0O@Jm>}XPxG&QctBghJSM4E)m>}W}A>z|GjUkAb zAmZiw+h613paT(~^Z+8(Y-W}4NQCOBv7O958Z=g4<9C4Q7WnTQKXawoYoRgK zD;U2Vt+Da5w)Od@zG%*#Q(pvRYNTQVD(^=4IU?)8tCoQLgmVwR%mM*k%l9l+<*W!+ zCs_SzuwJ4;usXr&1glGq>L#~GI>G8|!s=$JsH>URn!>IGs}E03h!7iRfQ} z)n%c+3|5aZ^&KVO`k=ec=YW~b3NO2WAF7wQ{kYpoc(L{cs^QX+b##1iQbbJED{j08 zy7o1X0S(@x&Ft+q-f}jjeZ<;8L=+n?+KExvOhs|IGERsuQH(>V zVQK$r&pNSL7NfRW8(jw#SBF*@SpEH1@~6GKx$zo6dqGvxOHprJkG87Cz=`(Cy&4?F zx1Gym%l|q~WZY(OM4PqcW|aj%>dZM8=1}p1iWgfBsI8yN+o(e@HiV;|0O|<<%%!Zs zo%Fz;MmF?DTn7$wk+||Ss>HOlD6`rzQ|46?)FIasAn6dL#fzVY@%%FNg>4|zy|49) z0s_^W{k+584z0!YqY~9#)?MkN>Ic1B%)#4T*{;!(c2_$NpFP2T6f82idcX#uIwJ>B zNM!^7v;*It{Tvjq{#+&q-_*21*Eh}=pJ9fsyqu|>`f1dZimxLN0E#UF3Um=`(ovoU zA>Tlrz3`8l5DvSH?lwosT#ymF<=&KolGhjZ!2c0&hI*3_q^rHr8|zJb7mFjG#JLIO z-;Ji!$XJmP!lx-TeL6FzwOFC)WvTbk`cJ>N@e2z!-N_dh%|pQEbtEu5+Ud82D^|I_ z?PJ~@t?o~2@XtYS&+=E$GIjaSKNbNGL&x`C+e%4fF?KHp{~B2Twch4;6JZJBGPJ~H zplGgKS2e@O3?ohq4q9}Ol}Tj1fF;Ik5U;MqWF&7QGlsoW<>rBz)61Qy7n0TLj9!q#2F#C;HK#9-)sodB zBL@)$@LE8Fx^|rhZ;mqAF%^X^g&%!69>Q8SnW@ooaaO8P-L;2u`m6a?d#ab$!iPa) zwMpEK#N9e1?zT4Xjyk8PbE+aypw6kLI;Ykf=aA6XbDdKXMz83ck~5~aK-Md3k@`5h z&Pty~6`pHV@@-^cn+6Q`70bX2E$*@f4p~85J{n~JlYu?od*6+MZQUP|7<>FdYiZka z^;+Hi5>~i1bA9&z+56hvwvjE{S0VIcCIPzLl0Oq4Sb#g}%mg^y6C`f*kHNs8B`W3# zMQTVYj=RqR?xXat`yl-&_et*FyNaYp73mU1QY?BOAH)_VyIHKNUHfCLwTnQ5WG}!F zAvz!`N212vMzv)_xRkryr6rRdB}sMcOBT2_RcF+~)Ks^XQDaSvYK)_R$@TsLXYJ|J zVL-UlSy8a{uIU3Q=g zSg^2A4KR;BZtGZXU|CL8Mz=?^Iz7srfVj08$K4T*`}vvuN;gPrw-GQ_=a7OpY>L22 zXdf6k(cwF|Xx_8>7|WZxmNw}=HFc_y!F@4)jgc_B;nyY;qiX81gG&LtW+DuRw=9F# z;_Jw@lg@(zfvizbpBxWh%W7g^;7sGX9M|QzF4v>FTuFYDt8ZL=($D81o0Fq2^5xo?VGRM z>RLI*>Y=FA3~JwOS5JDQOrx?y-&yXFb7bLLRJsYF>>pbmkP4v!16Q$R6Rv$9=IVQ5 z?a_PRSr0B$WkjilJ|hg7DA}MnvtEpk##+)wP0+oYf0%{p2%KSILEjK%rzAX}rL-)U z%r6y*njY0oShWIHzUaML+#L-mUF~nuscfV(Q4m1rlwcH=z*O}SR;^&wikhkwuScv} z!Tk4HC4`faNvaj_7LfDAqVoAM>@4PpT=Y3k)Gt7iMT&k1! zXhf3Vm=UpaCeo?#>^J#Kr>DonnH1fU=ih8Row0oRvrXQ49H8*N`p*Mp04SpsZ{G!R z94sq75TXW5>HA~@<$c_{a|eDz1#`MA#?g9H0PX|uaM^s+++k=2i>0cBK-wH-C4|cM z6iwuwDxZUXfk87w-6Zi8@}^rEsxD&i#s{d5!7nXnFMO511k>*ciS?6L!fnCZyRi2~hiZD&)`PJWb+_TJ0?X)Vq ze}w~mtH1tCzPdY}>y&MG8EuDtRog>RyTt>Vs&0KJo-RNO*6&LfPrLMwc(V4KtTG=+ z!_%QWok%9CbC2U!B(lh1yNSv;1Wgz{UJ^#Pw5%=Tk?3w zB@8-4OG_9(j3=U^r#`T`ih-`l6N0wgmTA=C+GTg~TDQX$y_q>(YJR#@V*Pn4&7aEX z(U0wKg_%^Oy$Q=%R!n7v!zI8+pqxc{$9(&Ti}9;ON+W@o^tvO9OG=Lj_krBcD@m+u z-m7XgU1MyH{e^{Jh27YmKj#tx%zYEl_g1F_O1}mX9L&u|fGr6^%ktEkdcygeb)*>((yN>^`M*rPm>+z0F(kB4bdd^SZR-qF` zZjf&<`GmV;o=qD4&&c|h_0sxh&h#=`f!(&Ab^I|58j*k^{`#}KL%%Y2qorf86G+1L zA9F@yaJErvbWM0E9Zy`18vJv1(D*Rq!;lX{(&&YJR<+cPI`SPIbr>#mY)oq;zS*F3 zXi$vJQ*Ir(-B2Q$_Y+Z5U(1!+KOxfX-d7vD!TS3w`|>ne;6VAt-1chec-f=b!|8Y= zsN3A^ftx+-*zDnS1Wu=cO`XqfDa^i={^2c1S?Kk3hBOL{IE>u+M-;%2*x=;ShfP(C zC1m3~r zYcFC4=1qQzUKKt>)mCF&Rb@B!v%zd!1ADdb#^sG0)$G+meT@fk;%atm;S=|2)Ncqs zpSU_rmZ&AdAU5tPyUMFz2;3XqxH=n`gvbW5anE?;^2SXf-r>i%M86xv#y#ha%NzIE zY+NCGYs|*|^yuFnpN!9CN*NQ&!8+DYDMLkwTat21Qf^7gdg2>WGpRZ_>xqkAL`gYq zyN>p;M%iuSNwcU=i=sXaVSXI{`(Hm{$*Kb2h{%famZWD?1FR6^I7Sr29u%RWmb*nYosvpftVF5l}Sni>QMiVENY2o-~Ai+yz~s!nfr{>UMy#5#Yl1BKVWgCop_) zBj+dwVNvxlg~uyEB&?&#eN0`$`V1lBTOfE$o=1M*F(rACIOPWpO> zoQh{h@khs>JE1fGV1IUg3>_OgVwYxHxUUEI^?=1urb5kqJsvJ+z_GXvUE33t`N{&j zR<(@wvrd8i2`B-D_7zY9DZ<@ORjO$yL51bo1{r{=p!LOhdZovq^9IGwKD^wQwkcw63) zW(9f5vT?!Urw|RG=#grw{2$lGxi((2Hco(Pu8qeZU9OGqSQ|G>HmJhiz`lsmm<+aAu~r>pE()i^vknaasjPNs4)HS4BBAZrqGhQtV~rLkI? zxwy#wBvXk|RhmrwVN598vYz4wrrtK>)H-q^E9biLOorN}yzDLn=ytdi5QNWYCI>x{ z-9>iYu2S`;9PCs^kA7@_D{M+dCRNgBG=jm#dqc4lnM#VRtv)fXKL-G<=PaN(=J6{z z?Z#re4NKd;u<)y}8`XQR34hKdGOYV1qVH{I(8T%wehzdqci}o+c>-+@tK`7==dh>o zgB{kL$*uMLIkcBeEawBw^vkFAD~@k}tjB>y_lGt5@6lk_@+a5->^VPuTZK*(ZI_g{ zmMT$7jGfET|BS4ESud@B=2k2hz&k8}v)cxu9M@0DfEnht9iq}+85L_$i+8HKZxf9N zW*c)R@nA{R<|mF+AG8LS9&1}O`-~hkJ`DLV)P>o%>XG9@6rFPnI}Arh9fk`XpMtWF z;4bEr4N8Xw#n?RM){$$fb^&Wpum(lFVeILkr}$1A!s6^I^TxG7R*Cj)cN_QhU^ebKZ`@S?{V`NOHtvPq#)an*&xpw@{}t{?Jo^p&7}O*jzanEM)VAl}Z0Ru0ezuA5 z8V4)+LCWhDK86&7ins5AI1ZK-9|%$6xAc9wcX=Q8?%aVNvGo&O7Q?`M3nO>_5l;Zg zF-b1vDj3Pdx6Z;|dq9gQe*DA6C45}cZA+Zu(tbi`=NC`7*v4BHW3yagGV8gefU_%E z?cqDrvp(9eOpb*%QYPtbyq_RdTdGoL!6?hA_BU}6Qj`AOO`*NQe=v+p^>lL(q zDPmXKB2|u5pVY21QdokUDyWwhsAp2|v83k@H70v-<9jQHcO;z3N~MRaXg!-b&OE}N zWgDOP-gBcEJCgZ9Y&pwS{CJeh7d%`lD65orL7$G!#106w9-qoW zFNdnyU=4@@rA8y`QQEZ1$1%bJR{wm>jl(YL8uDkx%;EMxq_yd}0+lyhm zv9p9nP_Xvu^_w#4YoC7ynr^X4;rP=U=0UZabhjxj&?9x8#L(Hh3n|!*r;Z=3LrACJ z+p+aWVaoct^wOIb;wjd{z2lpD^NIe8_5RlzD|BX#`xR{8&CQ!%PON1xUvHfbMofw& zXXdXz=gz|QK`ATqb}cmie~40y^)C~bTsArzJaokf@fb6DgvqM>>rXg_H-<=V81|UA z!nIG+8u%8C*2H9~%pc=7^&n!KbX93RuGIKenL z^_PeZa3#l+BU;rajt_PverkR^obnwE z54uBzIWpMB%m7DhLwNOBYe?oA881d3R%Fl24D`1S`;8M2)1Q&G2!XPIPWf^Tscr-- z-a+CUAdMg{edjsieF(J*Q{8t9Q@%Ix38=rUyU_M$_tw9Ia_oS1D;^eM$%&{oLZ

WQI3Vjxe)_M=0h5W@>8T&k3GF>qYgcBZZHbDLlkn4u*SPli`q-}RO0%zIHA8xa7Z~ri^&Itq6KIhc}JybCN(fyNA5Lhs%m& zn%V4cegD>(c{b2L zZEN8?Z0r>~qw5vb61(?v^eP!iN?q;L&{%etTjORcItoUAQn(_1qf) zvK-c8o*HF1MQIOW)w+IQ%eEo0?yOg^rAFP=lg|JuDe~rd=oJ{tZ%>dYDa0e;3n3Le z_4f(~NbfBGt-f?fMgb^FrLOX0N}241so}Hz^z`kh&6KKMsDUU%>-xn@(?u}U{&s#X z%2xyqleDZHlVZdit@)lQw3ZL>lD01+=4kbN-UdOcFztLM9BJk_rAKk5d}O3bS~enS z(DV9D1xLdO9}owU|DuEt5XD1Ma6&o&<%u9av_O$669>69Z)x@ig<`-5F?&!(S_kGT zdE(@3*>Op8K80P*oF4%%+O<^M<#c6sYe1Zzf^UG!62_^`o9Xj>nP}7UhX>c`JFL?) zEoCbWe@9Toy_-VnfDVxd%e0hW@l%L_is%g;tsKv5qRiRxJTfii;0W201X&&?($ev= z4=v>ky>PfMrll|~Wk*`dF=T%SKubA2isPA|OM$?CxPM$Zq38NvXm>yhU%1A!6sD!1 z_&GUgSvz8G@pu`&0};^(%)uedO%*8BuyG{zGkbm1{n5ZYW;SK|Y`lESQQ3Swg^5WsAoPbSictpGbZm zMsY-#+%-d1IrgT>CnDx9rSfB$`~xJ)qgnjO*jca!Q2wR?-R@15)lMMzrVrAl>&uh>C$^P z0Au7ey#p%68EiHpG7{wlRb1|c*#m%hx}qdRKz>WXgegxEVQB+tXyPna@na#>sU6t0 z?AMgcPaaUve=?lfu`XG2g{fgKNzb?>rX4ssi*FMl#pDqMV8PS~5Hfvke4nq7L;5NV z6k}`xl+p5e5Kjl#;Aa3GIZQi{3jop7-(&Jff1Pr9Mj=c&n=kCtX2q5l%xupy(yPT` z<-ZE-7%{|xS7?~SzA<-cS60I~F;Mj}x)%!o;N>hBX{=4ey~`(VUf&_81Vu1WTc>XXgYYtoVfS_}L7%cjtf@taCL2#5iQ5FU8AiKmy8- zz&m(d>PX8^(W}CTh!W5|F1Mo-FD1KJAz?|w_w&ig369+St~2LM?}4HUOeKM%84i3k zVuzQS$z%?1_X%4)Kd+)wgSv3c#2+U94B2sM-oa=nlF`Y^WcDT@ujGh7uh8A7ApV>P z_qMjJsvK$4G@qR<*GK1n*KX)wZ?a44MvBe>2gr)O#+{s#*)#?#UWgF9`?zgLF-0$qN|%hkYP_P-{Qa{OJq_A~{y5YYPm$|AD#FJaP$(OIS5a zSc$F$m#|o&ZbyZ>Q_LwDQ^NYi`TXh8zdb$~pNq!I^e-fVZpY(eu3~W&3o>INuIN<& zDr;QDGNg)ClKtRX71ye`R^?rdP)Kt`_!*flEEALLFl5Oh=_CiAt5v;5D_l{lk}4tx zio*4)GP+UtMs=!?096mMH8E zN}~4@i&UARdAH|8N7nlVjtyj+Vd&yXA$H683UDrKX~(mBdH_i;QF@5@-0b8t@M{46 z3ckVvTZF-K>yds(x(oQAn|gGW9w+YsaHyB7gSl9Js#ZKqD)Lzxhrb(s}EYVV>}?+^BkI$;mpK!o*>!RnFqo9)IHP`oV{x|3l5 z3wuX>)e8KXW7(f=px3;(3)Z0I7Xxy{dceOx@;x??a3IE$aWF))g-xhV#5GYJX!~hS zfq(*`s@8a9VzIxv)+K8L6Bf?G_1)N^IenRr>iRn#Qqh7f*=vEnRO*YnA2ikiQO8t+ zWJM^_R4Prp(3v^VpCz&|=XPQ(gE?fY3cI|oCO$W=Odm2;SLN;pPoO1QJ~T?^C$G2G zbE}FDxYQk$-_qrki7kg~-^c7NBm{@kXCoV@Q1G3YtWum=2RVx>8Rlb?M~LIfe<^jC zCuZCBjoC|unB&QjblV3rwkWp4nCd~tgBjBd+CM|&grkDSa255GN!dN2QG*zT*pG=V%KQXjlDd%rZP;fiTXv*1NbJ85_< zVC3y{D*{h!@sX{Co!L z&ONHO>fn~LYHNE1#5<}H+`WnDdu>~*Gn@p}P%xkBvF%?>>~>`85UjgGaJQqKvS*v%_i$O!#cB#%yOdm)pv!^<=)QafJu(jwpdpCE z2(lco=-l|;n!AeyXrz!N$~Skp2ALDsX$5(Wo>K;3(wK-PqF)q=fwsA11f$>Iz$A<7 z$5Q>$vjGh(uj#F~0;tA%K-s513YNI9o278`IYbZ>u|9qXvGr^RS|K%-S_TNhS%X*3 zauq+CxbCu%7>QoYZa*U^IUp#8g=mo48axpTIO>xZcqmR@f;`wU{dkN&p3sjcFU?+) za(BsZQbCTGFgRrE-@N#57l6-xYK%oNJt9oLv(KneA0Mp9rQL3=c>R zr<5ZF-#5`b1aAag+h_@0TG3MB=Czh<`4fr&F5ECG>b3OUhf(L@(m<0u{?uPX6 z{@J>gV>@6$8A&y%zciTzHHw-^B)7jbpBX{#gb8}QG%-GIHKVfSu^ApC8hQIn&|`vL zQwdV^#K{}a^VmS}3B!{i$UWr;hN9fD6E0mJY6m1b;JK_$s|H!Mjs?_r3U!9V1ij0_%p()@n4njaphw-qz_c+z zj|qC^44wN&XfNow{ue7G&|CO^J~=rb!2xYPK@XB{@hmTT4f`P-@f3@40N#Utxzi7K z`r%GLouGI0JlG0gqPjlB)IFx|fgNY+o_0uG$xdrFBE@r7(8Uv!J%!ZZWDw5&7~Ksm z>fYLyu;VIZe(T|S)AWl9W5=YvAXxkqV(NDTdtuxR$4u%26A%t$E^hz=w%wvjJ-q#4 zLX~#9X;W0zTc?0uRFBobZJ8b@S_9Fs-lLiM|-WN>snV z(T=0*e81CzIvf+cLSOzvF{~ZKilt)0$jVor$+~hr(K)+wg;rng9tw6 zk#z(35bSJ-3nl$Ysh>sDbp1BHzs8=DU(T= zfT?3r=EEg-O{88Ys-l1%Sib~R&|Rvk5@*yblo|F6cTGg(Pg`ZQ2A7W(K_YJf> z$*un~8vp(nqW#Z=T}D=7f3?PH;5@R9B$q5|mMo|XE|@khS!{$E8D;&>Sp=bTHG*8% z2*N(`@_HQy@+0sLUbh$E$)%s7SA`D|t<=~PFI83C)RBCJBR9Wf!8(#)Jh{R3^J;Ld z;~{1aZ>Qnh{(c@8Cb%%cg$XkY6Q}4@R1_x8G3UNVlljUxwCTb`Jk>5gU_#2D+g{*1 zCAlf^K7-)P(hk3Dlpv@T5ofKQXVyxmI(EoIT<8A4POFnOSdb{G)zMb@zOYxQYF8{_ zw3n%?lc=Uus`*f+ch0^2)eY7~$vgFs_D|5YJs|ZgLk%RFh3+bb-e5=8d*}}a)9%?Z zgwvvHyqzwB09qM9eHMC%xe+$1j@-EuLh%*~DNx6a?t?JCM*#r{*kwH>Go(Tk3;%Yq zq_V#T#b10Q@V&>)B1|q<$QJf_TG-vfB=y!bFrUnIfkVhrH(%f3x&YS&YSslvMi-7f zt_yHoU`Hy$>tWOdE||)|b%7j>n1L{aAv|PCLB}C4O(}3)fa?NW7dSv&KxfxxRwYSu zQ{W8M0K(dzRn-NkZ$TM$t@Zd@ziOcK9AJTNRt<7#sInpMpZ#m7ETTC;buRGIIzBm? zbeF>IcFfZoMgJ0Y#%LJRIoOF@Ix|Q#yV0_+Hxs+HQJ#}Ds>*5R+%o5u%ji1Uq1ZhH zN3&3+w&nkY)fB8{1Me<;lr@=0Yh{PAJ6n5pNQIctTG~)_S*;wn0Ia)>0?qfH8^t7b z9j<*JI+J{lm7CC_%h1(?J__)4s01xn@E-!cH`INW!F=sGSRIPPz@z`{!@WDZPycdg z-9x?S&T)LGJk8)focU4FP<8*P_c}K5(A1o0zs$DSD9PRYx-q9M&{>Nq8 zLs9RM;<__F0XYM<`#^<8|M$0+z!UgAa-OrENuQMRR>@Xg#fSl_yIUA<3#mUUc8}e8}bBk zLM*@Y-Z-B3X=Tr_EnV3*r~h(dHiRijUL{84^z@k6Hf%+*DPi@emW3cHvqAdM44tS6 zccNJHNy;FX>O3F8<|%_fzxrWJls!Ws&?1O)zO6u$1w>Z>u6O4^1P4F6zCA?iXXs`woJ?)}j;Im*C-RNys`|#FTf!X1m1bDd+n50F-MuQ?9tj1eHPuyPnkJp~; zbya(#6$YlYwW{U*rci^sczRbztKHO%Yb7O~xbcm`VcqTD>2PRA=`1iXacb{Nl@#SP zLMLg2XCSMjvotf?*Xh=&wgl?Ua%0~CoT9|C ze1`9D05&5^H>Vd;Ya@60{7j~wb60^GA%>E>dNP^N6pP#X5BXn-(^bEbib?V|xjdb` zSXyyXJx%;?B?T#&50m3eYt%R}_|t{xGoJkzgup0|Xg;Y6W-$zX~8JaKLc>8JyWV$vjw%vSgQ9ubinuqan>slO=`fGkf}9i6n;N zY@+=`wyeYqo}8(mI%vS5gztmBBRfJo;G%VC#ya}0jO0>7QNwbzL&l*l6rabk1Mx~WYFQyy5MzqSIF1A62nJDEZd}P=kv?hV{&CGfG6X|4Q z=|Q~yMZDhbsmSK*kml=&3?CqHYFI2R$FRjxJ%iN#vcts=m$ZD?!-YKxjrWXo%JD zFbA2%i|*%1OfpL#+?$9*cyr-;p!oXsHGavECNVgv8jlK{CoQ}hoQJ*0GBF<2uP3M+ z_3yLU3o${%W^X8Fua2SH#Vf5>xfo;~kZoRC1L1NQdmhK>l7_2yl zD7en-TC!`&t|gdbik*+8ZklI5FV_<5kje`2AajUm&6P_aRWLv%`WF1LXW+D{yMU0^ zk1SBbL+EF|@X;ws6RHQZQ%jR!<`dZf(qYF+2bYXYYzmp!cGRjyCIa3%4?BdyP8bA> zpF+$L3Q4ADg^gJdIJ2h-Z+nPS>JM=gfm@af&&$T7vgDj3O+ghYNQXk3-SV7p$g{9c zni$W&_>^d4d476mR(;~PR&Ymy#9eZ9&CxYS*NH>TSo4A!*)UUz?DVnI$4;M~)Au>Fmqq{;-9;{@ zRR9!mC=#Ct&TfJk%K^!7Up$dPXgfkzgG#LzAUr-eSg9%*p_n*A%l3cfrZ25O{@?%k zzyHdu!(46!UT~uzQOIEIYa&y?BG4=X{p6|BYRUv{)Sl8)ZJ&z7LkQNaGn({6Ppk*? zWtlHKgMtpYvn+B#O&B?EEqYPTq@q0Mtr`B$@c;NDlIIxy|LaJZ_oaJin& zGUu%?)jIF26CXq%@OC37k9V?=kXagTx&aURi|@@n9N0`fMSIHL^4;E9K{^z zorimKm89r3B~`iEYz-meti@v1r3z-C|4kNiYX|OFEtWPJzj}=b4<8}~xG7UyF4gU>j_KwFF?@q8CIeB%mh6@MD8x-0}b%4t^V)7d$X5{qrSk+XC zx9xzo?f$MHQM4TY`(HodVN%ga92dT*xZDN7m!%zkA&dq5k~_Z|UC>hV?In=PfB5M9 z@7fI=>~L+$Yqbu6&Ei~IG)SvIVp@$qgmP)EWK96%AzKj?uBvm}Ingclo0GnK#EOFK zH--9mx=3-s;HwiZUOZ=T zMO*eSI=zXGG*yqLf zVr56sOUqqYeh`DjJW6~sG$M3qLYLMB?T!A9DG5Q#4Q8@9v+ul2DQxd=F670+cDuDHMcFBq{R<{tJ+?k501)y) zb7bnkDUX0Ei+G!e;ya#4EJ_s5=3z|a^s=x%yFbkvTyj{lZvkFCd3*Bu{FLB#658ai zmjdJDdSAT+XfPH)B6#mTf?H@mot@xCxUcj#5~xNgJ%bzJKEFn|_m3+l^j!ao6%tG? zd_SL@5>)Qqg$9M;BhpxKWjD1w^&wxH+jIKKS>7I>j86n`?-tuC-j2s7M{zv!b2bJx zLpogA8oXr*&UJcz@f36G?DfGgsoYhnpdp*C;ms{OL8s81E&J#zw(N!8mW6Gc5K{=3 zJ}c-eme5leR(`N8Y-~K()S)+q{|O)MDX_QRp;wV%QU^%P6N%jU#~gqk>}7}--#QC> z?Zq2x7x~VIjZ5U)OFP5u)GwRg&<(}aI`CzT)hc)*bdo;F6Y(D8|To$>ky10KOwdKK-82{9oq?0*7u1Rrh1L2wwG`Ps484|ZE8=Gk}wu2Q#n4y-5 zX#&8|vXP0WgQFp+XENg^bgDbo`t%9)6LtEdGRe_giC8~dt`i8CN~2gXocVeNu--Ua zn+DofFUsUB&wpnE2@^=LmeKUSDsd={W3MuSq$epTCXh_d#;2!m1>maJsVAceB#4j} zN2GbS%5)+|f8E55<181AarKS>#WSXkj08GI;HnF#Jauf;M8sYR5777N^pHhN9SMVA z@l%LJQ=xB7jWP|KN2ZP-YP}^VN^>)*qx5{TuchNEk4zR6GX$ko~zd7U%lkSH#l`zuYZGvJ&7 z=XVi8s2WiQZ+_c06jkX|pt4Pz;D;%kfP<166VQ>V4>-pHod65g26k4Cy>Udf+6jK1 zuyUNd?S5X#vH%ECwkW7(rOqlys8LIi1H;NM?fE~}pyBh(x|{B1%W7Mn+76S>{b6dK zVdee6DKo5`Vda-C@Ai$N%_iu@yt>}z-2>7(1FWX7a_&t)E$NIYkt3`#n?})h!88E)axIMwB zvFdc|>u+$pfN4en;MN3GFD6xHwJm7^K*38CRSgJ?rJD-j)&zYZZkrm7qLRO1tqC9} zPFAR|*~tp|okFZd*)vAO8x!s`BK|<)7^WlQxs3Nb@#Q)`Tm~KJ>w$($8m3DSViszT z_Fdwk=W%lv<5wiH4D*?2wDlAhQ#;7gfs19!xxFZ{65PUci7QEBfpuElLqrYR$z#{c zv~Ze;_B)mXj9Wx{>X9!NV>5n>5P7(+0B3@7yrLZcFmz-=SGLz9Q$Mwk5fvU%z`3(f2|Q zyJ<#aMGaq_G|h7zlV@YWv*}4Xwdp66piQCi{XAD3DoYqMqw!hSj)qbSW#%C>4}X7y zjbbP)K9*%+&!&DoQvxA`{S157_ z1*ls>OW}q#JrLqemsp%K54oXDVSlxUUTAp(azmRqV=9tOlr318iQ8w6+_hQwz_EdF^E`Dob$siA0^@pzXw(T5kP6 zQCix=pX+vHCElIZSebVr$loRH+Pj^|>1AQgx_4qVHd0HOG%@3+4Zgyq6U ztQRo;xPUTY-FHeFXSJmELY&IlGvkl-MBM-=R+90{?e#LObrYd#$MeX#?=8AV!^R(9 zF#dS{k98D(bQyoVBmVdT!50SNkIxePu}B&L1exV%6Sb#2zIbvvp^iUrqLwuUVhFO7 zeT<&a%+fhVG8eP^>Xpv@u^cT)f3d#wfb^vsa@BQ`Xxa8w%F$9shMnYSBXr(CkuC_n zEbZ_MAThv>yYs8j#ff;Qwi&5>Doul+S&OzB#fns6ApjG_c35N#D`sCxHmdU!44W?Z zW}ZQ+Yd1qx+kmu<>0;P4!=|5dxpkI$sh(>FFk{#>6r&h6J!(-2c`&ePQclW56cHT< zuQGTz%Gg;kV>SDOXH=I;5?EvYyM-V}*Z&%P5t^8tHh*Z{qbPT=D;;SDk_n-BEKiO# zlVSUv%tj$OFnANY$UMl5yl)mJ?3n{(-bylR%R-*6*WfFLSiL*Bn7qUCBQixkZ1iC! z@RsZnX$w(|($dx0ITgPvid$U&YA(s3Q(wvwLII{N{S7#gBK%9w`DBV#_6(B< zkbiX+LFiyJXKJS@US2~pZut>-2Tyu?5j$b}DSB1-5Ykj`jL|H!l3Wk1{K7Tbq%Q*O6-{sBJdz1~>n!ZGhi%ixvOR}VugZWX$8LZ^UWLU4-;pIv5W(0HczQ& ztT+(NZ&(=AY-|H>$UboFsX8dC41FLSmSj|Vc4)`b7cb2NswF;!ggzR2Dx3P;S?8}s zltr!3$h?(g)Ru*$C__yJPNorhRW8K9j58s2k`r>f*zhrTXeOWI+62IFJ^@032Fd%2BDML+j<_vA$6N$Tq>VLXRl)H&z zJ-qsO*$1=s8Z8!>HinwAn%{0}erE)}H4w9QE}^C}cLHjD7mQky&~sK?eFKmtKltW1 zwyho8wrzXIwr$(CZQHgzJGQ+$zWM#H?&|7N)t&Bi(n(dilb6r?=ymY#a(v{9PqfT~ zfZ0-Z5Q>utbfNve3iL6TK_#$GuKg}B48h6|9fN29L@X4}qlOErfksZHaCKHZvz+x? zFY0{g!aP?#C#*rj_4H1lknXPdh>!#uOPb5eo(+~X#*p$f0@%$>W$GJIl~aoN@xPN#_1 zVG!Sxj>%+lU>v;iP~o@p@jvcx=_~he*=~#>3t??wSJ@g#aBLF;3FZFPSFyFBtTr={ z(&nP^&npa)>I)YNWr{rk za{ruM&IJ<`GgKDZeRpdQ{Y6^p^yuDM(FhpBU$u%HvZFifQR9I<7fF%59@G;8j~2NJ z(|;J%`Y;8x<6judG>?oxZ3<=7bmXX1$uA@uT3|4?5 zZ%*`F^RyN__-#XF{S|COXJ+adMfWy}PvjE+aw#Oyc&h+g(IXO<5kq7ETm3{exwG8u zFbHle{2@4O?jzByY^0U2!r5ZjYW)2x0+3Cp5_QlcxO{|EKkHXEAVdE!U7^zg57{nA ziK&MLHE6=>UDp*GhSDC@uJKl_mE?1ROzBVbpg0qNd^RW{{C?m+^kPZR)v zup;jE4waEPZJoL<=PIkR^XHS!R^pjG>Ko6Ri|A$(zUiQhah*B;l3Y%KlNypD9#)C* z=S)mV0Xbq@B?2=ify%F6X*mDZxABa8Qw#K9Kb7zvG;efstWC}^ByW3QJ~%ez+Eh&^ zaUg^%sKH@BA70E7oVgQ}(dDgGdG5WL4DW~is*C;=P0iQg73hs=XfYwasa`Gdt`7M= zSID#5ZApuk%|i}%C2YW)W11la&#pjfEgTS`(boyiY5(Wcc=fUiA<%j)Vz)K8w8!@+Bs})r*(vX4A^Cr@F32EPHJ+K-X~d5} zEwGEp{&tIIp6bNB)8k?z<|s5n zk-4n$Q=3S4x=SfCc+{T1;GuJ71;NXVB#dd}9{at<-6cpkK6}9ZR1^xKW6qX%N4Qe( zy~v`{IN&c5S>(1;S8?SIOqXs2h3wp-*4|)94`O%2oJglZ#G!>}@cOiqFDlRo(%TZh z_`TG(w%B58zM=Q&xxu(9t~u<$4GEH3qX6802xesX(VJz+GbacoW3gHjvbPIvMFV~|7sj@~vb??negvo;^WYffX>`S+uFpDwI4n%&F@Q)7WfNIYZF6L(Z69k+^ zYnAs1aX^FBg6^*?K3}u_VHbPqA;e`Szg*!i85Xl#buX@Z&ji>Ln&NG^4+$ihm}^e@ zMqVsu3QWE$Tt%gebf!}z7X`RuSn!yn>;-mEn8B%lY26Y?7K~rI_`$ZO^w@IEp5YtClfvk z?I1x*j32?-#Mkc8p@t@p0wT0!5lz`%qIUDr&RRF5Hc6X8`0L$~21=6X5d1rn%c~Oa zP+R20IWP?gZ)ayZ>MuKey;XLNGV#p3{uZ?TSf;ALJn0H+0Sg4*gZ9ToeoVF{ZRYKK zpRdc% zq)P#mgQXKC6}38g3EA80zC8|()C7oE zs@wpzG7VLBglshDvP1IB`j{D+D>DN!5NXpzxVf-O=9CV z=5gL|D-C~z0V7vy>hi7frRBVlI0z6GKl(}#wf5o1F`lmU!!6>)slHH;Zz?F9F|bHx z3R5-5z#=K@G@*5u+a0{?YH-4t%qGZqW2k7Wp_zjTY0Z0T@%ZXD=G1S+R#vR^HsK7+ zOL$h7Mp5b25@}jJdd9j8{f*CXxv^rb>uR9SCkISttUt<_tsT3ctcqAQYTvlA#&<^# z;e=3#iV$BNTJ+JcQoN(b3Qs6SV?JFBtU3Y9klkP5{M+LGw5*WAxNZ1lrv8+oAuY!g zLr>9AmP8Gid5gAT?1x=eFyQ?SOu8y!NJ{g^HUckyxNtbIY(25#37N{IZ8$ewlIAE+ z$+>Vm{T|eMJO{OCoi_~ugfLQ*;)syd{<=b}aqZ&c#zPBNGLHCsiy?8Rn5mu0xfD?2 zVtn5L+Hgt~m9}@FPL-GmvL*8iY<+yyRf(-gL+jJmw-q(O%3T*n=dIS4y{Dhix*ueO zbZhWAl5)vk-Q$JhTp)3t=&G;dp4^cfTg0vv?@7fkSQjRrvPUlo4AQFA?OL5{hvBzk zY_B%RA1(OBZA&j&e{0*O-0Ybd07sJ!7~?QF3LYw?SR-7{3>^g9IC?sVRuv``3LX>- zxOTZ}#1Oh=-q3zLbRIB-?UkS1*({dyn!PvPgrC*(FEycRS!apTokEeZt`z2H)t7sQ zfVu$fud~nu^AUO7uc*DX>bUxpFjwr2cHzHA84hSwr zQ|@C8!Vy>jGNQ0qif9xP7B#w60VqKHk42*6{{Mm;AMi!%vpm-*T@;1bM00-?SgkH* z=`k7q`EZaII$&C!h;NJ>-q*)!EE+N za&m`ZG-z>Vd=*^_5y4g+t$c2db{b8UUn`$dc#K*vW5;UxdDS((r z4kCvYu;{oKbm{YVkxCXgA#lzX)GT!Q>5i4+xBrH=FY)#EEZ+N8;2;Lu5G9s^&d_T` zwZG<)*5m7j`iU^+OKqUNz8>7*Ps`|dF6H%GI{2&G==wVFcgxLrbt7O}#Ec-!4;?NG zP0SBMa8OUJqP#W5%8+*`q;0PI>&!4m4hQ0kHMf_=1ANrgRyJ^!pK6=fK_ge}8+%qAyXPRXaUR zCUM=MYd3URDipcb>Y(am!cIWXddD^ddf3PJ8k|>BmDV zW1lPpi=re0Jxjc#FNYUvQzkwGC=U06N>y&*dl&O8H6D;IKXTEO6&hyaT)yNy+{*(k z8tb^SSe}h?@Gn1zwwiebJSl-RPWdGjPCEX?(}rWUN{?Mw?W=OYheV`KR_zm8$F3R6 z(QJ!{iP0!661@p)Icb%@5l6cCDl)pyl{)W7By|4?js$7+A@p{n-q|df^~)@ttpBe& z+RKkdAp?h;zOdpX$u2in%*1Drx$zMNi$^}S$FRrY?VX0yFIWAa@0oun_zy9!72KDNZ4pw^`yv^{e+k7O2 zpsZOW{r+{OHk$L0A z)JaUhbRRG&!_^atgbe~C$yHXgq)qSh7$2C;XIS@GlieHl{BC%8kUsupY;}k?a?6qa z`B8=uU18STnR#iElDCp7%54~mbW>z6v8n|^vs_=;AMivg+vDpZ`O~_O@=fKW#AMa)@3u_)~v2uq!~`Hv*Gb`LCct>^Ls~ zcl^PY_y8gslB$ZraqQQ&9>I5Pf=%VYJerzg^t?Jw>|PLDv)72#IA^%wJAzqW^%;P& zMSdVVLP1H?YKRQJxg>khA01ilVa z^6CZ^OP)<<1kGZes)q~F4C;{+iHaWM1SI3u4WA_Eb1fwc4JTm{y1@SWwDVoqHLh|Fbh^d&2o{qYH0kZi7|06& zx4d?jMkRRJXGR5aV2qwMe6VjCe{@S1U>dT*|0GBJc>Lc{&-vVmuAzWZEuJE|JP(6V z=BlfnnO&`nac%7xN$LWu8nG_trwL!reuNJ+*Qk|O^^*0XFa}O#C$G`W4Ov1^leUp8 zMM3RJYRT?0j>UDx1Tc$43W?JZ)FL*lH{itZ&p;kPi;OD~;|j7Tt0?kV=N$(ru_r7_ z5c|o!8%((>_t)p_2Q|ELZc;jE7&g0yD`AOh`A)xgp}fuH3m9|1`H`LSfS;ZoE7Yb>B8>BSK4;R4tC*|Ti?U*iy+y%h9HVBmn_+ zpB<>=^|7&7{3Mhd+GzFF^C(>(p^;O7UszHpw9#LYVb z?dF^{qMN`07G1aLo$Re71A;3tP+9N;#U!+A+}K=BW&#(A)yN{ue%9%E;c)C~vYpV= zpzl0P$-PgQhBO+k2Lf;!Wv0ymc6m1Gbfc46V!?hCMbEMX{pwAms-on~3cTmvMpM1c zK(zB7vlR*Ua;@sV{o{PAbWsGeq=DbS6nkYswZ|PMB)Lw!a6Fh@RP-nfjt5dG=V3?) zol^jY!#7YzM~0-YcCTa~^zzv)s2IkG){%{Hv!t^YL1vchZT_U=@S^}sajW8V{CQ)l8k+E(pP_fAlTNQB5{LR!| zz!U}ZOowU}xS0%19a0!h2mU9c23zu8PEsx#l-%DO#OVCSNd6l+q`?apqHl6;f z`65wc0z$fEYuKXe6`&NQwDqf^#Tne6sHKNaidM?TtN4YXUXgd`btb$~AUR~Llm|Th zM(j?rlXMF7sdw=15;4XsEFk8Bkj*l@wUxJZRmnOz`#hS#I0X%-K(XJ&@$QPuELEro zwLnxlDphS+Xfq(1s|gjW1d=u|UeSDuxcM{{_`j#HOwcw_!K+HYlZl!k1;q+%66Up_ zqm+Wtk;W;SX_2+06%`}ri2zt3t)fC!loV1(TEqB7^Q{u*v?C&vLQ!`{sGI0eH6`)o z)$>Gen24Ez&KrXEqB#9%rw{?*LU)YNHPt$;Aio`a5yL5zuNVOh9mL@1W#2KU=uW3F z`4+kT3NCY`>m;UG86WwK%^wRn^}81T;KDVJ=t&;e_qhx7Aw}psjuOL)2;@ef&+$vk z4%tvoi`*9RV0WerHXel9zl`=CA!{A`g*%~jE=Iy?R^@`r3dD(h$3CE7HjYyH>UV|2 zMh3t$=Hu$b(G`q=Y(QYnT(_kt9ny+z0EDhTge%NBJ8HeZl$>k)M`NV{&9U=;d>fjm zfn1AO!bG3Gjwnsn^+2xgUosgRZo9QVW+X@+9Fj4`xdpkc$o9sz6JDCvoH1jb zf*=450F>O#lik60OxF$0M49Q$pFR`NwsR^j@=+?pmhy$I>8M0Hth^ir+(`Sb66!6^ zvo>5OI=61bf@-0b(Q5eu`q+otEWnPiI-t8 zdT5j690y*R(2=pocQs5zg2qbOv`FBZ9W;qw8_e$hB2W>`uW%j1TYic<{*gMp#1Iww z<`BMuj&N(U0OfDm!%wL@`+&b$h+A~W##{aE_9d!beVhY#c<)~Oq1NE8o)Ub)gdCj_ zVOi@&{Cmc*)$!3ux_x8^YawQc z&I$B!6Z80A5?}xoV0weAmj$FjZu>gKts@!Jf9Q2^8`*_>vm7Oek=SR8LUt??JA&{( zOYp{3pZ`0$r9e=uJI@@r>)4k$x^Vf-M857BqTJo;&=i}^m=WqCCMMDD*<~sdr*oHg zEt@xEUECjaqwZ!JsHS07TwrjT{7aL!wcWH6YZ_xNE7S>sMs~+Hyg-P&&d2kB<3|Ld zTYRb%+2844$2i!Z$#{~tK6L6#_Fy)eWR4-UPQa2?13j2kNc*HoHT-+nV!IlSuY&_? z*uja8w3Sz~a?#YY>pap64xuE0xr3kM+mkqK99l%J8A#KBh@=WvK2u=&DAgp+OV{?b zouW^}YuP5(gUtheFiKCFiCWiNN6_6MUFjA0dDC9vEvU$M^}db3z_zm@9?N>c^w$+z z?Qi|}JnGmHs6mRTOHuIYB6?!J73?g)Jo@M2+OQK{kvgq8CA%39<)c9IUcV~0< zK5u7sVAgy}FRF)86aIP{f)SUJE@#*~z;vNyQ6hz%5gr=R#SRlk5YIjqxviLv6TBw`b16(-4FAVLGC z)XiZ7IfjHS1kkk5Hkt*zus5hM6<~_yisn<$*MjzC&b0rxBE&$>VoSUhVhDOjYxVpu zP&cWy|2q45Yoib~l&>{}`nm*dxKNakww(F94(I5$XMv~)>O+8QK6?$?a-fg7Qb>yy zeRF6yMY-l-dY4>lA6OaR-g4M1&tXHH&h}8=DPw%aQO>c$0Wo+ zi|b;JqIgEg`|E9oeoImA!keY7PxVK0=2O9Oi-%TwnwME1g|+d>pYE&V91Jq-#8Z}H z=26XZ*QQcebDL!yrc{~T;Vdi{h%sKgmcS+T_=;yyH=`hMowJs<^j>5Vv8Za}V8D$0 zU2*KSJ0T(hfwHRk3-+idU<+yc#!cUI+c;{3$d!F$gu7XGaQqatlf<`ofcd^CNVthKpVBa zg7_EUIcYDg@GEh_?XUr$MU{VxdblkzcMHEw9fH1K-aHh#PtUMJ8lBd4o;=Q~=`7Q` zG+$zbAkp&$Cmv*inKt4P&Y7h=d))RAtq?}9f3h7l;iP*<06urW7cihMSO#S%eori| zW?EDhMjjZoP$uWR(GfUvZ@9mnb)bigMq=y0kg$0FIrzjbF?Og=B-od8 zNM~&Pxl-svtlhK1cc4$SuR&T}j}OvEwbVF6mX6zzIXy)e6k&{vbpr!|vaerQ1CH|C zr4}oF=BHD_)HjLA|F+rU$b}?D2hT;xdRDyK;%FME>j($LnQ~gXa1xj$OI>|*_?wY* zaygpf!mS23J3sCB5T__)i7;>plZD{nx-6)PWbBs5hTD5nox~Ov+Mo#IV6@q%s(>3=v#YKS29`wsp?VVt`aw zaYK@^_*7;8V9ySUuGxCLq4n_;9^nE7iMw9KmC~oJ6c1DurYf;(T_d|76M`B83JH{L z3Bc|Cl(XyVsti-B=SQ#H;4XNZ;E6&IO06e!;Qq8pfwYzh&1;4qH|L4Zja-1(rE38V z{uT0`bfeUId2#ea(|XmR{si9h2$!aRnQCyk3beR@Rl!C*FHSFvB8jUYB#g!@tDZQ;y;)$7K2Q~D%2}C7(`8ZEP)AmRDb8< z^N=TWgY@4BQ8zvE&hsz+A~CLnSNy6j+f0SDSbM)InP?@U2hIBv4qC8`YSx$uX=?Wh zH@(OUhqPOw!9&|SMHd?*e?_?OwIbYYjq4CT7*&6fSZ~?Y&c+5+7c*{&s*AdlIB11& zI!di?&An9&H5+u4Wx=%~l?do7}jjSuIq#=Q@A8cqfKPCctzJoMli3e+Yxlv>GBy?-n=m3-!pV$K@{C9- zb9brI&Qx$kR3X0Uh7B@mA8gwiiktOa7B|_nWRNYul>`~teF_fOPx=LRnF2MT}w-6fD2X$-C%v1B&fS2xO`Qz<6R1YE-k{UXKTiAmKm7%hzyn1$-9F_*fa3m{(A5qMq+JOgBxwB=UfGGXb?YK z9vwF?)SqxhyCi%T2Woe!_1KTzB=6nVL~jd*GikP|9|@EE&VO<#Bsl4YxW3RQXqKz~ zprHFJwgqZb&*>AQ?wqE?&d!W-g;fri!oehs44NNWkdq^Xx`vBtS`j>B{g&8VdgN*C zbmZFYxhRg%=r2Rwh`CP}JN}iMi>D~P1!nZBwikrPaT%8XA@g4C-qmOv$1`3Fqokj$ z&DNTtOf4eNC!%wVJ58cCbS(G0HAf&F>`wYzfmh0CH(sEIK}>{b@ZURldj z{)B5551jH$8~V`{`oDF`a@>1=-d8T7$BQt@6j$1|rmPYhy^QxQM3}&5rDUD+t}5=K z_@cU$t+mT~Drc8Jms@QuHD0`?@2YR@D+I9f8r9jQi*9StVO9+c-HBC7LlsKgZnXT$ zC3bzG;?%gT%KW$WBwd1C`D>4!b)A*66w#$q{j zMq5a+&&DOFVkkfekIbmQkL^P%y=@-7dn3+64VkB}a(%85Ix}Y71%JV!899wIBBK77 z&Ypn?;v0HH!lt3?tE2mx0xMueIHdk*@TiX~MiIad zRaMNSlz~vSb6vZ`mknp3*30MXVGW%cg*PB-+1os4f7EZg&x^ji zn~6VNBx|>n16K8w(QeI}s(6gdm9?4229Oh`Q*4_W3?sK&MW?I~n|7Tx>fr)4{n8d5 z%Ke>963UZy3L-vB1@f;_3Qr|hcjXcZ)}3L`Lb$&PPnVvREyG`2D}3AkRHtn%L6*4$ zO+b_|W@~!MNg5xqNG8yk&ZUBZB$LmFm zR7*Ue(Uw_twrd>$O`$eyebD-+KB<~_Sye;pbRX{XBT35c76}`se|kJ2mq}dPa~V zK>gk#V>~~S-E@yh#8amYP7?GW)YC%A%jWkGoCfQUL_VCAIQi~3_h)txaiepuOj6?)Qfh<$fC~(27_M( z)vU{Je+$!-U`G&sRAd;L;UBi{++1%tFbukKLw;aU7Q``z5rpYY&kUte!aj2U1k=>|53rSZmQUw?O@ zvI3W&Xwa!qy!>qbn4Ui;@pws6w z{iNCT2pqNVN!hK$Falr z*3`bm>2!f7j{i>^iufM+QY0KsakU`Y(OR-A z>NjIWZQX8ZYBgXIgVDYb5o@uob)ji^IK(S2JDyn#!e7oN(oJP!;ktk}4C@KUH z!)s8=o-{=+(^gUT`oFpA`|h@b8a!)!wiTAH3Nj7*x#x|(UN3vp;=g&bOUhDVERMhb zHa?QWkS~|vwZGj@#;xu|7$Gb{l6+eENS=PMMEmN(+=X`sJ@Li~k#c*?4GRW8=Gj}H z3ywAV@PgxY^`iWPkNy)CY*l)gaZ?fm)>gw??I2M#j|r1o0Px%%4?CnK5)e18X5-ma zU>6`ocrgAfnkPnbg>$I!qbZ92>;bIj>07H`mW7auNKkB&1IFRx<`Nk@mVB?tNge(K z${{+fKDta@8or+FDP%vhQBo)$D&<)f&Hmg|&wby62}<{@HY}D+sjLJ@zYJ^Ksj`g1xtl};dcnho^(%eT(bHz)b ze?we&xG&r#duui>9MQn&s0~Syf5+|56z_7U5Ly$;JO05o$kDEWS62oNPt<>H_j*$u zReI<{1Rd;_8)^{IH{M@80!3DAXy@R+(eXo!lk06!+mYZ)*!c|_Q`I)L{(k(IZ|KzO zc5-@U=rr$}9`KXCzhzAxZI?5Nga-!{k^cv^;CRp8tW!MSe@4xMf7%W>F@75*EXbhx|cg>mM(rDv`R( zZ$rdZl)`fmDdx|Hm!hb%0#C~k?z)Bho$?ec`UpMS*whZkB_5hL9i=kK0Uz2qze)qq zoJZ2`SY5C94))*JKmZETAfTuKZ~)}bSP21(MwccoKmfo72mpZeQ{ralXiRTnYiw)h zY~n=cZev}Yv?~|HfI50B>kYB!r8aLug+(JBzBbB_pdgJE(_Cf&)86*C-(OTGb;MnH z(aFX`jqsHU;H?^XV$-vy$L3GhWlM7MKe&6E1tAsz)Aq zUdQTMAAOQH)%&0C=l`E0!7dRTWKaNL4gml_{y%eMYG>#CeCD!rZ$9+{gP;Mj^J-J0N#yKzF0Q{9_m9$< z`5^m5rp~78r6vSIAn2pc?99EksYP+%$jD2G<&p%>x{-4`7lXgv#>bJ zY@ryX4*i)2h${FTG*L%@DDhV?yu<$-Oo72XBr8U-dttfG66;t`5ZyS$Yi6ISHfMw z7F#G%{qA%pL$&+8{)@U?nIInKHd^NFY;p}Y9(00XEYSfZ^}yaV+WONF+%KSJ-_leg zwI|*CjX~A!tOP8=K6iX7$E<}VZ)@p12z-Ci*v8uy6+R#SL&Eg) zkP6n0+XFzSIgoc4yce#?8)5_>w) zZlwh44iM#4Eh(B`#vVG;GNv69+Niyq{<)LdI6dmatqQH>_9=SM(hEBe;L>%YC^b(J z4jMu=h&am4Pp+7a(Fl&^0SDX3poPhCcw?a{IV5`|OPkJ`!`o`GN<^EsqRpi=aVk@h ziph`k6s7bl0;iJZHC!YcO>MZf{I&EOfLwkE0kXGH!T|;btC{~#DZZGwHwB``|P-*=e&IE<-lIybDsK~*DmmaQRtJe7@yQDwtMZ{Ayrt`^~S%VqZ^n6FLY>7 z4AN#op$MEnZVW9mlJNb}A~V^in<>-Juew_OP6IEhRq%Et&~H&>ssmbBSNkREZUw$X z3|72~tuR*%-cuf!ep&8#1r6B3ZIG2{K=5w@Mw|=0oi*!wki+mWLtr~ zNm<7>4y9?z{B>2^$oHYTr$C%R{%TUS>jER+z>ysliQxt_T;3-#C&&)0SBH-zs)Ble@Zyxk-SzPIJMvkCr>)F$??M2k0B zW0Fh)*3YWMLF!c8lKXo1+#}ZIRnIH)P=eBDCvnzIuh~)(Ux#|{P8jXW)bO` z;`|xhD}?R1Ha<{d57ECyX+!E@L_mEu3=^9B!}M?1_*NUva!utXnkL;r4N8Ec99bxQ ziS^jhBXb640y;`a{^SwioQGzDm!>7M$6Nf^9y>BNn1ZIL1}{@;Z?KSu^=!?43h%Nf zZ}CWxJwsXw6#m9PiJ5SJDWTeM$o3*XiJFDHq{`td&y$ z&|SU3Z=(@SqRBi_$MP*Hgi>~toyuv1YTyk8NMm083kgeOYEKmeTv4}tw{f|IK+_A( zXL}SaPyFKmn-=9w;F^Q(M`PAp!`aL*3KKRSFuE(i2tEl&2+vbGod(1N%XSGmEdQp0 zg`yB;IbIcC<=xJ2MC`AW1=5Zq!ZBb@F#S4bsUPeF5$C1Wh$ia{E)Pu@lbIwJne$*x zahi8iT?A6O&`Rq`e?h~n?kq$FN7^PcPgC#OZ|LRL^7iJMdcqNo>F|coIDV!mLe^S+ z%XknQ&KRlEiVZX>#IbB6m7n0%@d@HXgT?<`H*|LIf{(8`G#-xldIxn zSq~#odVDQE4@y=P6naICDklp0mXgI%!wk-djvif1Yh>Cc!^tuvX_KS;4zmRr;m{9@ zv;OE1+LH{&!HK4uWah{6;_uZ{yW*<-8l~trDVAroiQ0Mc=@Mz}HenCUsZAk^3I(bj zZ%Hn9GFoZTymAH!kIm8cY`JSu_XG*Yso*dqmMXo&ulF$TkNx)!j}Xg7CI{u12PSj1 zD&*&hF?`;C{UDs;kGKO5T4hjpKOWsr!aewS4$haR|F9(AR3CVhC|nhjwL#%B)qwp> z3bxSlkqopJ2$L0lJ^Zqbv;gXNdW(d$9PzF3EFv4q^)x(K+r8$p&nCTay>~=D{FSAK z^t!%|C>Y9J8DyS-`0L_+)2X3=X6eDB!oKFT+U16nJkiSL97{_YUa}hJ^~mG?hN&S8w#2}HwLv9$=9;jp*X_Ec1TnIo<(2D?% zGKX70;zK5y36PT8iz$7L0p}#1(1T>WB9q$g*OuxB4yZ*Hd>~{e(xGFcN7C)mcs6>D zSCfvJ9&)xyIYT#(De2)}f}3_ie_5R8-ITXlmfPBvgZqs7M6|w`NXE1@YO+XfrZytR z&rq=MLdJ3Y*H1k91Nd;Vk&xEQoNl`ipe88j%xx`U>H~jka+ZU62Q0(?#~u=jcq}54 zRXX-VSW4rR{@SiKJdG)VA-R+tJ+-o=S#+x)9^R?4Mpd1$qf}BGs&ARHjXeOjTxg7W zJY6s`jY|0#MH9VY!qDb|abtOmNj4cfM2_ywimcbbmGa%8$B5zO%2JQseA*~5F%gV# z^E)yEgPH!3lE3HB4wgl2s>`51p(7P5;T-0An8BEl2`Oq|s8c#Y*(cj!qRVJw3Mu$h z`~RQSuejclroj50^4$W*>XuknS;`>45h?_Ls_CcM~r9#!(GEl^`x@^v{`lDH~S zBDEK-5&I@&Monmzgz*Q8ntI z7UA~MJIrItU|`}Pa7}rBae2QUD7z@BsHpGT8g^t^6y5xb#}Y1NJ_2PA?}TROq%M(ri3N?;|L?FefNPQ!XErf>~SWBOJ&G6 zXU9S>(C}X(h?gj=rM&eS(N`trnh)R4e&#@1Pe7w#V!%Z{n;taIm{oXN5hC&OpXE@o zI*t~j^jpY-@X}$J`AihDu_?I}4DANCfabIFm@l6oil#`jX?SRyT(_^llP;yw>9sZ+%Y_{aIhkgGf5P>%Z4# zG$)&q+;F-*Pw?s7K=yewFHwL??nn0ke*}_Jz^N~Sg+>htH~%A zx!9Urt=YlTt-%GB2*U}=WwJQHs?P<~)LEqnTd4l8A%&)cxk`ucJwkkWkMFa4q1nZM zal&8QmJBqTejFx~LkMuZ&Mb3WPjk7?E0buHt=4tjoqw)u z_X}&YzQc*tQK4%?q86+DUQgX9!!Q1@{5w4DDLA>IT7 zxTm_BV2{a4O2u+zFe2snyPaQH6~;>g$sGDSFzEL^nH|M)8kf(&BZ6{Lq{_%CJzMm; z(@#rfx#*`x@vst;g{NoB$!^;$v-B~arlCb^@fzywT0k&?7RJCRqG`2~|1R&iPc`)ojGAfXsRcvgs z+{@xpjF{Dc`LvX~5DH)M$c#1dhqy=7z&T6n&7dVz9i$z$ROO{c<4s>SWBfls3{>Aq zBcS~c#@7=b2p1~XGUJVG16_(tVi$cYCy359EEp-LiEWquJ)$pS$BP3HITH_&1ep|A zr^!Gn>Q5dz3Kv09wN)y(>dHXZxWnI;c6D1|)qlby8Iu+#IT5N<$xx~*Nv15#f@%@P zWz}zoraKh7M9>hpxj<6Mh9KfD=l5WJa`{@4T;Yo{g4pPpR@+UQa4%HU)7hnM2_&ct19T{i;D=;1{la1`+#xEwQ&?1ZqG;Uder^d>&p$bNH`0`rUPxif?pi zajN8NOXT-b?p{u9zvl(g(foPJT!9Kb7qc!LP7!ckpTeSip^bs#!|jb2YBYbJuBG_# z9U_ApEhM5Ms)!~)8+1-j76tSd#z%|?PKrGz59PIxRClK+t_#dQiTh@#@+jYE(A!O7 z`IVn)TsL!o7$LwQWNacN7sB}O`d*+5{9=xRASAvoIl96y!Ow54daWmQQ9fF6To&h4 zo0uE|^fQwARvfbNwc!Y{KY+)lVbu!EOAzra?t&Uxz&2VT#T)1KFiq7Xk^H^v zB;)~XtBsL_%YG*4rl|cEVh3=TS?ER4%K=T6b`bT=ns$TZN7X^Ss)=`4{=lb=&Zw^7 z%!+8Zn~3;nB59UPKIdu-J(L`%B7h0Fky{rngDuK5sz#mjRQN~7IJ`zEfu|@n(p9-B zmweM8z*IACF&x4S=-aqHmVkxoVwZvF-!-^K6=74f0pEF5aGU~3$opm6`NEgW#m9h| zh)pndFo-VCe$iBr=o|ad$1$E?uqQ3h7dF|QVN7*9FFvX1HuICiqhy@V4AE)_F*k)o zPc@6_0N9lo3pfqc%4t>QWliZevyA3Wz!l40XIjLPa}=xQi+GM~lvfp5LEi$mAy*jN z$>aj4fC5V_fm~vhRIlo{Ivi-MM;pAf(1v=^ zGa05#7K9ByYkO6%AcvYtWFlW8X{cgwdX1;9T@E9Q_Q9q}6 zfZO!|8yWP^ez7kgyJb>QAa}Rx^)C;9!j{RCxXGDl(sL0OA}!$b`Co-OzyzA}mXPVZ zosXFD{rVR5feD0;aHBT;+V>=O_PY~zTYvFD;-ExE%2z2rZ~t3whncNbt?JbLJ{`hm zRlf@*x+uewkSa>41F;eVhlb(2MaX`wV7$^iuj~wnqHPGsiV!;YJBqhOm#0%)w3X0Y zOY>o@>pbdNq@kdV5`Ye{g|Z)*?_Jz7q?P2QyqEG_Zzp%GoaW8m6qlG=$&N>@7y_+0 zj!Z=8=~6xQLyg64>0!h-rEwn}`|C1QbE}J1P=|yI3;A za1%u#raF7fNnS=;g6>)Jx53)GsfbOFHN-;?^e~3Sl!PP{;L4~0I?(*H0I(=D7BCD= zsKU@TVxvuYig7i!Hc5y+-67cs zP$zzvC;yACcMkF-*rEp8)3$Bfwr$(yw2f)owr#t6+O}=m-M^jK-9Pqw?`=dyWJN_q z<&6^=c~51YJa-VHAFfdy2Z(q6my6D0E_9ew)u|PBvj4m6=(ZAZ+rTTB;%Ey1Y}65h8MpUS0`;MsxccYzTuOWK@eiZoVtRTRU}M zrQ-2Z~D<-FhITvAGTt9cn^>T2?OHuuWX$IWL<(ArL%obMCdcI%E}t zF(-!M?XRhWz%ldGFPp6i2E+rx!fpgSM18*p$1wC(02xqwe;Z7y6<2v{v==~qz2iK7 z1Se(*A*!bv`tt9FUuDTyFJq)V5(?+*57`99AdT0#$jihj6$e>8Mcw^ZUq$G#s54)k^-a~j;=HFVoy zW$gNP8SQKI-K^zGb$V=YO6IFY@8D|kRErmNF5?J?*X-Oy)g06dT4O5)J=yKyViK@H z8mmY0a)~GM_c-;OWAX0}upzMXKMu5L`J`G%4^C()sP0V$zF2KqphRj`E zWx6mIGm5uFu5*~$pf)BbA1T(ij*fYtnbt{mM6SWIHb~NtP)Z_$D5LEWv_`}eP3d-m z(>w&31~Qj9`0$u7cjgB|DioXQ1oEYS=>`|{;Vls}mr}5ozq>-j)mj9W9^iYxSCEQ^ zhBw#YEL%erFokS9=G*S6jbLD~{TOQys^CkrNAH} zLqmlBXq>~DB29cuPDZ+7O1BmK#%|T?Ss>Ep#tDOb$)US!{HJ>&R*9qbq;Y{~&tf!a zu9%E+9XhI`;86(Roz!2E;#RotLA-Z11e60B*h##J=e6q5#rIkFD$D+Q3EuY^4Qj$S zNrXwokR2mRM~FL33v(UK%49$kI#sDkt2ERbt)DLIZd@KUYisyfzHeqcf=HSB5J2AS zwWnluCPo|r=ECXD!l)~)+Va89|5n+0sYufO@6fvE?&KshDCRT9Iq5QnW zLm8H8cQ%k7I6$3cRI^nQo+A!#)_&CR_iWtH3tL6=8Nom+lDjIch1Vx_l*zouxN8#ruDG{5aUKr22eb z3e|^)cd%U!ni{Nl56tjsjlSBx_s$ljO>K||9H6TI(H|}e@p?pk+M5;*Qc5vPcCC9e zbU*oJcRA>*y^v8hy)&Z9k5aQVogrSnMwHA4sWzvT*kBH^MPT0vPYM) zJLeB6QQPY>@Ec8ZLaGL~lad?Ot8W%KSslEz6|;-YKz(8iLS)sV!6~Twa8wwPgMcU} zIZ~;+#cy(Fh_ri~ec zZmy(L)|9J9utIc<|w zX#F@G!DsqnkeRM#;r*M1MU+0~13EBth7~bm?1MNlnn_SZ2IkSh16z_fvQvm)e1V0E zq)+x5YAVO=XT+jOsVAv}Y1;v%!$u$venD!#-)3^&419D*2 zU5{H-xq>On>Z(cuM>6HVA`2Z9Va2#2GIGifO4t819LWI3A8Jx~RN^I6wOV2f9QKbc zcPX0=VX9>mYgJY4NAS-dPpi!qhNL6xmQLX~-rEi;)&Mo%?mvoztrwvo$smQp2lvfU zAXYNlc~rLXq_Qka4HiJ+!U40l0x55<$5*mDQiuddQ(2zDsyUvZsUj(>J!?@vAViIE z>mQ@}Dl04Nin{8w6JgVHN$2hM^MQTn!-Y)bzg-Flnpm&{4az~q&nbBY3jfo(59$vX zq?S`5x;cgl@S10Kz^bxn1o!3lW7`XKZKSxG5dOt=8t@J4WV+Ku&U!=q3=$z6OgTG& zEz}dg;n)1lD)4By^Uu@y@c}xHVAA3PaNiwtIQmG4J2`2P)a^Q5Nf%1A!fXHG>zei2 zBchY!*{>hmv{Bx{lpGTnO4#CdpB-!W5cbdHUIy&eEe8FU*mv4ErTVW8EzrxiuGYFt z&QF0T7EFtQRD|*i+&?YE7p_9U@z_*tHy04VO~_-5X%&kJ!UV1Freba&OXoQ)EI&j* zZ*t0HP%unZzo}RhvZT$i(mft6G3+>a;g4*Qv39e)0ttyei(6BI*QTcz?j3AIj}I`_7ty1XmS9Xy1-d4UxE=AKvFq)%uv8rNm3uctZ zG>`^{(?BQ>glmY9;{pT_dAs}2MpGK?%o{P_)hJG2aLwQ8;+=v6upnuW<=e5EtTIIE zf0Rzb2_`4v*3~q;#BeIYwQ;;=k;)x=`Z(aDLiNK$X3Z(9^&_;BG!qS<)mh=3O>8*L zeY4vw*Voq5)>LXa)|JjC(uUqBC<=CfAz@0E^6)ye$Te_Piw^1}PV*bji;ToFc@sP? zio!ZTHsP`4ouyp@7JSG5La)?-vG_mm`UiuU(eHj74?q)cwqn`oLA7}wP9qBLFR$h= zeU$e#lz%91a$qy7dWY>?UJ0Z(*{$x_@eqCW*kK@?^8j)`_R9di=WNLOtYNDLK5&Ce zRC(rCA6ekxWA;CMj(7b7*&<D7*k$mGcZe`VLNsY$0)Q|#ztcOPdDw-EEKyt>z;t%S>tKfu!7L|b6VjuI- z_a_JAEDFZfDd4ls2WI$}nCKpm5kbgN-VgW;l>ngU!a_0uT#}E+*JfsCyOHxe!pQS| z6#nRD%ll~8Kkn;scE1n6pPXhO`Q+~*57GjHI}0##%?u~MtZhKHu*-Qj1N1^Yk1c{$ z;qw%2aIx~HCQ6Z**Lt>pbXdgSy$y-X_?oJvDokomJLGfSc@xS4s)cNyAzZEAoU3Xb zL3Zu(*vdb(AliYJdXA*zydNSLvEj4$ZPu(5s=4|*r-Q2qY@aNhQ>O?nUEV1tB-mUX zO-T5(_Tn5~Lto}Pe?Jf&PG-u@5)<82XYN_{*9O~!vh%>S!Y*06y_{n8Hm{#9W#}sRIr7`m-vEnH1R8NwxNeu_;ckaJb!JRvXy_MdC(x@TN$vG`}zfQlaiJQb^h4p zp4XdCtt$nZxtlW@nP}rV6Ls8Rh-)U`7eJ zL-G%CvB{Mf8Z#iwY#)x6;h0bi*R&%9!ISl@HL4Ls&z0mlo74q}`T$6;FLe%4aQyf= zD%25_J<=%HaXWwV-5jqK<=5+1Tx?jNFpz!Ewn!g*?8P^9-?E;#w%RPg{J?(s{8AZV zt?-pf+5r4=j6j7$Q^GTP9#BVA!Arz}ZpRCeh;Jb;$C)M9r>Kn_peheJUz-tk55Af8 zf6z~Jty!|10EBX5z{&rs(>uw9RCh83`}g$yYcV`>UFM&xV*Ji3#tb-*Cd$5WbIJy* z75~vDz2n@eTijj#k4ESM%R_nsG~r=S&d`)p`rqohKUmQkKATjo;p-K$j$yOBNW_@? z5v6B>AGGVm2aiVLupASn+OgrCjK#u`&qjJ-4S1oBVMP70-W4Zq zK?OtQHBU@lzet{Z)L)(w%|Vvw4YPhlr3A7wt}NH%h@mdl3=j`*l%mGN#o|Zy`xW#@ z5ebr>93bUmf_Rw43rn9b6+f~0Z!Al*fEcVOyJ#FRu(rQHl6`*zzCd#y>5X;;0Eqs; zMUy~)GgPgPGJLQQEG?ceFqm_2j;D@&C~x{zz_=d>Qn&`N2k=}BP-%YMP8Kd$avn_K zj5dav`T%;ZXOjnC48*MBI{0)r;c-jgH6UB{LyC1FHnxwjN7>3pv z+ntJQhEV{Q$5&pBj4z*fAb0k?Sdsq5Ld@OK-mP6<_RR{$@NN&sB_@;&{~W&WWg6&8 zEJ?v^;O;I6;B~p9Yqz6ow&<2(yFI+}BIDdZp5T>|b7)i73$3M_v`+LitL0?ik|3)& z+7^)$wiZ~y9kUbt_dA=2&hD1|d0!aI4`26n-j7pZnt2Yd%}H~r^(=oa-FjBi!*h9R_zC(|_{YEO^y3Whj!v%_6ue60OzNh@>aozTM)Xq|F zR=N-4OJoBM`gY;=``=Iz|7Ry_%&UCp?h=~@ zZ9l#tA-zy1R}Vs`j|qKG3h$?5D>1v<+?SyoM8+deZao|RWuwwrF7t3TexC=OSqgt>0^Wrg8lza8V9Y7o9$v8EJhz*N;0JbS`anJBxr7 z{xFQhL7hI&+0QhBkFNAzYO9v=Y7_*`#R&T;C4$W8$sJ#0{*V2 z-J1tG`Y)cd1}=WtzNat*#ilq%^#qu-!A`Lovx}CVG%-nS947}ZQ$@COPk#_XL2x65-a+*EGj6Of2{*zG3m{Y*H_oytG z!J_&NjiN8u4a|$@z7@EE>uZJREoZ=gfu?sB0C0RY(2KA79GjS|2JBt+IQpv7 z$?k|R9+$_4D#W1@ZueG7jevI>l9W|uc)O6_XD{z2LprW&Z87ARZHVh@H5VYx$0{kB zTUnv7Wk{kEgOkb)ko6a+OLHWS7&$StEZ&D;-qy4%mky`abf>Wp$PbWJyQf%Ndfj&@MegfT};|DO&Eb@RMe^1=axx4>N8(YmOq>h0kK7uEj>T znr6iQQD@*BE~UN@LcW8!RX!n2oM!SmOs=|r1XxAIEfL4~e2C)t3+nbFu+h~Vn)y$r zoazLIk^%b)-Bb2^P`qJn)JzdKQFo6$PqsXKGC_|Nr(+2|chkpT@OwOTo-PktyM1{L zZu=HhCw@>bUf`RYD_qfBfb0v!}`qf4jIQRQghSl!@ z0ls4=MVU=ip3i7&3yxb>l~3BkxfKKa`5pWn;44tS8qYHDZ$0nj8kT{4pn_}A?iNnP zM{11S8@cNN*YiEE_*7OCWt%m9`f~(Q0j=9+al{#3Iw(k5l0DoCWl_u#l4wE`EGrePG2wZm~qx~pIX=BBwUhq&b|Oi zYffr29RW=Xu70@on;GY(MpGhx@R_aDa^SS{%0*iUQuge=k>3?8s8Kr z$*9Y|XN&95(GY~ct;-~Ac1LQ%jdNdxIK2z}y9p#4f&K1B%fmu@UsWo-Z$5+Q(v~YPi&o6PiI>MM236J=z#&z=HK4d z?((0m2WAb}Lar~ZL$y=W40z&ZMia<6&ELF|Sk70~KoBf}R7Sq0% z(ByPawNU4G&@eaC_Rf%NjQkOw`YBN{He0Zcs^X!jZM0`#kR~IM~3vl=S#v-$1QU4){evANs_pva!Uh<8ksJZ+sypl=# z8S|mdI=aqU*0hBhNv+CKt?Io}b=A1?^WRma9+s!g2C1f{N#J{8Q^z~5jCDVCS@ZR4 zpWzc~cE2W{v_bO8dbx#q*;lRVvr;G^OpUlwBcfV7F)E;s&6wD@F#KFd_o%jg*uVK3 z{Mwk4mV$1U&aP~XB4a@G+E;35tFvictI&|n zcIom> zdndz)Ueo)Ust6t03i{FlA1kc(Kz(9SFY_{M_4FP0Fij@r2DPa@x@@m(v+;*0Oq@dc z+TM)0;vh1i9O%@QwXPEDU30AFRm=6AI`sH;VQ4EMvL@tCvF&Ad`1J>~Bl58%(Gy0? zY65pm5AN^AqBaeq&jUM=-$%Ukbl_Q7PW4)}ao8v!vJ~>bSu7Yf4> z_SWBON$RP8JZ5KG%zBj9Uy;T6CnY;D#fs8B^_!KU%{9`RhQ)f##2%S_?y6u{~S_0ce8 zZ1+JJxkhT548}~B4TT3}B$y2q`Nzza6}m2sL@v{@LOPF(T#WMV-7f(j+M*Y2K@GhKHefc2ujMzApyi)W3OrE&@nu>C~#7FkS3Ut0pFc@a(ro(7cu9`mvV5d}2 z93WFSqo!G6vEEIpi7`I19cK(bzmMaaJ(}gHSE$KwG%z--=^DHjA=k6o!2u7}4$$Ch zDaVCJhKD~5#4s%U;vf~xcD>;m!uKC1`*+hJ2!*5-a25jkxk4pN%1JOW{mbC;kQ}Hq zunMF5!h6;?t*tLI(g+?=FDm*$OhRmhldkf^Dq;D2*ShTe-)d~RHc6wn>veM_qEDGx zOtq3)l~PRT1#NRA@7Gm1hgQI+y&6JRE~GRv4al2n9khR7ih5CHo!7Hurl=?zpPs>Q zwRlBz946po)jDO1#g}M+PTtc%$-x0pYg+)(QUNPnZE)Y zzWdv5PvOg?Ge>2ZfbWJF-;o@;dF2s;Peqt+gVl7XTRv@KHcF7d!{lX$Zrg18m)1ZS`E(4JFzk+1T6Th?%q_zW zE({Nd=HN#n5EfZ6mQY(|eJ}?U2QeL-v!4t$%ePdMIcBPi@u9={<2zm*xkW_j&c ze*61Z>}?zJ%P(~~KV9$V2M_kpym|A5R5X;9Q5EKcjo9VT9me1VOa>$9eG=pMqA+u zxRl;>IO^KN#5@)Dwd##6m4}%{YY}GNhNwviNGlaZSw#GJR;uw%H(J%B062vf2~Aln z^59ZMs-@W2O+GmYg8%bNYewVS+#|LoHy8NBeEeSH0 z?|NDG^omSu*APcxI8`;jr1?>imPhfzG!aU&!BUl0_J6Jf&*V~T<&?uanjfY^OR(;WcQ%)APa*LyXbql}-HZ8O-D;%m^eqp=f$Z8f5C` zCnKY}m+^S`RW1QN+@E_?DzHb*V#s$FBfAfQ*=DNZAzA5_YWqpv^Gfpx3Hhc;eF;ea z^rcT~99wJNb9+0luz_eJzwAv#OvEyUKj_)68KqcjO`hwOZ_ z)))ZVHPwgOi@orWpJmdpZ$b@Lnt#p_=>c)YIFp@V+8kK^^UxiC17d?3 z()haSHI!fB;VyN73g$&F8$GJXhA7ldq<$-|Teaue88aP{Z= z3(QC2ZMg4rEVkJ^Yxng0ENkg)Hc+rEnpQ|DS}MD5H-?UMmRG$zx9SkxZkD=`FE#W< zq&mW^fuPPfe&EmIY4kkrS__=Ku6AA3Jg04gPym*tyHAJ$rFteqY+`>s!gO48La zODl-nKU>I97vi&6VMQu_^2=5r`Yzy&$L&s=EvkDZ%4 z>Lbfv%yeSgXVTBjgkk!&}DBu1ZmKLKI}B|+Hbrb?qM5Vy;Pt!b5lua!68}i zny6k!tEohD49*o>kE$w_em9hd1H*xIQVm(oFSUrK;#3GtOhNsw@uJiS6y0~pS+Y!a zyPVO&If(3Q{Fx0!W0#oso<%7q4=v#e*Cw5wMFl#k9YIFa!*0@y%A`mGh(S@e;%Z?- z*rZX{*1|pf>}og3=0x{gj8xU}C$SkCQ_FDA!(p>B$-&bXiv8jcU%fBktP-%p4xofa z(?}s$HXF8G=QTgWZe@B@rwO3cyMZCp16kS~r0Opnz?xK5%SqvY{*f0G%EO7~AB?rA zCUthc)n@kbtB^PzK~-x=gXN3{kuwrCGAVcX(j~A$JJoM0`kQf0O#rc}wAbDY{gf_I8tW<#M%NQz$LTZmFK> zr{}=S)Lyg(mU~Grny+`hvlFT?DzI`@Eq~lvGw`K z-R_~skn$*LTAwkV4>+#SMU7jAjV^_)u2H^5^@*^ve*#koMSb+weby)6qR;#*Vfbdi zbdx3NxU}ER!K_1I5wtCWJZ!CtIyYufFW%SLUTXc>OaEthPK{`%?g`icEZJ1Fva;|` zqef8TGo|!0YjU{9cqg8jpEymFJoQDaavv^);Gv#0j7ep zG69ogAzoi#0=CXpRr;B5WCY?X^r0U8d0>V+)p>%MfUMRUn}`X$$7@}bX}{1odKcS? zntyR$3sFmEk~nvBiSMsSpt}5FNp#W&&Eej8#UYe+_!7}?R<3fo zAPx+(_SIj0kElQgR1X*Ri1^$y${A^in7>eZ^wLoYm-Pv~NcfYM0R_i5x~p`G=hqRL z97`Z9?P+I&&e%n5$(b%)Qqg5A5-6?{9}jas0`xlQ)pR$t>(uDF1wF zHI(`Kj=H*cvm4DS$Ozs+)`SoU0Q~}4&=pMx^K*tLUNZ%u)+D$d^D8SA2EL z>(ituC6PgDDee!08Pj33R;}>U9xAQide>3^dAs|Sck}NUifVLBmow(=V0Dov55f^X zx8L2^{W+k`ZM09z6I@L0aJKtkV)&BB;P=Y9#hg@f&ciHzBXSY_^*@=7wp>4$<2Z&p z;3sw-tp8C`8&pIAUf3E2{dzN8^20)I!$#n$3n%uT1g|V%>`i6AGG6Nb38$6EpkvL! z)e=?v&sBg&!{V-VBQ%8?QUeZUdL68slwjosNXP*L;(;d0lx>&(rN|%;joA{}qW8DG z1IXRd9~jN4_K00_9f$K@#w$__N(o-Fj%0Z{z{P{J)j+!MrzDks!SXR;G08Dq%ry`J z)MR9ntGb`j8@<&u7bY@v3k2onq%wL*l9hbb+V8SVnj8u^an|OksX$z}rb(<^&qsO{ z89I`EG6qwDNo=e%!QT+jvE_g*WWp(~5v}B4G{L9Vlg`^3j8+`!p!8ernKM|!kiz<^ zM^GJ85hLvO@Im=~#p}N&r`Ba6G*4(NP0&#RR^%8P!>SBF`JM7TaTfoM3s2}wps2As8i%5 zC8e&NYISOd*}4x|S>%>&TN0-wbJi_tvPQW`)-V>40j3a}$%(*lN#Lf-m8 z$q&kGK!z789f&Eh|5UuNNEZG<51LtkbTNnK`o^?klv zScyu2$7e2Ud;reZ>B{qX1@ZSUh(Zf3T!vz)E4-TP#L@UHFBk2nq<+AZcdp>{`Lqxn?joe7Zj}xcRCRL z_ruL@2$bM*#J{A&(zQxE^aPk{8OnUgt@w6dRyrAH*qLh`5j9%t?`e3JSc7y+E45Pa^%aa0W4}PPz7we82dg;Nd473 zYBWgwC}h1UM^SO*o~X)fz#rSF;$_#Mmx0}MnhwaW*ys!_(F|7;3DC_!s$w0qrWk4H z2j9ynbOp2keWXir?6b9nlDIR?_sCusoN?g60$iVZ(V#UU z{;%#UbYjJ8B%-B1tH2dd zsdSl&-@wmOzNf2Qk0lYgPXr5 zt#gdQ40nLGSSA^J*o-V#fy1LQhh0`qV_H$519PMXETNgijStexxSj2SrUAtzBCa5a zSg3Tdiz$uv$<$t+(bAOxp--k65%?YQ3hPT- zZg0wE@$9G{Bw~91EGMw(gV})Zb{LWiM#td^fjH!IU|E>>dE9HEpJHq~X={_`S;fmG zyAWQjp`dFF7*td&%xaFzPX@sVyReo6~Kp7vgJ8r zE{#KsA@9^;9#(6RxBy*dSwC;S00Hl8FQ{Ng=+M@uC0-kUaK7RNNH%}H%xPCA?V__X znDQT483b|AoebnKy_ZPxIt4>b9rGrv9T-U9_W`%U&AlW8!o{>9$Z@T*WlN{|k{ka^ih}~sd$u5k=TLw0#)W$m#-Jl$W?B8!*vyQ11}z?i?HX2$v?2@_DB(zwq)Zk9 ziPe$DQ`{@E%LZp_ZSwINoIVIcnBcP_M;Ic*(h{jd&*oErx4=TRI7mGvsq@_gia{Dm zZ8Z|a=!~{f3?H5u)7oblt@L`jPZUw5AQEB?0Z+z3N&yu zej>5`^-kz&b2vp}Pxl*8!SfsI!HLN1^3!aIT0nHf4rK&*f&txiTF+BU^=c zft=LD{f)J*1tSOYhZ*59vCMICP0ico)I@$!5mMM_U(}1nP_Lx61)R=P(uI6S00#x8 zG=Oi>iyW5wUz#;^03r0vRQ_Ve?!8KX?qIt$FVUXdE!S&5$CDdTf@3EoO0NPsLykPh z!7Ga3ufCm3{1Es?WYs9p`fdVV%(P+Cc&JetH}p9Qw`y0@XXK6kT6!V9f&1o)AS4g{ z5|3u{2|>~U)_fTjB-zlYSD&g^tAD^usUFn+px`DtY$95$Cxc*Val%Sg}|pan6-qvOrgC|*VEKC)Q?zTi5pQM52;^Jt>@ zaAC4-RDEh*1NK#YPjthkZ<3rH6CF85Dp8&4o#bTU%j+=)r85nezvzG%Wu~wkKC`8h z`Hm2orjomEqhX3g5Sa}R&-y)c3n|-8TW%))0aCA(rTbDgK0lxu-9o?e>##W>c8r$( zbCfYcSu81u;$`kBNq{x$cXh;h1KyLe-f#F~eHqvmg#C1Xir1_}8 z79jZ2-MEs;%x$dVWhebQfyJk;de)y84rVu~h|D%_!5MTJCOC%>wbr3;_+xzW$s+Hb z(t{gmm2!Ije0B8*(vN#;`(==&DkU0wQM!L$_L?9ksxq>ximyL5N@n=V9$=+&lJs46zaI>hUb*AR7~`#hbPjpb>E@1Y#&;cp8^3T(u)&n=5Bi4NKasc#D)^$0p3Er4cKw{O-2e&;h=3 zallU$ZMeWr?>VTOG57EHeB1B>)4T)|)2^ecWQ6DdkC7*QmYbx(O4uF~ zaOTtVwAT`A88ot%HMc^e)zi>fvfbb)2}s#lsFYrhX*7N|I|19c&cDpp1zSImV;ed& zR^GFpiV$`frPgk>%VcLFDK)SCaBxjuK1_e}Ix+vpr`PJlbi7@STIS}_`YU_b>3IJP zn|veX=rSG&Ep8;|ZA)VE8uUoQhC43;{Y}?4^bmv6UDQN1i5MTFPMd2yGWIcK6V`2p z;NIU)g)4I(nJ9|Wy}%@A^;b?(6;Yl$Ru)2vc8&Z-PNG;TE}0JRJEZJV6E9I{${O&< zTt4$iZj3{Zwl%jPGQ<~rA#6eq0@{x-u6W4J?AW-kXp%pKWd)nwWl|Z~!^#DLN9aun zfuT_Y63-FM`m}DrXqkbRJ?zx;H=5n{6E@6MUVC6EqIhQDzg@Be5xzgose4r2VixW= z+Q>FrL^SytH%(y&q3U#EMP6^VGoR=;n#wo+VKi4%eKyRLAgf3$2shI3FehEkD6mgf z`b9GeJ&qm%qHC|MpHEdBCNy-|y{jdOpj97%Yv^otMxAX-AuTob6S{9d(`Hp`mvkCn z5;lOFKdTf2V=Af~8CEma8ii7wRoqjeXQl0`;NlCZ83>|QZ@8mFT?E}dI97dCZnXwu zt1+E2rQ^g{d;%SWa^n*YO$>k^PcDR%MoLk~-OULmfFTBzjD#cv2?rt$_^*b79E6{f z>vA|5w?rHa5m*!mN$@|LKtjYjw4}wR;P8Or|M`u74;=@I1mO#*C~4^vca?beodZBf z{&#=j0l&ZsiG6#!g9?L$U$lg}|979jqI*Z8gyh_V?!0xBb@^{cQv@f_{~g-@6E7u* znhCM5gfonD9EKK<7IUHf?D>IJRT>9!nU zN|vOsw+1P;wl-@@*Xj4C8wQd9=01ybhLvu; z2kXbe(FFzsplupu%m5QwKacK@!kflaY#Suhl|jJQ=N8CaFWy4AyI%w@5sRjsPVad!wTi3`@aT)ly?vPIvb~Y5b`X(C9{#v|FqrWt zevP@zur0X1Pp@NSn)SF9(6Gho1?UyNTXetfzl7bM4tk>wrB)|5p3k@WJ6@*%+%G5o zAaKydaJs2OoKl}ACMMRI#bs|QWX(9je1cD5>@>g9S<4WEKQ+HB5CC2US>C_{U>Es~ zUw3MiQ~#ui23ZRo6UJd=BtZNZ&&9uRkj{k<519;%jC;TC(NR#)odfyE@#6o5TQM&)J|VR< zx0V`gsJe%DyL*pXC)QQE!>D%IVWu;fRu^zP@iOZrkl$mpsXUmq7$8=S47MC3EW%Ie z8ISp2p;6-pdbw7LDN^~k4Ltd*M?rD;v<53hYVh#4lMuCnL&X7XXNOap5+b50+qaq6 z^hgJg|MdBq+g$FP;cgl)G5@m4L0)Jc5h1YUzsRWI5f!EXnk`B{iaw2<^&0JM*JT7I z>wf*!#Y#5WX-go98;wgV911Hxir)q(g_bR8bYv-oXBFMRkk}@i2s#QkQ#_JcbbEOC zCsiIQ36QN@`slxjp}IhxK(zx>t&F5LI*&|OD>#O+Fxa@vB-dqB(kOv_GQT*4P0B~I zT&SsHzok$HxPLWE+IZPLKAO`NyYicSI$*G~kzT~d%RQ?{r36F#rJk4!*N0@=-6GY? ztkKWUqhpXGyVuW&NB%ExCJ2D(22UTwL^VMz5%Qh$=7|GC($s-~dGEzUD>-BgE_mxc z5!Nd<8&w2W$Q3s2M@Lh+Oo-nFS|cHWwsLs@CWF^8;hs%!R<3?dI?4_;&n)pPYcoQn z!lpNz?B`z%2tK_!X!!WboRG~CsnEPm*01DI&|j^x#oxl>w)~sY`R&-f6wH6l-`73w-^sx_409JBbT^tX2;v1H3HX|U??GI&`NeK zwV85Rse7l+MoC(tn|hvKr?npJ6v}B$3fpa5?ii*Vg=vs@B;D&v{SSz#*+4|UDHi>^ zWI$6sM@6z&B!Tdd={sNQwyvaiD{FkeJGmpKFGzQIu3zo2T79zdslO<6;Y9nd7aCp{ zLa=uqRUK5cr7wg^2TgAt4k$2sfA*ExFnW*UkjAr~<&CZMyiIO1U^I{qN+w$!r94vc zOj%qM|Ip%b@*6Y(8{lnx9j?{9u6P=8fsaDBNckmtUDmF0kZ`R%Zy)SJ!1sjhL`4Dp zy!@+@Bj2)g-4z6aoc`E&^D*&9rMJ)rmMSO&lxP0nk0YU5SPOg`f4=;+Q z6=73CHdw(OY=a^7cH@OSZ7lgk*r zfhL?c8m^Wx^C6)!iuzO#+}sv&kzJ2o*M-;JO-GpQPLunJ_lF>&qI;{FyzhvV=eO8Y z<3i+4v^+Gp6n#>o)b%Kj?r2E$;&Fyezug9nX`iEICtbKy#_B>A3ZyC@;9 z+ZC#r% z=n~FuRIG*n%G`o~2nCn@!=mir*}Ibz-sF-_POb9fzf8R?)!|wE_g*%~;{1uH+GdY0mc`z70VosaKpX<*)W=3J?ectqY{c2B_ zsI%~X@pUW&JT4Yn@o4cIy}Q$CnYKE^#Cx^fq-8{jgKufK13R_E7*E_PYy0%(B$3Zx zuDxqJUuvplg2glD^Ck*T%pL8N&3b!6{-N((H?v{U{QG4U*g}6EE0=4{eN&fgAjIX|kw?m)P4 zw(WCcQ?W9$!JsSZPjDN6VQLRa!2Ykfj+zPNiWVp!Ol(Tk-|_PW8#`5E zGMmS9`r`o-3uVpoo3(l2Uj1TuRS_QQNZ$)0uOu$LjI2_RuvMY9KfL8 zjVTL6r`=qx)nr~T=JP|UR;rq0cO+m_$To`>_Cf29DG_l0R#e=fGR%&z%{J&k_-Imk7 zWs~u4()Y!#pv$PLnt=Q==1b-J3mDMK->6 z-5sjbbyqct+SR_*@v_=_kG7%)|J2hF+#aMg0aurXTJH$1{tqf=t7`WVu5+3ZED zo81EnzFc~ZR%6xK%U0zNRWJia#zMNdUA52kKm)Cx)J&ylFvKItJ zu1kYQ2_1~kReqrdl7d;g(KFa4qH1CEThh8f1ER2Q7A1_=k%q(FT-2*O z&RW&T`*&OEHwu1hkW9Vc9}ZV{`%SkSW8g8j+jku}BaERXFku^1@`{zdRb1gUF}N{C z+QDD4;86eH;ZDf|HX#Rit^Fo@dIuhS?-2m{CSacVK}Y+H{pw+HxcwsWrxR$m|Mm5I z^k{xuVdr_zKR|rPW1!x8x$+JV?2U#&@n^Lz^G8NCPXq%{S6n=7pzM5B*tS~xAzTvp zNv&3?TBSanESexNXi%8)CUy7Ol8*gNuSNdW0hq)G26O;My1ihwi$QRzjc zN(bpBK|rKQZ&C#mrS}dAAiYbk2^|FK5K79IefIh8+2=m@XP&IAHP@UYbB^)8?--*h zmgS)_wmaK`_lME#8d5+z5#T8m(5BgWFLAjd2!VoW1;CmwmXE-3SH~zH*x-ei4|~{) z2@`q-1_I)XmftlmfyREkoP4XO(0rmBOuIy*%ptOpFodPq^H%g$E*BbszWf2fba$e| z$)nL&D?4;;;-Ma{^hTYd+5;76FDo#Ev37zA-L#L8FwACKXuf(N|2gK9!pRfcj?HgX zUZSpg*U@JPxamPZk=Bl?9NlP*qou!1(TbtZey@svM?p&b70u+?s_e;UMV9=PYzM9P zQI0CwXSfIDZM)!6j?*m;*C{CxaK-mpxs(ef;EQKw+A8BAu!hRJc4V(^Q5Y#@HloTE zgyBJCIc?@)6!orL{9As@|-)9QV*HOL?XWMD^`D}T;$FOZ7v<|uqeLGIi&CCB! z138^^DtN!O|J)#Wb$(pb9A6Fq@$Sn~|vFn<~pVa&SlHuErOk~Pn z>V9{lhI+^WR3Hjp1}pRn=h2qtKjAaAZR^cc&gHOH=j&8w(dalwqph+0dh-KJ@ot-E zke_VJ@`Hw5dC%bVn>m!DRw;Mx@cS#?zf6nZ78LfU9_0%mPtL1y)zNJ!R*4`V0pq}u z%jv$@OJTUY9O*P8fP%~|;hmP|h;#Co+|lviycvs=(v8OftMhYpZ@9&&Iil{k(5#hs z`K%V+&?#|Q#9iYzo6#RDnN>d~e^-_K1a^ncW`bKo!VPT;7q6%Eb%X?uLVbpnh9P<< zHjY>)vGgbWh@o79FXzl&k}eojTp6y@5@PLjK1R;La$6ObD_LxER8_#&`^nk~HE-an zJxQ(?^WwhI7klVHflOj$KwQ6{z?-^vSVM!k;hZ*zik@q04cQaYE6Bt*9i(eu;9BK2 z&Jp1dyyR)hxdfKma{){o%S`I5#%0YAI3ej4=YtNPGYE3z zI^vxDysr!uR?DWO zMG}esZ)OoZrnQu=mc1-p;is&)Nv~z~2na8?t*@HHXyW{aQ|TSCXoum0!IzlhwdSdk zM`f21LA}c=XSf>g&4neq_9-3N>Q~bXOSWxOYt0=>rBN-sWJ2gX2Lh#6`c)K2D)|12 zv_bb$_cu+N(&+gM5NqE68GeP8CGRcr>Y3m%Qi+~V>*=<{r91`Xb3xU5dUV#^b z9~ArdR~1-+r0SiQ;E#;IxOskDBNAkm03R@sTgB(sB@k|Aar8*|rLsC5TV^M=TJ0Cf zyX;UyxY|5N6v*HE)2XrYmbA4rG&lrEKQtzZsIHIL+^Mt;>^vJq?~6&7({m7)B8%>X z8G4k&b4qK0$^a|jx0|^BCz@4k;-V47a1egFu+#aKypsz#>{h3<)A2=>==KC1{+R(A z{;3Y$T#)Cyh;#XT24e@-f!(gf6#PF*<4O#bfD`?%mLk#tWaMlw-bvvO&{WwRIZ|%x z2217J-Y2prxvgcoyAZ6rRe)&T9r}AfIFSh^=g%FO>xINtr(u7mnY;edq=2KV|5eAz z0Y$*^pZCdzNDY_4w5=eCxh2AQLl7~cz1Fk(5z8DIyZ#S<0;o#agGj?5sX>M=8!RTu zk9vXrm(MU28a~qpl89vM6cUJ23|Lv{^6hC;=nd*@8JlM_qCU@Ir$naxPHdD}Bb?B= z%kDIb8~%e8FpPgcUz+#_gU9iD_L5;h>NEX!$Lp4eUO$90}C@lc}B?dCJ zj%ihI)K4yaU$mC(?6~WEE;VkO4<{`Ex4kS2Bh19~J2;ret*_tv3@s}4yUam*tzEqk z84x*Uln+{@Am%}bi-qpg~Q z_O<|cmgak#T#C?u*$e|SqrhE)AoQhQckidQv@L>HASbM_o*Tyu@HStiiq&zgIr~hyTtgNQiGM z18t&ft`ExM5YN7vGKg$w=TbF!P#=uDX3xNmw=~F=RUFEa3daGSlQJl{yI0(o&mV0q z<#bee)iX-|&Bg~Z5zOVcBRboXo1AdzW7g(*)vyzES-!p``(UPYx#JT7`Vg0j4N7OC zWx!nNHVlrid#3FdQ1$|;Za@64U!aC$z31rmAw~9a*Od(ee{%pI)~b** z)Vswt;V+d@cNL@$iTMMW>3TNO%KT%Nk7tf502zx#i^nNM<=Do&0ji$^RSRP8%BD1`djpgV@ACMKgup=@ ztdicc>|L6%46ejFTvb0jBOuB%jSW$kuh~yqlmXtxiHR~n)T2`i%G-e0PE51fA5U(t z-s_s*-7fPfZ>Dg@CbYE3y1h^svWpswDYJ~8ySSYNI`pZz@7jvJwT)91;fQYBTUq69 zgwy8<;yR1IJ-r5O&)EzZTDV*5N8*a=93nhEp&wRvBjeQG5(~VQMO2>I`{Zi6TaC4>SJY37 zk72v+Hiqs!hOef8F>am*0bl0fZ{@;5Gzs@UZ+yc70(hH$2cfJupD=$#m zU~`5Y&0S7*TlpX#Ai1|h09j$rF`GjLU#h}0=gnmTtVgF@5nsx2rpELskFiZ&>X9&` zmO$;vo(4s~K?m&P;MIbAV1e6&ms-!8-^Uz8VcMk;9y8{2x$jq>j44z!@?!TMI3}sC zKQKucYwVKF4#=4)a-ER`?_X^Sm?N-+E-yb-U5fjV@UfH&K4JkvB}$*R2vqLXC~Z-H z4)CVm%o`MIthlMq^k* z{v9P{kgv@bhnBO)s}hbgUiLHIXJU>EX3KX^;2rV--o>o&WW9=gW)?{)|2v_)jN{oP z4m-@&EFgDXewTqoiHzg7Ib#&qW+#pKJN}nBa#@$SA=FwyP;W%2$!@f-Lx)heKA&B# zenlnk?`U}uEXId;&3oEdr*@@_;3c`3eE_3tH>6@)d_98?(gS|z>NxL7tHqz`bN2n% z3{#6q<7cMRV7^VqoPCMw@_L#{Ooo)nNrMQ3!D5in<{bhn94r(Eqi;9_@m;E59NxJ& zpFg^Q?go{<6pBB%o<+zskV}CarcC)omH3~HEeQnIl_0N4M@;lr{jwW6b?YiuHcs0(v zPwFSE9^Yg9TN`ar&YX?-$F@7o4SE<6~paTw$; z%k&%Bsj7VR*)sVc`gm)7v&|o~Hdx;3_4AufjICKT12y_Ajj^M3g7DVC^_E!6&KLC( z1>LL=+uXBF9bLJNpXh~#pHXK18wAfiZ zyod9(P+|}3Y-4F>J^l6Wz>hjgoKr86WpZ7fnPtJ!i+&p?iE5hp9Hkz<*y3BP-0r_Y z_5*Eao9N1oM-WjnUXE?{^~(l?nu+#ZMhrH?zt^v}a_pk^`MM7*o#uCsW`1PoTwe{_ zrI+b6NWC@Ly1ybvKJj}U=6aAi?R=q5>GMZ^U3D{0Px=QiThcZ+wdA~}U*a6W_O=H@1WaH3M_C24it4muPFw>%vIUCkQ06I7nNPq{)YHW4* z*CQqrhUIprJy{;|YT;nI!ZLB%BRn|FoR7Uw;8B}a1N)YQ42v0iPQa@n3;}UR2`!J> zcYf%RtDKD6MMV6`>_h>Bg7>QfNeljk+>9i7L+nbj+-rp={cY`XM~l7c&m$1yGvINX*)UeFPg$# zTb)-aNKj}5{qysLeivVHeOe(}rL*~w@trsdbi)C{SMQWb>54};NS|598Y7i!tZ(yXf{4c&89)Q``4ay;XORO4V_#?n`)2}{oeAUR&H z(^{Mi4!98+v?hc++sXN7XgWpUO-s6MI2W*Sp+Y@cLA@z9dbnHzzK@Ji8f_Jjb?NlNzCGU+$K!r|p0u4M?S5OXq;V=3$E5E54NYFeL4vpvqWiMk~EhLa*jm2D*5$qKqBCash!18W`^{8b{ z5XN%O4YHDO?%G~^?@vXWFss6zw^=hX%20t*y505T#H>>yt6pMuxp&E7Je4#$tb`!;`17sJ zvdm`bediFNo*rxWq~h2G@&iWxDXCdGk9yy@))Wu=trc~fr4`Za>0VYTPBa|mtW~aY zwVGy9HDx0>MD5ZRbP<1Dj5)!qv_V30n(Ri~l~BtF*Ri0pQH6kws0|)}Akv>%~%2g^srhW9qqjFr0ah6}pXbiHR@GnYLW`8fQM;P!uswL<7XAs%BmU_>v+#AuTD`;9+19Z#jb{RoT7pzFEE*IU32 zoW#ZqHNTSrF8?a#xB`4Ge{T+v- zhLZJ-g=@eYwRy!}hkZJ~II35`rJ0RS4f+6Etw!wczOp$K4fK2F54_td(HpRD-ORpQ z=ri&p^1paJy{f;+Ez2sucN%P^fEw6rwinXgX=%a*R`X?$5t!q*nK6O|u0zBjwH#7(LRh4F~>u4u}icOjIpDfq^$WZTcfjs7N`%^PBO`ku1PP*|p;pr_r zQ|^|Zd~4u;Ekq>E;UzM9EJrjhd4-RlzjJVmry+@diEQX&-ODfY2S2`YB}n3bilh`M z{69GCzg+&OZiL)V-7fV5|2aGV9M)kNG?NjIuTMEsZoV5ydGiG;sLZsX=XJ5vg^<^P zk>p*kqdd2N@Am?npnLT>`1WcRguRiqjL8ELH|!p7gg*FoQyjD`n;M^_$1|S^u+E*T zu^X-A4b>h10gbiUWWAk!6>1pshREsa5qj^vCU)~7x=|Vpl+}2)l=@+q{jDM?Q z??92Ny#nmpCFYR0;#dV)`}V$YmFw1svZ>0X|O$a>XL3rfIu9(f3-_(D(mB#jRA~-qjYv#|Bpu*{?OR&LG6g-^4niHu9tf|Q_H!>N(dmTbFt-nOH<`7^2jVfH1M#C%G&OiTI$a_8a8BqRbdiU^tH!hdI=5SXm01;Gy zu)Mi4p{ZHR?REo73FPCmqWE~KI&`r|H*C2&fu^PklG@c1y&%gn(#y^JHC@VnvX)<= zmwh@6|Qd7QdSN(KW{P?|DmB1iL8!Sy^%pT}@;Dj6_(QeFp7y?p^+WWT`irB4-0@&byznOD z_;vK*Kwy-ciV*zHv$1p?yzL7*5?YPOJN)8Zc>aNk?e}XC$=%d>hc3(ubC>$xIOHYF zZFvZbT4bbMv8-P(T#vSYUdG8kz-Y>s@Bi5SJ`*TP!U#iLG{QWg!0tARkybw*xXrpg zN&^rApfP^^lJ-P`4R@=oF4a)A{_mWa^_afl2#ovq0Uya775?w6WAD;RgO^J^T)fBd zFHeY{P&wyE3#WqwtC0@Cn1QHW^W7v0!5`v+XZW2)?_A2)tfN#CqEX2g#p>pPwi+iU z31yD-<`!+0-;J(UC*t-SuX9xFL4vBzIWky2hJdld@x<6aDwmJWPmA&MM6}+aN<;_e zn=#+HwT0q%dE+6F27~Lr<(6{f(9VHq?Hm|rv4r-M(dgmCVo5n`KZR!i;4qea4q0ys z?8^!Z`Pu+49>vFSknV<4@8qJa4ovCo0_%@6e2X!U9y$Yj(r<i;U7pvz6t^H)*U zy+03);uF~aJ|pvzN#J_+0ZlbF1x07a+!PmwjPxn#os79{o@yu*6+?NbD`>KK^&o}j zY?GdE;rgvs#oawWwf>I1{F!>S=}*(#JS+HKL$Hi|F}8r^Ip@br*993(5>3cl#ha4B z3Hr~H?_aWezv+M9l{98e*YBs(-69uuGb%EL?K?)>sWIUJ_d?9xpu+V26)x-%&+#*% z_?{?u=Z>dS7a{%lppbF6egsWn4X2E`4um5DD6#5o%0h`5zb_hn=Pc_~R>Uo8jQa%EjHF)|XH5_HCoKpb1g~6>K0U)P;da$pe{*wsC(2M5iRPisX6zQ z6^=&cKJ!G&#qb7ow(3~5-vn!mM~IvuX{k!5h)0ts0!rU_=wta7;>!R9&4qkHQo;@c zDjFOVIr8rCJ)iw_49wIH<~Nar^UlUxoq1Zc`M(<+WeZ~*4m^kJY9WxT>}DSJ{h{t$ z$Xh1Kbp7H?CRF$T{`(40f+}Ahc%%jeN%aOL06L?medR%Z@ z3&J%+s64}TBQYb~M>Gy?udZ!jJt?BYz3lkM(#>xrA@RGQ6g{W-s!=f48s~eMk>gn( zdT9_h+ZOmM`-I*1?bnquP3B{H-Y+SD1T{3fa=!J>Ifu{VJ$Vmg914cm8T?q>Cbo54+R77A?WF%fj4BY5UA>CKyw@eBV%`3# zxVlPLH~B8W4k&h{Qn(|rDp51V{rKqy8>N%7n^FT2WTmh-==wZF9bWIefP4&(i8)-E zb)LQFja6yL39ZvHotR+c<)hx8qh$Yy+FlACXjL^qSH1|wt>YB>8=6C0%*e#u(P#be>GHkN;$u}1G z{ybOe-*u_*(2wn`m>?%EofI`?aKHZW-AldTHS!&s8|d)*m^_M?&YM6}1kHu|BZC^l z&R2yByy6xb)|Dsaf}KT*K;o=FN#E>GQS&ueT(|))a0yGk0?UONijs!VBY%}N7tnJ~ zHgjmUUcGp@fE*!zh;FK&I$~rG10)|#+R0`O?#)aA#F`OEXMZ1d*%dgSE32Amt zI{LrvV$FkW@mj*$%e6eOw?2KB*B_tqS1X$i4m635I#yNPTXYy*Z&g?4Rk;4-w$|qh zG5hTpcb*q{bIUv^1<_ot7DL3dJ;3fK87Sq%k+=Si2iRit&R66@&#}mJcU6-`ZtCYnh5I2le@eP4#eiO}Uc4$Wq0j}Sg{Z3B{LsME?M#yV z)C6#9v_of+p&UbIAw{Qu_J`P7DM&FfRu2A*MIt6pJj}u+D^w%9PdD(I@u-bfO$@@# z0?98wE&B2EF#r0Nh@UTL;pHpj4Qgu*ymTec1Zd=fC(2@k3567c?@I@CZje36Q+nV! zv3sK)>gp`Es*#35Fq(Qy<|r?-xa?h#&AlL8u)SmVB+H`Kp(|+tJQeJBE1QKl6zd_zlVoO-p#Ef*~wJ$rGL2FY{i=Vg*dvo$K3f_K1*he!A#Bd|K< z#?=bn&8rsh@(R`kp^YZm`(zKCv13c2w5& z@_i0Uj;{>hp+-ne;No_HvT_+bHy&_b-SS8sYyk^1`g$6qKIoog4|#oBIV6C-XwJqBl~5E4~wRv8BqL_;^? zkCtXWr|&zuQ-6vV`^XJH3wqS>Vb|OF{9@$&n%Ix6Ah&HAG&cCcW|V&N0k09Nkgk~e8p(Z(# znKC=qjBhKTN!Wb%p(>8@erqqpdH(*nS%&Ml9MXrYIhF|#tm%`#FCGVUXBGySt>`>q zNVg^lrK{bP2ViZ?cAy+DgBYWmCI_O zOX~H-cDaaIHwDLg-xZ|wG1;TX@v$`4Nrb&70)W;Vl{$=BjTA!EZ`exdIV+%9dE`sP zr@(~I45W}R5At+p<#{Sw9zU=gQ)xUjU5H+u1&_63Cmr{v+B?5h5hH9Ne%@NtUma9* z?*-(kNs7l)^-p&Brrg~5{|Lrw!gYLw#!qL1Vr>&VJayo-VuN2A~RWqS_D2u66ZCt!5N44TTbe%P|j8H=kG zYhQet+d8=oS?_;?y(I5&hc?e8z3^Xg6*~|Mic&MfxX&~ljLbQ37Cbbh4mX^)K@s4J zZY=uh!otBA_+!mW2ep}ibb#D;bsc-gv&F+6YOu@c`T8vy+w^k~eF{zBI)oxI^CYl; zA&wz{kev^A1%=i-|^u`XvQb*@>Vg`)Y|G0r2%5|6?xOJP2WRq3TCyiyK zXB6`0xJHKFN4|67&o`MMGh+BcS1AI3Va^vmOE_Bbz_FO?larHIjPL{=bq`O^5V7sV zM~koS=awmVO$BLsyuE!imHTTcXfC6CQ|#6a&_W7C;?CHgNZa93ilr%=fGTq6vk5jr zx3esPPq!)hGWOMxkD#h2k77BL_Q<~(RhExh3W^&`Mi5 z4OvpnysW6Gquo>*p0_}1uq=zj*YDTad=CoOc|+YkOvdGe5>EGLs!--;`x_#L_s0OF zsp4fCLKUdlF_+!F(V8CQX!TbKmM52{Jvrw_gDFBTE@)5G$Lr6R(I*8(-%=ObTX~Br zHK)>xE9a>#i7I`ILovu-0d`-9GtUc5DyAS~urqCT9@6;fQ9 zZs`z`e`|A)p(PFOREb-lgpF4GV6UZ zP#X~Y$@+?$J2>js%g2```!Ne`Ef>8Td@bHxk$gHq3BfS2e2sn-CCl88G>XASmX8)# z`6WWmnX`U!7go*%f5XDiMV zF3z-l8!HXy$8W3#HCnwq>ScDKt7dXxns*~PgLKne;994Eg6?SK|| z=#-Rn$N;f(dx#M;*9@KtFLEGAet@H-Rr*5w^<}AvQ08@{M2GhhJL^IBD%hPk{&&N$ zC?N6XjBlG8|0GY3D`<--e>>>`QE3&Ym+hLBD9UQlZG+Y9_g!&b9DTr#E3hn8e7}L( zOK5?gbpi(~>nkvT+Krk4=;l{Q?MYtT2)v0x5`RdN>|C}`wqmlrmC63?bqV0xr@w(< z8g@cu+5OC~I<0`HC-%Ni5eNk9<;>3nL;9keDvx)6zMFWJ z>gY%d=q6cwp!~@41KTeT27gmrGl&CD*tqX4=+jxZ~*hL1}@G zSQ|TDy6T`mV&=iv*1RL+Ih(X4VLW!C6EfL`hE@2X)k#u@$@D&d>K5Y8*#V^kdKQQZM-r~zcY@=?5I>6=xP{RWc`u*Og{<}kmFxxGkRYApq zOa*-;=cB2oE{u-Yg?cyRkI$FgD7i&kDG2nZN{vrWCv+qJ0IUu^#>R%n0`kVy-&Zh~ z_WpvMGtR-m;TJd-u}Xr%I|I$w#6K)!J|u81=xuig!?=SQ4GrJjq@;_+4Cr1nVmEHTrfqZfR9_D$4x&K zH<(gU$EMJ4=5Fj60jETLHWq-_8@YnGQw5WW{2yGLl87lnMRUK4Z!C@hAp)-rD2+(L z8~I(;EtM3V=Ui#%urYwjM`fb10H(MLZsxx?D8&u6yyV`XL9b1sNjW#*VZfHY{1M zv=s_o24LOnuBOS?`l`|897&S*#jEu@Rz7@N_*Qb>rG64TR&KAtxOK+KGY~Nd_8q{T zQX6RI_y@CXp-qqP-WAX&N7_l^)CUI}{Gx^05rsvH7{MEKg9bq*5+FJ+Jf92OXO#GxT2_RWqkyldbMk)TcQ zDp7o%JqU8E(r5gA=f}Q8HU->MNL_j(AN6qL7#_0#?cyNLM`t?$YS2?F{kGWIy^6$} zl*kEP$_0Y31JSu!SIn5<*3tT#kkd+lGJNJJk`l>Sen!UvFX}8&WL+gDCK(eU;cf1r zW})dNm5F>B19;udv2HicKAX5bMb4RC`~I#d`TdhaM77Nz9)ZAK?N)$sXwRi)F9!z) z$QXG$yF2>Ay}kh5m~c1HZDvm8ErR0G>Y&HizXv`KOx9&wU<9RI`d zk7?n}I8r`GVbxU;B_B>2Fws^vJ<^LajzHL4KCem#0ZO(crbw-06oMZq?-KzOa85_L zu4H+=%}{C1xSNgmC?jD_vg{8L)dpvgQ@m}_+3miju?LThs4EresGSW+z5xAWK&GId z?$Awkem(Ca`G23Bcc4%?a_FCXaWPRJLrwrZzn60=1;z7k>=Au8kjS57rlr)4yE|Fi zQ{k*m0#?z zpy^!q8^mEP*a=<-<0P)^k?H}p{_ji$c4E1>L!>!1Rdak_(;199G^^4Jm+0vur$cfD z^WHCcBf2hdtMZ+OsJDK`^_k_Q|K}YMfqS-eOqvh(MnUlp^1U16hTvf=JDfX5j{$1+ zlDpe;jNXrh6lYoX55T3?azV7`9a>R`Uhu;E1h#R^0LT=)osk5{4vJ-bS;QGj&AMn) zzcrjWQ)8zqL`J>|dl29?y8ZpM&;H`I1K}Rd^;s+7DQ-DvWZQkMfUDq!fxQ&%P&Xgg zdPKneXIlVDS$7gIh##Ba%tQoVJEQiO(u9p~0ymyL1GNLXySt}~UkC{c3*Wu_KGSnl zo^gZ(eLN^89~^(g`$2Tkm>{5EDDr0w=VFWyF$_;G30tnrm@vDdE>5aLLoNz1kN~ALRc!0ZZU<+6~mwHNtz@;k*fl z?`*ga>#B@cuZ~3EeD3Hsh|)yp=Dg)5u%}1$#vP!c1%3nG%=5eL^rHiqJ*vgN%=OjzVGofjYcRb z+&u9Yo*90J;fVk7m>+sL#WaQ$3pi(#Vq&EPD22Wi2ktF4(Y?IrpwGTvErWhg02gUk z1gR6;$YxS=Q$eodUuUtUg&;YIO^Hr%?oG^{f0q>qi^31y&EM>rAR?}0Xj&Lkd^A^A ztfsycgs>8~Ebx>_&*_j3w99!}*LNVBZ1~XcSK;@*kDjI$mS(GgJ>E1oKjy-Mc&h)yGN_;Y(bzFDQACsHXtKk5W`cZ5m zZP#NB65N`+-()}+GO$ABR%{i=0(_d1*b|6HIp7*0f6Z&z5q*TmiL+=|m2Hd5(HjuY*Ab}@TXqSLK0|stcSpUn7Q}m_1mjTFUsg?drEP!b;A7tcL zeM}PpEoni8Jb1T4*l`#Ywm5JrqPs{Er|APIH()>a(|eU0mK^ zId|qgON9()uPS>^vQE#SBB*d8&fuo@{D&rS_|Zq`rIcdaczo$=+IUOC??(6Uof)tK zr^JxAB0x3&&NOx#;N}Du5v971k#z@0!)zV=Ex0P}xR*8VOOCBOl~=eZf^04}}6GLVbQEy}6k0$oy8lJW=W)|E;%ngx ziTi1@{KefX61wrgNsa6U#s9C-!0*HWe6fQxwpOuzIocy+D@Kg$}A=aieag4yhGY)mf zt6JYgc*b$a1PX6$|3dtxX2ZN2y{~a%u}4{f6ow9SfbE58$B=Y*WK_;~;M>pI7hS76 zgQ|4=yc9ertJ`=S=~Q>$R#esZDC((Yy$uCFH04Mv_G8iy=zex>$)|exdQ{=dv&q^J z5C1)$Rj&B9mJ*5RbZN&R+uWCtF-)iEDwBf*lVA9*oUIDMYu@sjze~@~u4r=dB1R{h zizAQU#b_kI=n*j%EeVT1h>V4z)&QZy0_?<0!mpqFcXBjet+p! zafSV&kxjtgg3p4v!g=&1no3jbkq6!y_5NjzCT@a{{>vKSkr8mb9B6AaH#Y_E`a9~j z9s5pysxwjg6f{zgvnxKg&f18czFErj=-~;FN9Aq|!{UOm4 zt>m0+sx$|%iu>5i95C6r-G?$&O5t8Nr&ev6*HZ$6t91xZ`RUJz;&lisLpcMw_3D8k z2kL;E)s9f-`&R5&-hsq9#T($zxgZ*|OD+j+nj3!=thhmwK=fZP2;fH2hU}KN?C(~< zmRo!($b&|znAGXu2+Kw9sY^WF{mN=9T8>|{|JT0=xLZCXdfeWbdzMm0j$j4KMPhAJ z!o&zzzE0>8Ejh97&OVEx>xzQkg_M6GJfDkHqm7Hf?|WP4DEpJ;WD@J77LnVMt=-C3 zBerWHIWnayj?bklX1FX&b5`p05aokf9Nn(1aX&UzHH}+p9a>LGDkI*EUKRfED*w|Z zPx9`zl@z~4wBt2NBXxQV3A1DHWOHk+uRUUS!p_?~KbBSVpeA($Nrr0~T>I;>WgB>_ z-MdnJ#4YO8^Z7w2C8}bZr)tb-C;j8Q)(v9BX}{w^0RJo8ePai zW-q{Wb`G)Dd-Q!{h%CNYyu|>FF#@(oG1sibK<_KPU2}I1F!<}HG{jHI!m1W^018Ay zK7dw$t?1xQRAU6C+h2Inc@kEiu)WI?6v-v0{r@x$p8MybIDEUlWNJrRuC#FzR)@LSXUd zV#1RBjg#=;T@$c;veoBD@UsVml^=2w>XL=`RMM*+sw_1Aa+`!X|2n&Rw{t5EE5Jm4 zUW#*bh(k@8!;H_@T{LgH9Levq9fDolyiq}e@{Yk{s*j4kG>UYJ zzHX02|9j*DGN6Qn1h-=_T4XndRnFIKy3`m?%a$1Qu4X-*7!mn6O%|uTEne)NYZtJ^ zCNeZAGB7AIBqaFhv{yO34$b17WN5@{WU^VwQAnU@Rev;WYHxsVF(ofO3;fm7;3F4u z&&$Riql76G#r#rt-WAjGx$@^=Js52ug&zT#tIk-WLIK%)I&6|}-t-3B3gF<<Cpe*?BdQe$TB+yN24wBZ@C?TY4 zh6#|0RqCG4{^Ej5iwGB22kFl@LvmK@#d#lzY`8<0A1s#-@`OHIX;qB7`CRk@z~%GSe*Wrhb0|RUah^CAQuf_; ze6rngs~^D)3TQ6gzb}s8>nig7PeS#-{S+YR^71kxBST+bzjBkB47^VAF1S&&5&8b= zY*!LrM`j@T4j&&MK2p+-93C7b(A+)sov(F}4>-3TeZ`$^iF($^yx8^UqkZxv=B* zQ2YrKmb#k3JZDp6AA8)lXG&KJ^Al4oo?bh@KYRvh>4l+N_bwDrT@-XI(}_I z9!qFXEDOSSEf${;W!3g-W%yF{|1tI!KyhqcxabV-8XyFBcY*{P+?^o7gA?2(xI=<# zaDqc{cXtc!?(Qyca_m1j@7{W^s;Po1s;6gn_uhMbw$NiJvm=>3ud?BbsJ;e0O!b~4 z3ckP&6Pd0uE&Az#PL0U0cas7-pOQV=?QhTw<~}~(@u60QlOHue{dn=C9eISCJh_V# zgF&?oQ3l*nt_HyQBl}!gFHs7^$$&2nYK$4-x4FIz{)=}%B0%*POuhe-Ssc8SakqjM zPgZX_`odp z0%NIERMhM�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 z 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

rm}0C`+TnSySh?KIg4WG!jv$ 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 H=H>qf^z5Oj literal 0 HcmV?d00001 diff --git a/docs/final-report/STF451_A_ProgRep.doc b/docs/final-report/STF451_A_ProgRep.doc new file mode 100644 index 0000000000000000000000000000000000000000..7f6801b9373e258a510bc07cfdfedf931d484204 GIT binary patch literal 144384 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

TNH$ume;W0nbo# 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 x_^!l} literal 0 HcmV?d00001 diff --git a/docs/final-report/TTCN-3 Conformance Test Suite STF 451 Status Report.ppt b/docs/final-report/TTCN-3 Conformance Test Suite STF 451 Status Report.ppt new file mode 100644 index 0000000000000000000000000000000000000000..b8c385b688d9c5b06f4472a1f781b15f9402a15c GIT binary patch literal 244736 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'l&-H4g3%Zx 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 literal 0 HcmV?d00001 diff --git a/docs/final-report/template/433_A_FinRep.doc b/docs/final-report/template/433_A_FinRep.doc new file mode 100644 index 0000000000000000000000000000000000000000..3b0e0a7e0a07aa0248da01ea7026a3b1f6d9a4fe GIT binary patch literal 267264 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 DCPOhT literal 0 HcmV?d00001 diff --git a/docs/final-report/template/451_A_ProgRep_1.doc b/docs/final-report/template/451_A_ProgRep_1.doc new file mode 100644 index 0000000000000000000000000000000000000000..5d24a6a7460bbcffc92148bbbda51b60e1b37f42 GIT binary patch literal 133120 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 IrxX7F0@D+B^8f$< literal 0 HcmV?d00001 diff --git a/docs/final-report/tps.csv b/docs/final-report/tps.csv new file mode 100644 index 0000000..3273a90 --- /dev/null +++ b/docs/final-report/tps.csv @@ -0,0 +1,1185 @@ +"Test Purpose Id";"Reference";"ICS";"Dependencies";"Summary";"Expected Output";"Notes";"Sorting Order";"Heading";"Clause" +"NegSem_0501_Identifier_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.1";"None";"None";"Ensure that cannot pass a charstring value to an integer variable.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0501_D";"Clause 5.1";"Identifiers and keywords" +"NegSyn_0501_Identifier_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.1";"None";"None";"Ensure that when the IUT loads a module containing anidentifier named with a keyword then the module is rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0501_B";"";"" +"Syn_0501_Identifier_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.1";"None";"None";"Ensure that the IUT handle the identifiers case sensitively.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0501_A";"";"" +"Sem_050201_Scope_of_parameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.1";"None";"None";"Ensure that the IUT correctly handles scope of formal function parameters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050201_C";"Clause 5.2.1";"Scope of formal parameters" +"Sem_050201_Scope_of_parameters_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.1";"None";"None";"Ensure that the IUT correctly handles scope of formal function parameters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050201_C";"";"" +"NegSem_050202_Uniqueness_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"Clause 5.2.2";"Uniqueness of identifiers" +"NegSem_050202_Uniqueness_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"NegSem_050202_Uniqueness_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"050202_D";"";"" +"Sem_050202_Uniqueness_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050202_C";"";"" +"Sem_050202_Uniqueness_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050202_C";"";"" +"Sem_050202_Uniqueness_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2.2";"None";"None";"Ensure that the IUT correctly handles the uniqueness of variable names in its scope";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050202_C";"";"" +"NegSem_0502_Scope_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT correctly handles definitions of local scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0502_D";"Clause 5.2";"Scope rules" +"NegSem_0502_Scope_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT correctly handles definitions of local scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0502_D";"";"" +"NegSem_0502_Scope_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT correctly handles definitions of local scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0502_D";"";"" +"Sem_0502_Scope_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT handle scope hieararchy of component constants.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_C";"";"" +"Sem_0502_Scope_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT handle scope hieararchy with component booleans.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_C";"";"" +"Sem_0502_Scope_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT handles scope hierarchy via functions.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_C";"";"" +"Sem_0502_Scope_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT correctly handles the scope of definitions made in the module part.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_C";"";"" +"Sem_0502_Scope_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT correctly handles definitions of extended component scope";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_C";"";"" +"Syn_0502_Scope_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.2";"None";"None";"Ensure that the IUT supports all the nine scope units.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0502_A";"";"" +"NegSem_0503_Ordering_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that declarations are in the allowed ordering";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0503_D";"Clause 5.3";"Ordering of language elements" +"NegSem_0503_Ordering_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that declarations are in the allowed ordering";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0503_D";"";"" +"NegSem_0503_Ordering_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that declarations are in the allowed ordering";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0503_D";"";"" +"Sem_0503_Ordering_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that allowed orderings of declarations are supported";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0503_C";"";"" +"Sem_0503_Ordering_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that allowed any ordering with component definitions are supported";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0503_C";"";"" +"Sem_0503_Ordering_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.3";"None";"None";"Ensure that allowed orderings of declarations are supported";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0503_C";"";"" +"Sem_05040101_parameters_of_kind_value_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.1";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of module parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040101_C";"Clause 5.4.1.1";"Formal parameters of kind value" +"Sem_05040101_parameters_of_kind_value_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.1";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of module parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040101_C";"";"" +"Sem_05040101_parameters_of_kind_value_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.1";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of module parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040101_C";"";"" +"Sem_05040101_parameters_of_kind_value_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.1";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of module parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040101_C";"";"" +"Sem_05040102_parameters_of_kind_template_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.2";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of parameterized templates.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040102_C";"Clause 5.4.1.2";"Formal parameters of kind template" +"Sem_05040102_parameters_of_kind_template_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.2";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of parameterized templates.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040102_C";"";"" +"Sem_05040103_parameters_of_kind_timer_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.3";"None";"None";"Ensure that the IUT correctly handles parametrization through the use of timer parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040103_C";"Clause 5.4.1.3";"Formal parameters of kind timer" +"Sem_05040104_parameters_of_kind_port_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.1.4";"None";"None";"Ensure that the IUT accepts port parametrization types for functions.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"05040104_C";"Clause 5.4.1.4";"Formal parameters of kind port" +"Sem_050402_actual_parameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.2";"None";"None";"Ensure that the IUT accepts allowed assignments of actual parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050402_C";"Clause 5.4.2";"Actual parameters" +"Sem_050402_actual_parameters_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4.2";"None";"None";"Ensure that the IUT accepts nested assignment of actual parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"050402_C";"";"" +"NegSem_0504_parametrization_incompatibility_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4";"None";"None";"Ensure that the IUT correctly handles received testcase parametrization type incompatibility.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0504_D";"Clause 5.4";"Parameterization" +"NegSyn_0504_forbidden_parametrization_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4";"None";"None";"Ensure that the IUT rejects forbidden module parametrization types.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0504_B";"";"" +"NegSyn_0504_forbidden_parametrization_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.4";"None";"None";"Ensure that the IUT rejects forbidden module parametrization types.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0504_B";"";"" +"Sem_0505_cyclic_definitions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.5";"None";"None";"Ensure that the IUT correctly handles recursive functions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0505_C";"Clause 5.5";"Cyclic definitions" +"Sem_0505_cyclic_definitions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5.5";"None";"None";"Ensure that the IUT correctly handles cyclic imports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0505_C";"";"" +"NegSyn_05_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 5";"None";"None";"Ensure that when the IUT loads a module containing some definitions before the module declaration then the module is rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"05_B";"Clause 5";"Basic language elements" +"NegSyn_060100_SimpleBasicTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign float to integer values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"Clause 6.1.0";"Simple basic types and values" +"NegSyn_060100_SimpleBasicTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign boolean to integer values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"";"" +"NegSyn_060100_SimpleBasicTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign integer to float values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"";"" +"NegSyn_060100_SimpleBasicTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign boolean to float values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"";"" +"NegSyn_060100_SimpleBasicTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign verdicttype to float values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"";"" +"NegSyn_060100_SimpleBasicTypes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign integer to verdicttype values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060100_B";"";"" +"Sem_060100_SimpleBasicTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign and read integer values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060100_C";"";"" +"Sem_060100_SimpleBasicTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign and read large integer values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060100_C";"";"" +"Sem_060100_SimpleBasicTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign and read float values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060100_C";"";"" +"Sem_060100_SimpleBasicTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign and read large float values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060100_C";"";"" +"Sem_060100_SimpleBasicTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign and read verdicts";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060100_C";"";"" +"Syn_060100_SimpleBasicTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign different integer values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Syn_060100_SimpleBasicTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign large integer values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Syn_060100_SimpleBasicTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign different float values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Syn_060100_SimpleBasicTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Assign small and large float values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Syn_060100_SimpleBasicTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Accept float mantisa for float values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Syn_060100_SimpleBasicTypes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.0";"None";"None";"Accept all verdict values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060100_A";"";"" +"Sem_06010101_AccessStringElements_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access bitstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"Clause 6.1.1.1";"Accessing individual string elements" +"Sem_06010101_AccessStringElements_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access octetstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access hexstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access bitstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access hexstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access octetstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access charstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"Sem_06010101_AccessStringElements_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1.1";"None";"None";"Access charstring elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010101_C";"";"" +"NegSyn_060101_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign invalid bitstring value";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"Clause 6.1.1";"Basic string types and values" +"NegSyn_060101_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign string to bitstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign octetstring to bitstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign invalid hexstring value";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign string to hexstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign octetstring to hexstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign invalid hexstring value";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign string to octetstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign hexstring to octetstring values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"NegSyn_060101_TopLevel_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign invalid hexstring value";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060101_B";"";"" +"Sem_060101_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read bitstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Sem_060101_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read hexstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Sem_060101_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read octetstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Sem_060101_TopLevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read charstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Sem_060101_TopLevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read universal charstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Sem_060101_TopLevel_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign and read universal charstring";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060101_C";"";"" +"Syn_060101_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign different bitstring values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060101_A";"";"" +"Syn_060101_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign different hexstring values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060101_A";"";"" +"Syn_060101_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.1";"None";"None";"Assign different octetstring values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060101_A";"";"" +"NegSem_06010201_ListOfValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted bitstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"Clause 6.1.2.1";"Lists of values" +"NegSem_06010201_ListOfValues_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted hexstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"";"" +"NegSem_06010201_ListOfValues_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted octetstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"";"" +"NegSem_06010201_ListOfValues_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"";"" +"NegSem_06010201_ListOfValues_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted integer.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"";"" +"NegSem_06010201_ListOfValues_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign values to restricted float.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010201_D";"";"" +"Sem_06010201_ListOfValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.1";"None";"None";"Assign invalid values to restricted bitstring.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010201_C";"";"" +"NegSem_06010202_ListOfTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.2";"None";"None";"Assign invalid values to list of types restricted bitstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010202_D";"Clause 6.1.2.2";"Lists of types" +"Sem_06010202_ListOfTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.2";"None";"None";"Assign values to list of types restricted bitstring.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010202_C";"";"" +"NegSem_06010203_Ranges_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to restricted integer.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"Clause 6.1.2.3";"Ranges" +"NegSem_06010203_Ranges_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to restricted integer.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assure that not_a_number is not allowed in float range subtyping.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to restricted integer with exclusive bounds.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to restricted integer with exclusive bounds.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign range to boolean not permitted.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to restricted float.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to range restricted float.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid values to range excluded restricted float.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained universal charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained universal charstring with mixed bounds.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign invalid value to range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Invalid value infinity for range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"NegSem_06010203_Ranges_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Invalid value -infinity for range constrained charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010203_D";"";"" +"Sem_06010203_Ranges_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted integer.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to infinity range restricted integer.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted integer with exclusive bounds.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted cahrstring with inclusive bounds.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted cahrstring with exclusive bounds.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted cahrstring with mixed bounds.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted universal charstring.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"Sem_06010203_Ranges_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.3";"None";"None";"Assign values to range restricted universal charstring with mixed bounds.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010203_C";"";"" +"NegSem_06010204_StringLenghtRestrict_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.4";"None";"None";"Assign invalid values to length restricted bitstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010204_D";"Clause 6.1.2.4";"String length restrictions" +"NegSem_06010204_StringLenghtRestrict_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.4";"None";"None";"Assign invalid values to length restricted bitstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010204_D";"";"" +"Sem_06010204_StringLenghtRestrict_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.4";"None";"None";"Assign values to list of types restricted bitstring.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010204_C";"";"" +"NegSem_06010205_StringPattern_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.5";"None";"None";"Assign invalid values to pattern restricted character strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06010205_D";"Clause 6.1.2.5";"Pattern subtyping of character string types" +"Sem_06010205_StringPattern_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.5";"None";"None";"Assign values to pattern restricted character strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010205_C";"";"" +"Sem_06010205_StringPattern_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.5";"None";"None";"Assign values to pattern restricted character strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06010205_C";"";"" +"NegSem_0601020601_MixingSubtype_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.1";"None";"None";"Assign invalid values to mixed restricted floats.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020601_D";"Clause 6.1.2.6.1";"Mixing patterns, lists and ranges" +"NegSem_0601020601_MixingSubtype_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.1";"None";"None";"Assign invalid values to mixed restricted integers.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020601_D";"";"" +"Sem_0601020601_MixingSubtype_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.1";"None";"None";"Assign values to mixed restricted floats.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020601_C";"";"" +"Sem_0601020601_MixingSubtype_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.1";"None";"None";"Assign values to mixed restricted integers.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020601_C";"";"" +"NegSem_0601020602_StringMixing_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"Clause 6.1.2.6.2";"Using length restriction with other constraints" +"NegSem_0601020602_StringMixing_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"";"" +"NegSem_0601020602_StringMixing_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"";"" +"NegSem_0601020602_StringMixing_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted bit strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"";"" +"NegSem_0601020602_StringMixing_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted hex strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"";"" +"NegSem_0601020602_StringMixing_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign invalid values to mixed restricted octet strings.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0601020602_D";"";"" +"Sem_0601020602_StringMixing_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"Sem_0601020602_StringMixing_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"Sem_0601020602_StringMixing_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted character strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"Sem_0601020602_StringMixing_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted bit strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"Sem_0601020602_StringMixing_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted hex strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"Sem_0601020602_StringMixing_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.1.2.6.2";"None";"None";"Assign values to mixed restricted octet strings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0601020602_C";"";"" +"NegSem_060201_RecordTypeValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The dot notation used in record type definitions is correctly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060201_D";"Clause 6.2.1";"Record type and values" +"Sem_060201_RecordTypeValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The dot notation used in record type definitions is correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060201_C";"";"" +"Sem_060201_RecordTypeValues_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The dot notation used in record type definitions is correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060201_C";"";"" +"Sem_060201_RecordTypeValues_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The dot notation used in record type definitions is correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060201_C";"";"" +"Sem_060201_RecordTypeValues_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The dot notation used in record type definitions is correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060201_C";"";"" +"Syn_060201_RecordTypeValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"The element identifiers are local to the record and shall be unique within the record (but do not have to be globally unique).";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060201_A";"";"" +"Syn_060201_RecordTypeValues_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.1";"None";"None";"Ensure that the IUT correctly handles empty record definitions.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060201_A";"";"" +"NegSem_060203_records_and_sets_of_single_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.3.2";"None";"None";"ensure that the inner type referencing is correctly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060203_D";"Clause 6.2.3.2";"Referencing elements of record of and set of types" +"NegSem_060203_records_and_sets_of_single_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.3.2";"None";"None";"ensure that the inner type referencing is correctly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060203_D";"";"" +"Sem_060203_records_and_sets_of_single_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.3.2";"None";"None";"ensure that the inner type referencing is correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060203_C";"";"" +"NegSem_060209_CommunicationPortTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that restriction of port definitions are appropriately handles";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060209_D";"Clause 6.2.9";"Communication port types" +"NegSem_060209_CommunicationPortTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that restriction of port definitions are appropriately handles";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060209_D";"";"" +"NegSem_060209_CommunicationPortTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that restriction of port definitions are appropriately handles";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060209_D";"";"" +"Sem_060209_CommunicationPortTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that map param statements are allowed in testcase block";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060209_C";"";"" +"Sem_060209_CommunicationPortTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that unmap param statements are allowed in testcase block";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060209_C";"";"" +"Sem_060209_CommunicationPortTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that map and unmap param and local port address are allowed in a testcase block";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060209_C";"";"" +"Sem_060209_CommunicationPortTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that map and unmap param and local port address are allowed in a testcase block";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060209_C";"";"" +"Syn_060209_CommunicationPortTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that message-based ports are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that message-based ports with address are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that message-based ports are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that a address is allowed inside port definition";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that map param is accepted by the port definition.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that unmap param is accepted by the port definition.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"Syn_060209_CommunicationPortTypes_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.9";"None";"None";"Ensure that complex port definition are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"060209_A";"";"" +"NegSem_060212_AddressingEntitiesInsideSut_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.12";"None";"None";"Ensure right type checking for address types in ports";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060212_D";"Clause 6.2.12";"Addressing entities inside the SUT" +"Sem_060212_AddressingEntitiesInsideSut_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.12";"None";"None";"Ensure null assignment is accepted for addresses";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060212_C";"";"" +"Sem_060212_AddressingEntitiesInsideSut_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.12";"None";"None";"Ensure that the right port address is used";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060212_C";"";"" +"NegSem_06021301_LengthSubtyping_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021301_D";"Clause 6.2.13.1";"null" +"NegSem_06021301_LengthSubtyping_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021301_D";"";"" +"NegSem_06021301_LengthSubtyping_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021301_D";"";"" +"NegSem_06021301_LengthSubtyping_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021301_D";"";"" +"Syn_06021301_LengthSubtyping_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"06021301_A";"";"" +"Syn_06021301_LengthSubtyping_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.1";"None";"None";"The length subtyping check for 'record of' or 'set of' types";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"06021301_A";"";"" +"NegSem_06021302_ListSubtyping_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.2";"None";"None";"ensure that list subtyping check for record types is properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021302_D";"Clause 6.2.13.2";"null" +"NegSem_06021302_ListSubtyping_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.2";"None";"None";"ensure that list subtyping check for record types is properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"06021302_D";"";"" +"Sem_06021302_ListSubtyping_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.2";"None";"None";"ensure that list subtyping check for record types is properly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06021302_C";"";"" +"Sem_06021302_ListSubtyping_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.2";"None";"None";"ensure that list subtyping check for record types is properly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06021302_C";"";"" +"Sem_06021302_ListSubtyping_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2.13.2";"None";"None";"ensure that list subtyping check for record types is properly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"06021302_C";"";"" +"NegSem_0602_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Ensure that assignments with "implicit omit" attribute are correctly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_D";"Clause 6.2";"Structured types and values" +"NegSem_0602_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Ensure that assignments with "implicit omit" attribute are correctly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_D";"";"" +"NegSyn_0602_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Invalid recursive union type definition causing an error";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_B";"";"" +"NegSyn_0602_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Invalid recursive record type definition causing an error";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_B";"";"" +"NegSyn_0602_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Combined value list and assignment notation not allowed in the same (immediate) context.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_B";"";"" +"NegSyn_0602_TopLevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"The omit keyword shall not be used for mandatory fields.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_B";"";"" +"NegSyn_0602_TopLevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"The omit keyword shall not be used for mandatory fields.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0602_B";"";"" +"Sem_0602_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Ensure that assignments with "implicit omit" attribute are correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0602_C";"";"" +"Sem_0602_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Ensure that assignments with "implicit omit" attribute are correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0602_C";"";"" +"Sem_0602_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Ensure that assignments with "implicit omit" attribute are correctly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0602_C";"";"" +"Syn_0602_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Valid recursive union type definition";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0602_A";"";"" +"Syn_0602_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Valid recursive record type definition";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0602_A";"";"" +"Syn_0602_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Valid recursive record type definition";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0602_A";"";"" +"Syn_0602_TopLevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"constant definition of a record type.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0602_A";"";"" +"Syn_0602_TopLevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.2";"None";"None";"Fields not mentioned are implicitly left unspecified.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0602_A";"";"" +"NegSem_060301_non_structured_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"Clause 6.3.1";"Type compatibility of non-structured types" +"NegSem_060301_non_structured_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from incompatible type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"NegSem_060301_non_structured_types_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060301_D";"";"" +"Sem_060301_non_structured_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060301_C";"";"" +"Sem_060301_non_structured_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible size restrictions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060301_C";"";"" +"Sem_060301_non_structured_types_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060301_C";"";"" +"Sem_060301_non_structured_types_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.1";"None";"None";"Ensure that the IUT correctly handles assignments from compatible type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060301_C";"";"" +"NegSem_060302_structured_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2.1";"None";"None";"Reject assignment of other enumerated types since they are only compatible to synonym types";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"Clause 6.3.2.1";"Type compatibility of enumerated types" +"NegSem_060302_structured_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"Clause 6.3.2";"Type compatibility of structured types" +"NegSem_060302_structured_types_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from incompatible types or type ranges";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments from structures having incompatible anytypes";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments having mismatch between undefined and omitted elements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments having mismatch between undefined and omitted elements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments between incompatible structures";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments between incompatible structures";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments between incompatible structures";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments between incompatible structures";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT rejects assignments between incompatible structures";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"NegSem_060302_structured_types_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and lengths";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060302_D";"";"" +"Sem_060302_structured_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"Sem_060302_structured_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and lengths";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"Sem_060302_structured_types_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"Sem_060302_structured_types_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible anytypes";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"Sem_060302_structured_types_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and type ranges";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"Sem_060302_structured_types_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.2";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible types and lengths";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060302_C";"";"" +"NegSem_060303_component_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.3";"None";"None";"Ensure that the IUT correctly handles component incompatibility due to differing list of constant definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060303_D";"Clause 6.3.3";"Type compatibility of component types" +"NegSem_060303_component_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.3";"None";"None";"Ensure that the IUT correctly handles component incompatibility due to differing constant types having same name";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"060303_D";"";"" +"Sem_060303_component_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.3";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060303_C";"";"" +"Sem_060303_component_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 6.3.3";"None";"None";"Ensure that the IUT correctly handles assignments from structures having compatible components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"060303_C";"";"" +"Sem_070101_ArithmeticOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition of two integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"Clause 7.1.1";"Arithmetic operators" +"Sem_070101_ArithmeticOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition of multiple integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition of two integer variables is evaluated correctly when the expression contains a negative value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the substraction of two integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the substraction of multiple integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the multiplication of two integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the multiplication of multiple integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the division of two integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the division of multiple integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the modulo operator on integer variables is evaluated correctly when the remainder is zero.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the modulo operator on integer variables is evaluated correctly when the integer value is smaller than the modulo value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the modulo operator on integer variables is evaluated correctly when the integer value greater than the modulo value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the modulo operator on integer variables is evaluated correctly when two consecutive modulo operators are applied.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the modulo operator on integer variables is evaluated correctly when the operand is a negative integer.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the remainder operator on integer variables is evaluated correctly when the operand is a negative integer.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the application of the remainder operator on integer variables is evaluated correctly when the operand is a negative integer.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the consecutive application of the remainder operator and the modulo operator on integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that operator combinations and the modulo operator on integer variables is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition operator works on float variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_020";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the substraction operator works on float variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_021";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the multiplication operator works on float variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_022";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the division operator works on float variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Sem_070101_ArithmeticOperators_023";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the combination of different operators works on float variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070101_C";"";"" +"Syn_070101_ArithmeticOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition of two integers in a constant is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the substraction of two integers in a constant is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the multiplication of two integers in a constant is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the division of two integers in a constant is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the modulo operator on two integers is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the remainder operator on two integers is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that operator combinations on integers is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the addition operator on float constants is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the substraction operator on float constants is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the multiplication operator on float constants is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that the division operator on float constants is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Syn_070101_ArithmeticOperators_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.1";"None";"None";"Ensure that a combination of operators on float constants is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"070101_A";"";"" +"Sem_070102_ListOperator_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on bitstrings is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"Clause 7.1.2";"List operator" +"Sem_070102_ListOperator_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on charstrings is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"";"" +"Sem_070102_ListOperator_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on record of is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"";"" +"Sem_070102_ListOperator_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on set of is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"";"" +"Sem_070102_ListOperator_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on arrays is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"";"" +"Sem_070102_ListOperator_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.2";"None";"None";"Ensure that the list operator on record of is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070102_C";"";"" +"NegSem_070103_RelationalOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"070103_D";"Clause 7.1.3";"Relational operators" +"Sem_070103_RelationalOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on integers is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on floats is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on enumerations is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than operator on integers is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than operator on floats is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than operator on enumerations is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on integers is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on integers is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on floats is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on floats is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on enumerations is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on enumerations is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than operator on integers is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than operator on floats is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than operator on enumerations is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than or equal to operator on integers is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than or equal to operator on integers is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than or equal to operator on floats is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than or equal to operator on floats is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_020";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the less than or equal to operator on enumerations is evaluated correctly with differing values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_021";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the greater than or equal to operator on enumerations is evaluated correctly with equal values.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_022";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the not equals operator on integers is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_023";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the not equals operator on floats is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_024";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the not equals operator on enumerations is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_025";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_026";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_027";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_028";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_029";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_030";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_031";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_032";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_033";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070103_RelationalOperators_034";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.3";"None";"None";"Ensure that the equals operator on records is evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070103_C";"";"" +"Sem_070104_LogicalOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.4";"None";"None";"Ensure that the boolean operator supports negation.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070104_C";"Clause 7.1.4";"Logical operators" +"Sem_070104_LogicalOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.4";"None";"None";"Ensure that the the and operator with true and false as operands work on boolean variables.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070104_C";"";"" +"Sem_070105_BitwiseOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.5";"None";"None";"Ensure that the bitwise negation operator works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070105_C";"Clause 7.1.5";"Bitwise operators" +"Sem_070105_BitwiseOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.5";"None";"None";"Ensure that the bitwise negation operator works as expected on hexstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070105_C";"";"" +"Sem_070106_ShiftOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.6";"None";"None";"Ensure that the shift left operator works as expected on bitstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070106_C";"Clause 7.1.6";"Shift operators" +"Sem_070106_ShiftOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.6";"None";"None";"Ensure that the shift left operator works as expected on hexstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070106_C";"";"" +"Sem_070106_ShiftOperators_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.6";"None";"None";"Ensure that the shift right operator works as expected on bitstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070106_C";"";"" +"Sem_070106_ShiftOperators_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.6";"None";"None";"Ensure that the shift right operator works as expected on hexstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070106_C";"";"" +"Sem_070107_RotateOperators_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.7";"None";"None";"Ensure that the rotate left operator works as expected on bitstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070107_C";"Clause 7.1.7";"Rotate operators" +"Sem_070107_RotateOperators_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.7";"None";"None";"Ensure that the rotate left operator works as expected on hexstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070107_C";"";"" +"Sem_070107_RotateOperators_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.7";"None";"None";"Ensure that the rotate right operator works as expected on bitstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070107_C";"";"" +"Sem_070107_RotateOperators_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.1.7";"None";"None";"Ensure that the rotate right operator works as expected on hexstrings.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"070107_C";"";"" +"Sem_0702_FieldReferencesAndListElements_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.2";"None";"None";"Ensure that the IUT correctly handles field referencing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0702_C";"Clause 7.2";"Field references and list elements" +"Sem_0702_FieldReferencesAndListElements_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 7.2";"None";"None";"Ensure that the IUT correctly handles field referencing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0702_C";"";"" +"NegSyn_0801_DefinitionOfAModule_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with multiple language specifications is rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0801_B";"Clause 8.1";"Definition of a module" +"Syn_0801_DefinitionOfAModule_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a "plain" module definition is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Syn_0801_DefinitionOfAModule_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with language specification is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Syn_0801_DefinitionOfAModule_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with language and package is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Syn_0801_DefinitionOfAModule_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with package and without language is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Syn_0801_DefinitionOfAModule_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with ed4.3.1 language and package is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Syn_0801_DefinitionOfAModule_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.1";"None";"None";"Ensure that a module definition with ed4.4.1 language and package is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0801_A";"";"" +"Sem_080201_ModuleParameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.1";"None";"None";"Ensure that a reference to plain module parameter with a default value delivers the default value unless it is overwritten.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080201_C";"Clause 8.2.1";"Module parameters" +"Syn_080201_ModuleParameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.1";"None";"None";"Ensure that plain module parameters are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080201_A";"";"" +"Syn_080201_ModuleParameters_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.1";"None";"None";"Ensure that plain module parameters with default values are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080201_A";"";"" +"Syn_080201_ModuleParameters_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.1";"None";"None";"Ensure that plain module parameters with default values and visibility modifiers are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080201_A";"";"" +"Syn_080202_GroupOfDefinitions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.2";"None";"None";"Ensure that a definition within a group is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080202_A";"Clause 8.2.2";"Groups of definitions" +"Syn_080202_GroupOfDefinitions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.2";"None";"None";"Ensure that a definition within a nested group is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080202_A";"";"" +"Syn_080202_GroupOfDefinitions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.2";"None";"None";"Ensure that a definition within a group with public visibility modifier is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080202_A";"";"" +"Syn_080202_GroupOfDefinitions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.2";"None";"None";"Ensure that a definition within a group with public visibility modifier and attributes is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"080202_A";"";"" +"NegSem_08020301_GeneralFormatOfImport_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.1";"None";"None";"Ensure that name handling of imported enumerations is properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020301_D";"Clause 8.2.3.1";"General format of import" +"NegSem_08020301_GeneralFormatOfImport_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.1";"None";"None";"Ensure that name handling of imported enumerations is properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020301_D";"";"" +"NegSem_08020301_GeneralFormatOfImport_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that transitive import rules are properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020301_D";"Clause 8.2.3.4";"Importing definitions of the same kind" +"NegSem_08020301_GeneralFormatOfImport_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that transitive import rules are properly handled";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020301_D";"";"" +"Sem_08020301_GeneralFormatOfImport_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that transitive imports are properly handled";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020301_C";"";"" +"Sem_08020301_GeneralFormatOfImport_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that enumerated type definitions are automatically imported when needed";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020301_C";"";"" +"Syn_08020301_GeneralFormatOfImport_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.1";"None";"None";"Ensure that import all is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"08020301_A";"Clause 8.2.3.1";"General format of import" +"Syn_08020301_GeneralFormatOfImport_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.1";"None";"None";"Ensure that import of specific types is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"08020301_A";"";"" +"Sem_08020302_ImportingSingleDefinitions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.2";"None";"None";"Ensure that the value of an explicitly imported constant can be read and carries the same value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020302_C";"Clause 8.2.3.2";"Importing single definitions" +"Sem_08020302_ImportingSingleDefinitions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.2";"None";"None";"Ensure that the value of an explicitly imported template can be read and carries the same value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020302_C";"";"" +"NegSem_08020303_ImportingGroups_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.3";"None";"None";"Ensure that constants listed as exceptions in imported groups are not accessible.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020303_D";"Clause 8.2.3.3";"Importing groups" +"Sem_08020303_ImportingGroups_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.3";"None";"None";"Ensure that a const defined in a group can be accessed if the group is imported.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020303_C";"";"" +"Sem_08020303_ImportingGroups_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.3";"None";"None";"Ensure that the IUT properly handles 'except' clause in group import definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020303_C";"";"" +"Sem_08020303_ImportingGroups_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.3";"None";"None";"but that it is in fact a shortcut notation for explicit imports.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020303_C";"";"" +"Sem_08020304_ImportingDefinitionsOfTheSameKind_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that an import of all constants allows access to a sample constant.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020304_C";"Clause 8.2.3.4";"Importing definitions of the same kind" +"Sem_08020304_ImportingDefinitionsOfTheSameKind_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that a previously valid const import is not removed by an import covering the same definition with an except.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020304_C";"";"" +"Sem_08020304_ImportingDefinitionsOfTheSameKind_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.4";"None";"None";"Ensure that a previously valid const import is not removed by a second import statement excluding the same definition.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020304_C";"";"" +"NegSem_08020305_ImportingAllDefinitionsOfAModule_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.5";"None";"None";"Ensure that the constant is not visible after import with except.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020305_D";"Clause 8.2.3.5";"Importing all definitions of a module" +"Sem_08020305_ImportingAllDefinitionsOfAModule_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.5";"None";"None";"Ensure that the constant is be visible after multiple imports.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020305_C";"";"" +"Sem_08020305_ImportingAllDefinitionsOfAModule_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.5";"None";"None";"Ensure that the constant is be visible after multiple imports.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020305_C";"";"" +"Sem_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.6";"None";"None";"Ensure that it is possible to import from previous language versions.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"08020306_C";"Clause 8.2.3.6";"Import definitions from other TTCN-3 editions and from non-TTCN-3 modules" +"Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.6";"None";"None";"Ensure that imports work with language references when importing definitions of the same kinds (in this case constants) is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"08020306_A";"";"" +"Syn_08020306_ImportingDefinitionsFromOtherT3EditionsAndFromNonT3Modules_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.6";"None";"None";"Ensure that imports work with language references when importing all definitions of another module is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"08020306_A";"";"" +"NegSem_08020307_ImportingOfImportStatementsFromT3Modules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.7";"None";"None";"Ensure that the import of import statements works for import all.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020307_D";"Clause 8.2.3.7";"Importing of import statements from TTCN-3 modules" +"NegSem_08020307_ImportingOfImportStatementsFromT3Modules_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.7";"None";"None";"Ensure that the import of import statements works for import all.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020307_D";"";"" +"Sem_08020307_ImportingOfImportStatementsFromT3Modules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.7";"None";"None";"Ensure that the import of import statements works for import all.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"08020307_C";"";"" +"NegSem_08020308_ImportingOfImportStatementsFromT3Modules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.3.8";"None";"None";"Ensure that imports referring to future TTCN-3 versions are rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"08020308_D";"Clause 8.2.3.8";"Compatibility of language specifications of imports" +"NegSem_080204_DefinitionOfFriendModules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.4";"None";"None";"Ensure that friend visibility works for a sample constant.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080204_D";"Clause 8.2.4";"Definition of friend modules" +"NegSem_080204_DefinitionOfFriendModules_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.4";"None";"None";"Ensure that private definitions are not made visible by friend declarations (for a constant sample definition).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080204_D";"";"" +"Sem_080204_DefinitionOfFriendModules_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.4";"None";"None";"Ensure that friend visibility works for a sample constant.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080204_C";"";"" +"NegSem_080205_VisibilityOfDefinitions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that private definition (in this case a sample constant) is not visible using a normal import.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080205_D";"Clause 8.2.5";"Visibility of definitions" +"NegSem_080205_VisibilityOfDefinitions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that private definition (in this case a sample constant) is not visible using an import of a friend module.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080205_D";"";"" +"NegSem_080205_VisibilityOfDefinitions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that friend definition (in this case a sample constant) is not visible using a group import of a non-friend module.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080205_D";"";"" +"NegSem_080205_VisibilityOfDefinitions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that private definition (in this case a sample constant) is not visible using a group import of a non-friend module.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080205_D";"";"" +"NegSem_080205_VisibilityOfDefinitions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that private definition (in this case a sample constant) is not visible using a group import of a friend module.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"080205_D";"";"" +"Sem_080205_VisibilityOfDefinitions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080205_C";"";"" +"Sem_080205_VisibilityOfDefinitions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported by a friend module.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080205_C";"";"" +"Sem_080205_VisibilityOfDefinitions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported through a group.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080205_C";"";"" +"Sem_080205_VisibilityOfDefinitions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that explicitly defined public definitions (in this case a sample constant) are visible when imported through a group of a friend module.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080205_C";"";"" +"Sem_080205_VisibilityOfDefinitions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2.5";"None";"None";"Ensure that friend definitions (in this case a sample constant) are visible when imported through a group of a friend module.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"080205_C";"";"" +"Syn_0802_ModuleDefinitionsPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2";"None";"None";"Ensure that a TypeDef module definition with public visibility is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0802_A";"Clause 8.2";"Module definitions part" +"Syn_0802_ModuleDefinitionsPart_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.2";"None";"None";"Ensure that a TypeDef module definition with private visibility is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0802_A";"";"" +"NegSyn_0803_ModuleControlPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.3";"None";"None";"Ensure that there is not more than one control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0803_B";"Clause 8.3";"Module control part" +"Sem_0803_ModuleControlPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.3";"None";"None";"Ensure that the verdict returned from a test case to the control-part does not influence the execution of a second test case. The result of the last test case execution corresponds to the overall test verdict.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0803_C";"";"" +"Syn_0803_ModuleControlPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.3";"None";"None";"Ensure that the module control is able to accept execute statements.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0803_A";"";"" +"Syn_0803_ModuleControlPart_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.3";"None";"None";"Ensure that the module control part with a few commonly used stateents is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0803_A";"";"" +"Syn_0803_ModuleControlPart_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 8.3";"None";"None";"Ensure that an empty control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0803_A";"";"" +"NegSem_0901_Communication_ports_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9.1";"None";"None";"Ensure that the compiler handles the two port assoc. with error";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0901_D";"Clause 9.1";"Communication ports" +"NegSem_0901_Communication_ports_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT correctly handles loopback port connection to another port";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0901_D";"Clause 9";"Port types, component types and test configurations" +"NegSem_0901_Communication_ports_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT correctly handles port connections";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0901_D";"";"" +"Sem_0901_Communication_ports_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT correctly handles loopback message";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0901_C";"";"" +"Sem_0901_Communication_ports_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the the IUT receives the message sent by mycompA";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0901_C";"";"" +"Sem_0901_Communication_ports_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the the IUT receives the message sent by mycompB and mycompC";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0901_C";"";"" +"Sem_0901_Communication_ports_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT correctly handles message exch. between ports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0901_C";"";"" +"Sem_0901_Communication_ports_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the the IUT receives the message sent by mycompA";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0901_C";"";"" +"NegSem_0902_Communication_ports_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT correctly handles the assoc. of two port to the same system interface";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0902_D";"";"" +"NegSem_0902_Communication_ports_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the mycomp is connected to two system interface port.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0902_D";"";"" +"NegSem_0902_Communication_ports_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the two system interf. port cannot connect";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0902_D";"";"" +"NegSem_0902_Communication_ports_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the a connected port cannot be mapped";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"0902_D";"";"" +"Sem_0902_Communication_ports_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUT port correctly mapped with a system interface";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0902_C";"";"" +"Sem_0902_Communication_ports_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that the IUTs two ports are mapped correctly to system interfaces";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"0902_C";"";"" +"Syn_0902_Communication_ports_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that two component can be mapped by one system interface";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"0902_A";"";"" +"NegSem_10_Constants_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Assign rnd to constant used in type, not allowed since constant expressions used in types have to be known at compile-time.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"10_D";"Clause 10";"Declaring constants" +"Sem_10_Constants_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Assign and read constants";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"10_C";"";"" +"Sem_10_Constants_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Assign and read constants values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"10_C";"";"" +"Syn_10_Constants_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Create constants";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"10_A";"";"" +"Syn_10_Constants_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Assign default constants values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"10_A";"";"" +"Syn_10_Constants_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Assign component constants values";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"10_A";"";"" +"Syn_10_Constants_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 10";"None";"None";"Define constants in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"10_A";"";"" +"NegSem_1101_ValueVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Variables should be assigned only by values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1101_D";"Clause 11.1";"Value variables" +"NegSem_1101_ValueVars_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Ensure that partially initialized variables are evaluated correctly.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1101_D";"";"" +"NegSyn_1101_ValueVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Define variables in module scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1101_B";"";"" +"Sem_1101_ValueVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Define variables in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1101_C";"";"" +"Sem_1101_ValueVars_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Define variables in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1101_C";"";"" +"Sem_1101_ValueVars_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Read and write variables";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1101_C";"";"" +"Sem_1101_ValueVars_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Ensure that partially initialized variables are evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1101_C";"";"" +"Sem_1101_ValueVars_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Ensure that partially initialized variables are evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1101_C";"";"" +"Syn_1101_ValueVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.1";"None";"None";"Define variables in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1101_A";"";"" +"NegSem_1102_TemplateVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Template variables should be assigned with unitialized variables";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1102_D";"Clause 11.2";"Template variables" +"NegSem_1102_TemplateVars_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Ensure that partially initialized templates are evaluated correctly.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1102_D";"";"" +"NegSyn_1102_TemplateVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Define template variables in module scope";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1102_B";"";"" +"Sem_1102_TemplateVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Define variables in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1102_C";"";"" +"Sem_1102_TemplateVars_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Ensure that partially initialized templates are evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1102_C";"";"" +"Sem_1102_TemplateVars_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Ensure that partially initialized templates are evaluated correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1102_C";"";"" +"Syn_1102_TemplateVars_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 11.2";"None";"None";"Define template variables in different scopes";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1102_A";"";"" +"NegSem_12_toplevel_timer_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can not be initialized with negative duration";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"Clause 12";"Declaring timers" +"NegSem_12_toplevel_timer_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer in array can not be initialized with negative duration";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure uninitialized timer can't be started";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure uninitialized timer in array can't be started";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure uninitialized timer in array can't be started";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax - reject single timer instance initialized with array";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax -- reject array initialization with wrong number of initializers";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSem_12_toplevel_timer_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax -- reject array of timers initizlized with a single float value";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_D";"";"" +"NegSyn_12_toplevel_timer_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can`t be used in module control parts when declared in components";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"";"" +"NegSyn_12_toplevel_timer_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"";"" +"NegSyn_12_toplevel_timer_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"";"" +"NegSyn_12_toplevel_timer_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 04";"None";"None";"Ensure timer declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"Clause 04";"null" +"NegSyn_12_toplevel_timer_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"Clause 12";"Declaring timers" +"NegSyn_12_toplevel_timer_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer array declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"";"" +"NegSyn_12_toplevel_timer_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer array declaration syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"12_B";"";"" +"Sem_12_toplevel_timer_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in module control parts";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in altsteps";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in functions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in test cases";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer`s elapsed time is plausible";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in components but used in test cases";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in components but used in functions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Sem_12_toplevel_timer_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer can be declared in components but used in altsteps";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"12_C";"";"" +"Syn_12_toplevel_timer_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure non-initialized timer declaration syntax";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Syn_12_toplevel_timer_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer array declaration syntax";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Syn_12_toplevel_timer_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure definition of a list of timers is allowed as a single declaration";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Syn_12_toplevel_timer_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer array initialization syntax";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Syn_12_toplevel_timer_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration with expression";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Syn_12_toplevel_timer_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure timer declaration with expression";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"12_A";"";"" +"Sem_13_declaring_msg_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 12";"None";"None";"Ensure received messages can be a combination of value and matching mechanism";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure received messages can`t be matched with wrong template";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"Clause 24";"Test verdict operations" +"Sem_13_declaring_msg_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared by in-line templates";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared by global templates";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared and passed via template variables";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared and passed via inline template";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared and passed via parameter";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared and passed via template parameter";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_declaring_msg_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure instances of messages can be declared and passed via template parameter";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'record' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"Clause 13";"Declaring messages" +"Sem_13_toplevel_declaring_msg_various_types_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'record of' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'enum' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'set' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'union' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'bitstring' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'boolean' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'charstring' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'float' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'hexstring' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'integer' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'octetstring' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'universal charstring' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"Sem_13_toplevel_declaring_msg_various_types_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 13";"None";"None";"Port with type anytype can send and receive messages of any basic or structured type: 'verdicttype' type.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"13_C";"";"" +"NegSem_1400_procedure_signatures_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that nonblocking signature contains in parameter";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1400_D";"Clause 22.3.1";"The call operation" +"NegSem_1400_procedure_signatures_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 14";"None";"None";"Ensure that blocking calls needs response or exception handling";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1400_D";"Clause 14";"Declaring procedure signatures" +"Sem_1400_procedure_signatures_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 14";"None";"None";"Ensure that the IUT calls signature exception";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1400_C";"";"" +"Sem_1400_procedure_signatures_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 14";"None";"None";"Ensure that with noblock signature the IUT can raise exception";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1400_C";"";"" +"Sem_1400_procedure_signatures_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 14";"None";"None";"Ensure that non blocking signatures can raise exception";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1400_C";"";"" +"Sem_1400_procedure_signatures_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 14";"None";"None";"Ensure that multiple calls can be send without ack using non-blocking signature";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1400_C";"";"" +"Syn_1501_DeclaringMessageTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that a simple record-based message template can be defined.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"Clause 15.1";"Declaring message templates" +"Syn_1501_DeclaringMessageTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that a simple record-based message template with a wildcard ? is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"";"" +"Syn_1501_DeclaringMessageTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that a simple record-based message template can be defined with a pattern in a charstring field.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"";"" +"Syn_1501_DeclaringMessageTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that a primitive type template can be defined with a ? wildcard.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"";"" +"Syn_1501_DeclaringMessageTemplates_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that a primitive type template can be defined with a one-of notation.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"";"" +"Syn_1501_DeclaringMessageTemplates_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.1";"None";"None";"Ensure that all port operations are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1501_A";"";"" +"Sem_1502_DeclaringSignatureTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Test in-line templates for accepting procedure replies.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1502_C";"Clause 15.2";"Declaring signature templates" +"Sem_1502_DeclaringSignatureTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Test in-line templates for accepting procedure replies.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1502_C";"";"" +"Sem_1502_DeclaringSignatureTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Test in-line templates for accepting procedure replies.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1502_C";"";"" +"Syn_1502_DeclaringSignatureTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Ensure that signature templates with explicit values are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1502_A";"";"" +"Syn_1502_DeclaringSignatureTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Ensure that signature templates with wildcards are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1502_A";"";"" +"Syn_1502_DeclaringSignatureTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Ensure that the basic operations call and getreply are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1502_A";"";"" +"Syn_1502_DeclaringSignatureTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.2";"None";"None";"Ensure that the raise and catch operations are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1502_A";"";"" +"Sem_1503_GlobalAndLocalTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a template values can be accessed with the dot notation as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"Clause 15.3";"Global and local templates" +"Sem_1503_GlobalAndLocalTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a template actual parameter is passed through correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"";"" +"Sem_1503_GlobalAndLocalTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a send operation with actual parameters of a global parameterized template is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"";"" +"Sem_1503_GlobalAndLocalTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a parameterized local template in a test case is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"";"" +"Sem_1503_GlobalAndLocalTemplates_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a send operation with actual parameters of a global parameterized template is accepted with the actual parameter being a template parameter.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"";"" +"Sem_1503_GlobalAndLocalTemplates_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a send operation with actual parameters of a global parameterized template is accepted with the actual parameter being an inline template.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1503_C";"";"" +"Syn_1503_GlobalAndLocalTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a global parameterized template is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1503_A";"";"" +"Syn_1503_GlobalAndLocalTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a parameterized local template in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1503_A";"";"" +"Syn_1503_GlobalAndLocalTemplates_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a parameterized local template in a function is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1503_A";"";"" +"Syn_1503_GlobalAndLocalTemplates_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.3";"None";"None";"Ensure that a parameterized local template in an altstep is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1503_A";"";"" +"Syn_1504_InlineTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.4";"None";"None";"Ensure that inline templates are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1504_A";"Clause 15.4";"In-line templates" +"Syn_1504_InlineTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.4";"None";"None";"Ensure that modified parameterized inline templates are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1504_A";"";"" +"Syn_1504_InlineTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.4";"None";"None";"Ensure that modified plain inline templates are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1504_A";"";"" +"NegSem_1505_ModifiedTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that a modified template does not refer to itself.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"Clause 15.5";"Modified templates" +"NegSem_1505_ModifiedTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that a modified template does not omit possible parameters of the base template.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"NegSem_1505_ModifiedTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that a modified template does not omit possible parameters introduced in any modification step.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"NegSem_1505_ModifiedTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that parameter names in modified templates are the same.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"NegSem_1505_ModifiedTemplates_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that the dash in default parameter values of a modified templates is only accepted when the base template actually has a default value.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"NegSem_1505_ModifiedTemplates_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that the same parameter name is used when modifying the base template.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"NegSem_1505_ModifiedTemplates_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that the same parameter type is used when modifying the base template.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1505_D";"";"" +"Sem_1505_ModifiedTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that the values of plain modified template definitions are as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1505_C";"";"" +"Sem_1505_ModifiedTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that a modified template of a record of type using index notation access works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1505_C";"";"" +"Sem_1505_ModifiedTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that default values in formal parameters of modified templates are working as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1505_C";"";"" +"Sem_1505_ModifiedTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that default values in formal parameters of modified templates are working as expected when the modified template uses the dash for the default value.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1505_C";"";"" +"Syn_1505_ModifiedTemplates_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that plain modified template definitions are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1505_A";"";"" +"Syn_1505_ModifiedTemplates_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that a modified template does not omit possible parameters introduced in any modification step.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1505_A";"";"" +"Syn_1505_ModifiedTemplates_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that the default values in formal parameters of modified templates are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1505_A";"";"" +"Syn_1505_ModifiedTemplates_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.5";"None";"None";"Ensure that dash as default parameter values are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1505_A";"";"" +"NegSem_150601_ReferencingIndividualStringElements_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.1";"None";"None";"Ensure that the referencing of individual string elements inside templates or template fields is forbidden.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150601_D";"Clause 15.6.1";"Referencing individual string elements" +"NegSem_150602_ReferencingRecordAndSetFields_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that fields with omit values on the right-hand side of an assignment are rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150602_D";"Clause 15.6.2";"Referencing record and set fields" +"NegSem_150602_ReferencingRecordAndSetFields_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that fields with * values on the right-hand side of an assignment are rejected";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150602_D";"";"" +"NegSem_150602_ReferencingRecordAndSetFields_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that value lists on the right-hand side of an assignment are not acceped.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150602_D";"";"" +"NegSem_150602_ReferencingRecordAndSetFields_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that complement lists on the right-hand side of an assignment are not acceped.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150602_D";"";"" +"NegSem_150602_ReferencingRecordAndSetFields_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that referencing a template field with the ifpresent attribute causes a rejection.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150602_D";"";"" +"Sem_150602_ReferencingRecordAndSetFields_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"? shall be returned for mandatory subfields and * shall be returned for optional subfields.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150602_C";"";"" +"Sem_150602_ReferencingRecordAndSetFields_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"Ensure that the recurisve anyvalue expansion is performed correctly when new values are assigned.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150602_C";"";"" +"Sem_150602_ReferencingRecordAndSetFields_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"? shall be returned for mandatory subfields and * shall be returned for optional subfields.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150602_C";"";"" +"Sem_150602_ReferencingRecordAndSetFields_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.2";"None";"None";"? shall be returned for mandatory subfields and * shall be returned for optional subfields.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150602_C";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that referencing an element within a value list causes an error in the context of record of.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"Clause 15.6.3";"Referencing record of and set of elements" +"NegSem_150603_ReferencingRecordOfAndSetElements_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that access to unitialized fields in the context of record of is rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that anyvalueornone fields in the context of record of is rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that complement value lists in the context of record of are rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that subset in the context of record of are rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that superset in the context of record of are rejected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that access into permutation in record of templates is forbidden.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that access to record of indexes is forbidden when a previous index entry is a permutation with a *.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"NegSem_150603_ReferencingRecordOfAndSetElements_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that access to ifpresent fields is not allowed.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150603_D";"";"" +"Sem_150603_ReferencingRecordOfAndSetElements_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that assignment of an anyvalue on the right hand side yields an anyvalue in the context of record of.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150603_C";"";"" +"Sem_150603_ReferencingRecordOfAndSetElements_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that assignment to a anyvalue in the context of record of is handled correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150603_C";"";"" +"Sem_150603_ReferencingRecordOfAndSetElements_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that assignment to a anyvalue in the context of record of is handled correctly in two subsequent assignments.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150603_C";"";"" +"Sem_150603_ReferencingRecordOfAndSetElements_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that assignment to a anyvalue in the context of record of is handled correctly when the first element is changed.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150603_C";"";"" +"Sem_150603_ReferencingRecordOfAndSetElements_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.3";"None";"None";"Ensure that access outside permutation fields is allowed and works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150603_C";"";"" +"NegSem_150604_ReferencingSignatureParameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.4";"None";"None";"Test modification of signature parameters.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"150604_D";"Clause 15.6.4";"null" +"Sem_150604_ReferencingSignatureParameters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.6.4";"None";"None";"Test modification of signature parameters.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"150604_C";"";"" +"NegSem_1508_TemplateRestrictions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with anyvalue(?).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"Clause 15.8";"Template restrictions" +"NegSem_1508_TemplateRestrictions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with setof template.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with anyvalueornone(*).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with value ranges.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with supersets.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with subsets.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with patterns.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with anyelement inside values.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with anyelemenornone inside values.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with permutation inside values.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with length restrictions.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with length restrictions.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is rejected with length restrictions.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with anyvalue(?).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with valuelist.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with anyvalueornone(*).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with value ranges.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with supersets.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with supersets.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_020";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with patterns.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_021";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with anyelement inside values.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_022";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with permutation inside values.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_023";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with length restrictions.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_024";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is rejected with length restrictions.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_025";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(present) refuses omitvalue as a whole.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"NegSem_1508_TemplateRestrictions_026";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) refuses omit as a whole.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1508_D";"";"" +"Sem_1508_TemplateRestrictions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a value can be assigned to a template(omit) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(omit) can be assigned to a template(omit) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a templat(value) can be assigned to a template(omit) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a value can be assigned to a template(value) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(value) can be assigned to a template(value) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a value can be assigned to a template(present) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(omit) can be assigned to a template(present) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(value) can be assigned to a template(present) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(present) can be assigned to a template(present) variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a value can be assigned to a template variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(omit) can be assigned to a template variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(value) can be assigned to a template variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template(present) can be assigned to a template variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a template can be assigned to a template variable.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Sem_1508_TemplateRestrictions_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that a base template can be modified without restrictions.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1508_C";"";"" +"Syn_1508_TemplateRestrictions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is accepted with value omitvalue.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1508_A";"";"" +"Syn_1508_TemplateRestrictions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(omit) is accepted with a concrete value.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1508_A";"";"" +"Syn_1508_TemplateRestrictions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(value) is accepted with a concrete value.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1508_A";"";"" +"Syn_1508_TemplateRestrictions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.8";"None";"None";"Ensure that template(present) is accepted with a concrete value.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1508_A";"";"" +"NegSem_1509_MatchOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation refuses two templates as actual parameters.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1509_D";"Clause 15.9";"Match operation" +"Sem_1509_MatchOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation works as expected on a template with range restriction when the tested value is inside the range.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1509_C";"";"" +"Sem_1509_MatchOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation works as expected on a template with range restriction when the tested value is outside the range.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1509_C";"";"" +"Sem_1509_MatchOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation works correctly on records in the positive case.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1509_C";"";"" +"Sem_1509_MatchOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation works correctly on records in the negative case.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1509_C";"";"" +"Sem_1509_MatchOperation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.9";"None";"None";"Ensure that the match operation works correctly if the types are incompatible.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1509_C";"";"" +"NegSem_1510_ValueOfOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.10";"None";"None";"Ensure that the valueof function works correctly on omit.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1510_D";"Clause 15.10";"Valueof operation" +"NegSem_1510_ValueOfOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.10";"None";"None";"Ensure that the valueof function works correctly on templates with wildcards.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1510_D";"";"" +"NegSem_1510_ValueOfOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.10";"None";"None";"Ensure that the valueof function works correctly on regular value templates.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1510_D";"";"" +"NegSem_1510_ValueOfOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.10";"None";"None";"Ensure that the valueof function works correctly on range templates.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1510_D";"";"" +"Sem_1510_ValueOfOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.10";"None";"None";"Ensure that the valueof operation works as expected for fully initialized templates.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1510_C";"";"" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types yields an even number of digits.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"Clause 15.11";"Concatenating templates of string and list types" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of strings types yields an error if specified ranges are not fixed length.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"";"" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that a simple concatenation of non-wildcard octetstring must not yield in a non-even number of hexadecimals.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"";"" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that the inline template definitions are correctly concatenated.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"";"" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that the inline template definitions are correctly concatenated.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"";"" +"NegSem_1511_ConcatenatingTemplatesOfStringAndListTypes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types and ? patterns works as expected.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1511_D";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of charstring types works as expected (variant 1).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types works as expected (variant 2).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of bitstring types works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types works as expected (variant 1).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types works as expected (variant 2).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that a concatenation of charstrings with a fixed length AnyValueOrNone be matched.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenations of record of charstrings work when parameterized.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenations of set of integers are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that the inline template definitions are correctly concatenated.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types works as expected (matching patterns in quotation).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types and ? patterns works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"Sem_1511_ConcatenatingTemplatesOfStringAndListTypes_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15.11";"None";"None";"Ensure that concatenation of octetstring types and ? patterns works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1511_C";"";"" +"NegSem_15_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15";"None";"None";"Ensure that a template formed from a union is rejected when the union somehow contains a default type field.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"15_D";"Clause 15";"Declaring templates" +"Syn_15_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 15";"None";"None";"Ensure that a simple template with a single charstring field is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"15_A";"";"" +"Sem_160101_invoking_functions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.1";"None";"None";"Ensure that the IUT correctly handles function invocations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160101_C";"Clause 16.1.1";"Invoking functions" +"NegSem_160102_predefined_functions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"Clause 16.1.2";"Predefined functions" +"NegSem_160102_predefined_functions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_020";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C.33)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_021";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_022";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_023";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_024";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_025";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_026";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_027";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_028";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_029";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_030";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"NegSem_160102_predefined_functions_031";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160102_D";"";"" +"Sem_160102_predefined_functions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"Sem_160102_predefined_functions_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.2";"None";"None";"Ensure that the IUT recognizes predefined functions and correctly evaluates them (as specified by Annex C)";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160102_C";"";"" +"NegSem_160103_external_functions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.3";"None";"None";"Ensure that the IUT recognizes external functions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160103_D";"Clause 16.1.3";"External functions" +"NegSem_160103_external_functions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.3";"None";"None";"Port parameters cannot be passed to external functions as inout parameters";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160103_D";"";"" +"NegSem_160103_external_functions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.3";"None";"None";"Timer parameters cannot be passed to external functions as inout parameters";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160103_D";"";"" +"Sem_160103_external_functions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.3";"None";"None";"Ensure that the IUT recognizes external functions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160103_C";"";"" +"Sem_160103_external_functions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.3";"None";"None";"Ensure that the IUT recognizes external functions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160103_C";"";"" +"NegSem_160104_invoking_functions_from_specific_places_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.4";"None";"None";"Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160104_D";"Clause 16.1.4";"Invoking function from specific places" +"NegSem_160104_invoking_functions_from_specific_places_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.4";"None";"None";"Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160104_D";"";"" +"NegSem_160104_invoking_functions_from_specific_places_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.4";"None";"None";"Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160104_D";"";"" +"NegSem_160104_invoking_functions_from_specific_places_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1.4";"None";"None";"Ensure that the IUT recognizes restrictions described in section 16.1.4. STF409 assumes that the list given in section 16.1.4 describes mandatory restrictions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160104_D";"";"" +"NegSem_1601_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"Clause 16.1";"Functions" +"NegSem_1601_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"";"" +"NegSem_1601_toplevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"";"" +"NegSem_1601_toplevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"";"" +"NegSem_1601_toplevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"";"" +"NegSem_1601_toplevel_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1601_D";"";"" +"Sem_1601_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1601_C";"";"" +"Sem_1601_toplevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.1";"None";"None";"Ensure that the IUT correctly handles function definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1601_C";"";"" +"NegSem_160201_invoking_altsteps_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2.1";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"160201_D";"Clause 16.2.1";"Invoking altsteps" +"Sem_160201_invoking_altsteps_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2.1";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160201_C";"";"" +"Sem_160201_invoking_altsteps_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2.1";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160201_C";"";"" +"Sem_160201_invoking_altsteps_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2.1";"None";"None";"Ensure that altsteps are correctly handled for dynamically mapped ports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160201_C";"";"" +"Sem_160201_invoking_altsteps_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2.1";"None";"None";"Ensure that altsteps are correctly handled for dynamically mapped ports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"160201_C";"";"" +"NegSem_1602_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"Clause 16.2";"Altsteps" +"NegSem_1602_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"";"" +"NegSem_1602_toplevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"";"" +"NegSem_1602_toplevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"";"" +"NegSem_1602_toplevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"";"" +"NegSem_1602_toplevel_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_D";"";"" +"NegSyn_1602_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1602_B";"";"" +"Sem_1602_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.2";"None";"None";"Ensure that the IUT recognizes altstep definitions and correctly evaluates them";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1602_C";"";"" +"NegSem_1603_testcases_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.3";"None";"None";"Ensure that the IUT properly evaluates invocation of testcases";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1603_D";"Clause 16.3";"Test cases" +"NegSem_1603_testcases_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.3";"None";"None";"Ensure that the IUT properly evaluates invocation of testcases";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1603_D";"";"" +"Syn_1603_testcases_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 16.3";"None";"None";"Ensure that the IUT properly evaluates invocation of testcases with system clause";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1603_A";"";"" +"NegSem_1901_assignments_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.1";"None";"None";"Ensure that the IUT properly evaluates assignment statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1901_D";"Clause 19.1";"Assignments" +"NegSem_1901_assignments_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.1";"None";"None";"Ensure that the IUT properly evaluates assignment statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1901_D";"";"" +"NegSem_1901_assignments_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.1";"None";"None";"Ensure that the IUT properly evaluates assignment statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1901_D";"";"" +"NegSyn_1901_assignments_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.1";"None";"None";"Ensure that the IUT properly evaluates assignment statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1901_B";"";"" +"Sem_1901_assignments_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.1";"None";"None";"Ensure that the IUT properly evaluates assignment statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1901_C";"";"" +"NegSyn_1902_if_else_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.2";"None";"None";"If statement requires curly brackets for the body";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1902_B";"Clause 19.2";"The if-else statement" +"Sem_1902_if_else_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.2";"None";"None";"Ensure that the IUT properly evaluates if-else statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1902_C";"";"" +"Sem_1902_if_else_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.2";"None";"None";"Ensure that the IUT properly evaluates if-else statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1902_C";"";"" +"Sem_1903_select_case_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.3";"None";"None";"Ensure that the IUT properly evaluates select-case statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1903_C";"Clause 19.3";"The select case statement" +"Sem_1903_select_case_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.3";"None";"None";"Ensure that the IUT properly evaluates select-case statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1903_C";"";"" +"Sem_1903_select_case_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.3";"None";"None";"Ensure that the IUT properly evaluates select-case statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1903_C";"";"" +"Sem_1903_select_case_statement_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.3";"None";"None";"Ensure that the IUT properly evaluates select-case statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1903_C";"";"" +"NegSem_1904_for_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.4";"None";"None";"Ensure that the IUT properly evaluates for statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1904_D";"Clause 19.4";"The for statement" +"Sem_1904_for_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.4";"None";"None";"Ensure that the IUT properly evaluates for statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1904_C";"";"" +"Sem_1904_for_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.4";"None";"None";"Ensure that the IUT properly evaluates for statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1904_C";"";"" +"Sem_1904_for_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.4";"None";"None";"Ensure that the IUT properly evaluates for statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1904_C";"";"" +"NegSem_1905_while_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.5";"None";"None";"Ensure that the IUT properly evaluates while statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1905_D";"Clause 19.5";"The while statement" +"Sem_1905_while_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.5";"None";"None";"Ensure that the IUT properly evaluates while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1905_C";"";"" +"Sem_1905_while_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.5";"None";"None";"Ensure that the IUT properly evaluates while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1905_C";"";"" +"Sem_1905_while_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.5";"None";"None";"Ensure that the IUT properly evaluates while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1905_C";"";"" +"NegSem_1906_do_while_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.6";"None";"None";"Ensure that the IUT properly evaluates do-while statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1906_D";"Clause 19.6";"The do-while statement" +"Sem_1906_do_while_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.6";"None";"None";"Ensure that the IUT properly evaluates do-while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1906_C";"";"" +"Sem_1906_do_while_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.6";"None";"None";"Ensure that the IUT properly evaluates do-while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1906_C";"";"" +"Sem_1906_do_while_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.6";"None";"None";"Ensure that the IUT properly evaluates do-while statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1906_C";"";"" +"NegSem_1907_label_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.7";"None";"None";"Ensure that the IUT correctly handles label naming uniqueness.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1907_D";"Clause 19.7";"The label statement" +"NegSyn_1907_label_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.7";"None";"None";"Ensure that the IUT correctly handles label syntax.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1907_B";"";"" +"NegSyn_1907_label_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.7";"None";"None";"Ensure that the IUT correctly handles label syntax.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1907_B";"";"" +"Syn_1907_label_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.7";"None";"None";"Ensure that the IUT correctly handles label syntax.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"1907_A";"";"" +"NegSem_1908_goto_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1908_D";"Clause 19.8";"The goto statement" +"NegSem_1908_goto_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1908_D";"";"" +"NegSem_1908_goto_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1908_D";"";"" +"Sem_1908_goto_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1908_C";"";"" +"Sem_1908_goto_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1908_C";"";"" +"Sem_1908_goto_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.8";"None";"None";"Ensure that the IUT correctly handles goto statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1908_C";"";"" +"Sem_1909_stop_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.9";"None";"None";"Ensure that the IUT correctly handles stop statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1909_C";"Clause 19.9";"The stop execution statement" +"Sem_1909_stop_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.9";"None";"None";"Ensure that the IUT correctly handles stop statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1909_C";"";"" +"NegSem_1910_return_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.10";"None";"None";"Ensure that the IUT correctly handles return statements.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1910_D";"Clause 19.10";"The return statement" +"Sem_1910_return_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.10";"None";"None";"Ensure that the IUT correctly handles return statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1910_C";"";"" +"Sem_1910_return_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.10";"None";"None";"Ensure that the IUT correctly handles return statements.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1910_C";"";"" +"NegSem_1911_log_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"1911_D";"Clause 19.11";"The log statement" +"Sem_1911_log_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1911_C";"";"" +"Sem_1911_log_statement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1911_C";"";"" +"Sem_1911_log_statement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1911_C";"";"" +"Sem_1911_log_statement_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1911_C";"";"" +"Sem_1911_log_statement_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.11";"None";"None";"Ensure that the IUT properly evaluates log statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1911_C";"";"" +"Sem_1913_continue_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 19.13";"None";"None";"Ensure that the IUT properly evaluates continue statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"1913_C";"Clause 19.13";"The continue statement" +"Sem_2002_TheAltStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the alt-statement works as expected (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"Clause 20.2";"The alt statement" +"Sem_2002_TheAltStatement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the alt-statement with a guard works as expected (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the alt-statement processes the alternatives in order (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that activated defaults are processed in the reverse order (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the else branch is executed when nothing else matched (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that an altstep invocation works as expected (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that an altstep invocation works as expected and that the optional statement block is executed after the altstep staatement block (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the done-block in an alt-statement is triggered as expected (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the killed-block in an alt-statement is triggered as expected when the component is killed (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the timeout branch is taken as expected (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that the behavior continues after the alt-statement (loopback case).";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that alt statements are correctly handled for dynamically mapped ports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"Sem_2002_TheAltStatement_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.2";"None";"None";"Ensure that alt statements are correctly handled for dynamically mapped ports";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2002_C";"";"" +"NegSem_2003_the_repeat_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.3";"None";"None";"Ensure that the IUT correctly processes repeat statements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2003_D";"Clause 20.3";"The repeat statement" +"Sem_2003_the_repeat_statement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.3";"None";"None";"Ensure that the IUT correctly processes repeat statements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2003_C";"";"" +"NegSem_2004_InterleaveStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2004_D";"Clause 20.4";"The interleave statement" +"NegSyn_2004_InterleaveStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2004_B";"";"" +"NegSyn_2004_InterleaveStatement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2004_B";"";"" +"Sem_2004_InterleaveStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2004_C";"";"" +"Sem_2004_InterleaveStatement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2004_C";"";"" +"Syn_2004_InterleaveStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20.4";"None";"None";"Validate that interleave statements are properly handled.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"2004_A";"";"" +"Syn_20_TopLevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20";"None";"None";"Ensure that alt-statements are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"20_A";"Clause 20";"Statement and operations for alternative behaviours" +"Syn_20_TopLevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20";"None";"None";"Ensure that repeat in an alt-statement is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"20_A";"";"" +"Syn_20_TopLevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20";"None";"None";"Ensure that the interleave-statement is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"20_A";"";"" +"Syn_20_TopLevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20";"None";"None";"Ensure that defaults and the activate statement is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"20_A";"";"" +"Syn_20_TopLevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 20";"None";"None";"Ensure that defaults and the activate statement is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"20_A";"";"" +"NegSem_210101_connect_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21";"None";"None";"Ensure that the the IUT does not allows two output port connection";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210101_D";"Clause 21";"Configuration operations" +"NegSem_210101_connect_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21";"None";"None";"Ensure that the the IUT does not allows two output port connection";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210101_D";"";"" +"NegSem_210101_map_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.1";"None";"None";"Ensure that IUT cannot map input port with output port";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210101_D";"Clause 21.1";"Connection operations" +"NegSem_210101_map_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.1";"None";"None";"Ensure that IUT cannot map input port with output port";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210101_D";"";"" +"NegSem_210102_disconnect_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that mapped port cannot disconnect";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210102_D";"Clause 9";"Port types, component types and test configurations" +"Sem_210102_disconnect_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that all component can be disconnected";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210102_C";"";"" +"Sem_210102_disconnect_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"Ensure that two components can disconnect";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210102_C";"";"" +"Sem_210102_unmap_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"unmap operation of two port";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210102_C";"";"" +"Sem_210102_unmap_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 9";"None";"None";"unmap of system and MycompA";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210102_C";"";"" +"NegSem_2102_testcase_stop_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.2";"None";"None";"Stopping test case";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2102_D";"Clause 21.2";"Test case operations" +"NegSem_210301_CreateOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named components on hosts are accepted";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210301_D";"Clause 21.3.1";"The create operation" +"NegSem_210301_CreateOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named components on hosts are accepted";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210301_D";"";"" +"NegSem_210301_CreateOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named components on hosts are accepted";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210301_D";"";"" +"Sem_210301_CreateOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that unnamed components can be created";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210301_C";"";"" +"Sem_210301_CreateOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named components can be created";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210301_C";"";"" +"Sem_210301_CreateOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that unnamed alive components on hosts can be created";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210301_C";"";"" +"Sem_210301_CreateOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named alive components can be created";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210301_C";"";"" +"Syn_210301_CreateOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.1";"None";"None";"Ensure that named components on hosts are accepted";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"210301_A";"";"" +"NegSem_210302_Start_test_component_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.2";"None";"None";"Ensure that non-alive ptc cannot start again";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210302_D";"Clause 21.3.2";"The start test component operation" +"NegSem_210302_Start_test_component_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.2";"None";"None";"Ensure that only component type is allowed for ptc declar.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210302_D";"";"" +"Sem_210302_Start_test_component_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.2";"None";"None";"Ensure that alive test components are allowed to start another function";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210302_C";"";"" +"Sem_210303_Stop_test_component_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.3";"None";"None";"Ensure that component.stop produces the";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210303_C";"Clause 21.3.3";"The stop test behaviour operation" +"Sem_210303_Stop_test_component_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.3";"None";"None";"Ensure that self.stop stops current component";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210303_C";"";"" +"Sem_210304_kill_test_component_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.4";"None";"None";"Ensure that kill operator stops a non alive test comp.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210304_C";"Clause 21.3.4";"The kill test component operation" +"Sem_210304_kill_test_component_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.4";"None";"None";"Ensure that all component kill stop all ptcs";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210304_C";"";"" +"Sem_210304_kill_test_component_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.4";"None";"None";"Ensure that kill operator stops only non alive test components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210304_C";"";"" +"Sem_210304_kill_test_component_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.4";"None";"None";"Ensure that self kill called in a functions stops non alive test comp.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210304_C";"";"" +"Sem_210305_alive_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.5";"None";"None";"Testing alive operator with an alive test component";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210305_C";"Clause 21.3.5";"The alive operation" +"Sem_210305_alive_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.5";"None";"None";"Test all component alive operator with alive test components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210305_C";"";"" +"Sem_210305_alive_operation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.5";"None";"None";"Ensure that alive operator gives a correct boolean result";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210305_C";"";"" +"Sem_210305_alive_operation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.5";"None";"None";"Test any component alive operator with multiple test components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210305_C";"";"" +"Sem_210306_running_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.6";"None";"None";"Check that running operator provides information about test components.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210306_C";"Clause 21.3.6";"The running operation" +"Sem_210306_running_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.6";"None";"None";"Any component with running can check the status of the test components";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210306_C";"";"" +"NegSem_210307_done_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.7";"None";"None";"Ensure that done operator can be used only for ptcs.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210307_D";"Clause 21.3.7";"The done operation" +"Sem_210307_done_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.7";"None";"None";"Ensure that all component with done can check that at least one test component is not done";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210307_C";"";"" +"NegSem_210308_killed_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.8";"None";"None";"Ensure that killed operator is only valid for ptcs.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"210308_D";"Clause 21.3.8";"The killed operation" +"Sem_210308_killed_operation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.8";"None";"None";"Ensure that all component kill can be checked with killed operator";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210308_C";"";"" +"Sem_210308_killed_operation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.8";"None";"None";"check that any component and killed operator can check that at least one test component is running or not";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210308_C";"";"" +"Sem_210308_killed_operation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 21.3.8";"None";"None";"";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"210308_C";"";"" +"NegSem_220201_SendOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220201_D";"Clause 22.2.1";"The send operation" +"NegSem_220201_SendOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220201_D";"";"" +"NegSem_220201_SendOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220201_D";"";"" +"NegSem_220201_SendOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220201_D";"";"" +"Sem_220201_SendOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220201_C";"";"" +"Sem_220201_SendOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220201_C";"";"" +"Sem_220201_SendOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220201_C";"";"" +"Sem_220201_SendOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.1";"None";"None";"Ensure that the IUT correctly handles message sending operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220201_C";"";"" +"NegSem_220202_ReceiveOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220202_D";"Clause 22.2.2";"The receive operation" +"Sem_220202_ReceiveOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220202_C";"";"" +"Sem_220202_ReceiveOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220202_C";"";"" +"Sem_220202_ReceiveOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220202_C";"";"" +"Sem_220202_ReceiveOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220202_C";"";"" +"Sem_220202_ReceiveOperation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.2";"None";"None";"Ensure that the IUT correctly handles message receiving operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220202_C";"";"" +"NegSem_220203_TriggerOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220203_D";"Clause 22.2.3";"The trigger operation" +"Sem_220203_TriggerOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220203_C";"";"" +"Sem_220203_TriggerOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220203_C";"";"" +"Sem_220203_TriggerOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220203_C";"";"" +"Sem_220203_TriggerOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220203_C";"";"" +"Sem_220203_TriggerOperation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.2.3";"None";"None";"Ensure that the IUT correctly handles message trigger operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220203_C";"";"" +"NegSem_220301_CallOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles procedure call operations";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220301_D";"Clause 22.3.1";"The call operation" +"NegSem_220301_CallOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly procedure calls";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220301_D";"";"" +"Sem_220301_CallOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles procedure call operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles procedure call operations";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles non-blocking procedure call";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles multiple client calls to the same server";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles broadcast/multicast procedure call";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles broadcast/multicast procedure call";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"Sem_220301_CallOperation_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.1";"None";"None";"Ensure that the IUT correctly handles blocking procedure call";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220301_C";"";"" +"NegSem_220302_GetcallOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall operations are only used on procedure based ports";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220302_D";"Clause 22.3.2";"The getcall operation" +"NegSem_220302_GetcallOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall operation does not allow value assignment";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220302_D";"";"" +"NegSem_220302_GetcallOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall for any call does not allow param assignment";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220302_D";"";"" +"Sem_220302_GetcallOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall operations remove only matching procedure from the queue";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220302_C";"";"" +"Sem_220302_GetcallOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall operations remove the matching procedure from the queue";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220302_C";"";"" +"Sem_220302_GetcallOperation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that the getcall operation can be correctly restricted to a certain client";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220302_C";"";"" +"Sem_220302_GetcallOperation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that the getcall operation can be correctly restricted to a certain client";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220302_C";"";"" +"Sem_220302_GetcallOperation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.2";"None";"None";"Ensure that getcall operations work with any port attribute";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220302_C";"";"" +"NegSem_220303_ReplyOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.3";"None";"None";"Ensure that reply operations are only used on procedure based ports";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"220303_D";"Clause 22.3.3";"The reply operation" +"Sem_220303_ReplyOperation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.3";"None";"None";"Ensure that the IUT correctly handles reply to multiple clients on the same server";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220303_C";"";"" +"Sem_220303_ReplyOperation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 22.3.3";"None";"None";"Ensure that the IUT correctly handles reply to multiple clients on the same server";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"220303_C";"";"" +"NegSem_2302_timer_start_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure infinity is not allowed";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_D";"Clause 23";"Timer operations" +"NegSem_2302_timer_start_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure not_a_number is not allowed";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_D";"";"" +"NegSem_2302_timer_start_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure negative value is not allowed";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_D";"";"" +"NegSem_2302_timer_start_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure negative infinity is not allowed";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_D";"";"" +"NegSyn_2302_timer_start_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"NegSyn_2302_timer_start_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer start syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2302_B";"";"" +"Sem_2302_timer_start_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer runs from zero to stated value";"The test should pass if accept, ttnc3verdict:pass";"";"2302_C";"";"" +"Sem_2302_timer_start_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer can be restarted";"The test should pass if accept, ttnc3verdict:pass";"";"2302_C";"";"" +"Sem_2302_timer_start_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer default value can be modified by start value";"The test should pass if accept, ttnc3verdict:pass";"";"2302_C";"";"" +"Sem_2302_timer_start_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer with value 0.0 expires immediately";"The test should pass if accept, ttnc3verdict:pass";"";"2302_C";"";"" +"NegSyn_2303_timer_stop_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"Clause 23.3";"The stop timer operation" +"NegSyn_2303_timer_stop_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"";"" +"NegSyn_2303_timer_stop_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure all timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"";"" +"NegSyn_2303_timer_stop_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure all timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"";"" +"NegSyn_2303_timer_stop_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure all timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"";"" +"NegSyn_2303_timer_stop_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure all timer stop syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2303_B";"";"" +"Sem_2303_timer_stop_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure timer stop sets elapsed time to zero";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2303_C";"";"" +"Sem_2303_timer_stop_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure timer all timer identifier";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2303_C";"";"" +"Sem_2303_timer_stop_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure can be stopped after timeout";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict none.";"";"2303_C";"";"" +"Syn_2303_timer_stop_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure timer stop syntax";"The test should pass if accept, noexecute";"";"2303_A";"";"" +"Syn_2303_timer_stop_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.3";"None";"None";"Ensure all timer stop syntax";"The test should pass if accept, noexecute";"";"2303_A";"";"" +"NegSyn_2304_timer_read_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2304_B";"Clause 24.4";"null" +"NegSyn_2304_timer_read_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2304_B";"";"" +"NegSyn_2304_timer_read_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2304_B";"";"" +"NegSyn_2304_timer_read_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read syntax: disallow any timer.read";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2304_B";"";"" +"NegSyn_2304_timer_read_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2304_B";"";"" +"Sem_2304_timer_read_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read result of inactive timer is zero";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2304_C";"";"" +"Sem_2304_timer_read_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read result is non-negative float";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2304_C";"";"" +"Sem_2304_timer_read_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.4";"None";"None";"Ensure timer read result is non-negative float";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2304_C";"";"" +"NegSyn_2305_timer_running_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"Clause 23.5";"The running timer operation" +"NegSyn_2305_timer_running_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"";"" +"NegSyn_2305_timer_running_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"";"" +"NegSyn_2305_timer_running_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"";"" +"NegSyn_2305_timer_running_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"";"" +"NegSyn_2305_timer_running_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running syntax: disallow all timer.running";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2305_B";"";"" +"Sem_2305_timer_running_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running any timer identifier works";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2305_C";"";"" +"Sem_2305_timer_running_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running operation works";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2305_C";"";"" +"Sem_2305_timer_running_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running operation works";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2305_C";"";"" +"Sem_2305_timer_running_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer running operation works";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2305_C";"";"" +"NegSyn_2306_timer_timeout_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"Clause 23.6";"The timeout operation" +"NegSyn_2306_timer_timeout_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout can`t be used in boolean expressions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"NegSyn_2306_timer_timeout_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"NegSyn_2306_timer_timeout_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"NegSyn_2306_timer_timeout_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"NegSyn_2306_timer_timeout_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"NegSyn_2306_timer_timeout_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout syntax";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2306_B";"";"" +"Sem_2306_timer_timeout_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout operations: non-started timer does not timeout";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout operations: timed-out timer does not timeout until restarted";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout happen in order from the shortest to the longest";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure any timer.timeout operation";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure any timer.timeout operation for timeouts that are not in scope";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure any timer.timeout operation handles timeout of any timer in the component, not only visible from a function or altstep";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Sem_2306_timer_timeout_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.6";"None";"None";"Ensure timer timeout happen in order from the shortest to the longest";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2306_C";"";"" +"Syn_2306_timer_timeout_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23.5";"None";"None";"Ensure timer runnig syntax";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"2306_A";"Clause 23.5";"The running timer operation" +"NegSem_23_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer operations are not allowed outside of module control, test case, function, altstep";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"23_D";"Clause 23";"Timer operations" +"NegSem_23_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer operations are not allowed outside of module control, test case, function, altstep";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"23_D";"";"" +"NegSyn_23_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer operations are not allowed outside of module control, test case, function, altstep";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"23_B";"";"" +"NegSyn_23_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer operations are not allowed outside of module control, test case, function, altstep";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"23_B";"";"" +"Syn_23_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer allowed in module control, test case, function, altstep";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"23_A";"";"" +"Syn_23_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 23";"None";"None";"Ensure timer allowed in module control, test case, function, altstep";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"23_A";"";"" +"NegSem_2401_SetverdictError";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure that setverdict can't set error verdict";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2401_D";"Clause 24.1";"The verdict mechanism" +"Sem_2401_GlobalVerdict_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: pass can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: inconc can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: fail can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: none can't overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: inconc can overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: fail can overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: none can't overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: pass can't overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: fail can overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: none can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: pass can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_GlobalVerdict_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for global verdict: inconc can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_InitiallyNone_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure that local verdicts initializes with none";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: pass can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: inconc can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: fail can overwrite none.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: none can't overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: inconc can overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: fail can overwrite pass.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: none can't overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: pass can't overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: fail can overwrite inconc.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: none can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: pass can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Sem_2401_LocalVerdict_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure overwriting rules for local verdict: inconc can't overwrite fail.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2401_C";"";"" +"Syn_2401_FiveValues_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.1";"None";"None";"Ensure that there are five values of verdicttype";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"2401_A";"";"" +"NegSem_2402_setverdict_params_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts parameters of verdicttype only";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2402_D";"Clause 24";"Test verdict operations" +"NegSem_2402_setverdict_params_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts parameters of verdicttype only";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2402_D";"";"" +"NegSem_2402_setverdict_params_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts values of verdicttype only";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2402_D";"";"" +"NegSem_2402_setverdict_params_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts values only as the parameter";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2402_D";"";"" +"NegSem_2402_setverdict_params_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts values only as the parameter";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2402_D";"";"" +"Sem_2402_setverdict_logging_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure logging constraints";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2402_C";"";"" +"Sem_2402_setverdict_params_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts values only as the parameter";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2402_C";"";"" +"Sem_2402_setverdict_params_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict accepts values only as the parameter";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2402_C";"";"" +"Sem_2402_setverdict_params_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure logging contraints";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2402_C";"";"" +"Sem_2403_getverdict_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.3";"None";"None";"Ensure getverdict returns the actual verdict none";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2403_C";"Clause 24.3";"The getverdict mechanism" +"Sem_2403_getverdict_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.3";"None";"None";"Ensure getverdict returns the actual verdict inconc";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2403_C";"";"" +"Sem_2403_getverdict_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.3";"None";"None";"Ensure getverdict returns the actual verdict pass";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2403_C";"";"" +"Sem_2403_getverdict_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.3";"None";"None";"Ensure getverdict returns the actual verdict fail";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict error.";"";"2403_C";"";"" +"Sem_2403_getverdict_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24.3";"None";"None";"Ensure getverdict none for uninitialized verdict";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2403_C";"";"" +"NegSem_24_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure getverdict is not allowed in constant initialization in control part";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"24_D";"Clause 24";"Test verdict operations" +"NegSem_24_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure getverdict is not allowed in parameter initialization in control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"24_D";"";"" +"NegSem_24_toplevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure getverdict is not allowed in variable definition in control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"24_D";"";"" +"NegSem_24_toplevel_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict is not allowed in part whithin compound statement.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"24_D";"";"" +"NegSem_24_toplevel_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict is not allowed in control part at the top level.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"24_D";"";"" +"Syn_24_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict and getverdict are allowed in functions";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"24_A";"";"" +"Syn_24_toplevel_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict and getverdict are allowed in test cases";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"24_A";"";"" +"Syn_24_toplevel_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 24";"None";"None";"Ensure setverdict and getverdict are allowed in atsteps";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"24_A";"";"" +"NegSem_2601_ExecuteStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that non-float timeout parameters in the execute statement are rejected (in this case int).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2601_D";"Clause 26.1";"The execute statement" +"NegSem_2601_ExecuteStatement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that non-float timeout parameters in the execute statement are rejected (in this case charstring).";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2601_D";"";"" +"NegSem_2601_ExecuteStatement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that host id can be only charstring.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2601_D";"";"" +"NegSem_2601_ExecuteStatement_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that execution t";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2601_D";"";"" +"Sem_2601_ExecuteStatement_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that parameters are passed correctly into the test case.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that multiple parameters of different types are passed correctly into the test case.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the timeout specified with the execute statement is respected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict error.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the verdict none works correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the verdict pass works correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the verdict inconc works correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict inconc.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the timeout specified with the execute statement is respected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict error.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that the user error sets the verdict error correctly.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict error.";"";"2601_C";"";"" +"Sem_2601_ExecuteStatement_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.1";"None";"None";"Ensure that host id restriction is correctly handled.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict error.";"";"2601_C";"";"" +"NegSem_2602_TheControlPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that setverdict statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"Clause 26.2";"The control part" +"NegSem_2602_TheControlPart_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the create component is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the create alive component is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the start statement is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the stop statement is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the kill statement is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the alive operation is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the running operation is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the done operation is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the killed operation is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the connect statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the disconnect statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the map statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the unmap statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the send statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the receive statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the call statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_018";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the reply statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_019";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the raise statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_020";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the trigger statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_021";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the getcall statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_022";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the getreply statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_023";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the catch statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_024";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the check statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_025";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the clear statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_026";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the start statements on ports are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_027";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the stop statements on ports are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_028";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the halt statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_029";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that alternative behaviours are only used to control timer behavior in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_030";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that getverdict statements are not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_031";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that execute statements are not executed from test cases.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_032";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the create alive named component is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_033";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the create named component is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_034";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the create named component on host is not allowed in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"NegSem_2602_TheControlPart_035";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that alternative behaviours are only used to control timer behavior in the control part.";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2602_D";"";"" +"Sem_2602_TheControlPart_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the selection/deselection of test cases using boolean conditions works as expected.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2602_C";"";"" +"Sem_2602_TheControlPart_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the execution of test cases works from within a function.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2602_C";"";"" +"Sem_2602_TheControlPart_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26.2";"None";"None";"Ensure that the selection of test cases can be achieven based on resulting verdict types.";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict fail.";"";"2602_C";"";"" +"Syn_26_ModuleControl_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that assignments in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"Clause 26";"Module control" +"Syn_26_ModuleControl_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that if-else constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that select-case constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that for loop constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that while loop constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that label and goto constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the stop construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the break construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the continue construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the continue construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the alt/timeout construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_012";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the repeat construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_013";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the interleave construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_014";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that activate/deactivate/default constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_015";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that start/stop/read/running timer constructs in the control part are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_016";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the action construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_26_ModuleControl_017";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 26";"None";"None";"Ensure that the execute construct in the control part is accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"26_A";"";"" +"Syn_270101_ScopeOfAttributes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.1.1";"None";"None";"Ensure that attributes for language elements are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"270101_A";"Clause 27.1.1";"Scope of attributes" +"Syn_270101_ScopeOfAttributes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.1.1";"None";"None";"Ensure that attributes for language elements are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"270101_A";"";"" +"Syn_270101_ScopeOfAttributes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.1.1";"None";"None";"Ensure that attributes for individual fields are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"270101_A";"";"" +"Syn_270101_ScopeOfAttributes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.1.1";"None";"None";"Ensure that attributes for individual fields are accepted.";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"270101_A";"";"" +"NegSem_2707_OptionalAttributes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2707_D";"Clause 27.7";"Optional attributes" +"NegSem_2707_OptionalAttributes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2707_D";"";"" +"Sem_2707_OptionalAttributes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"2707_C";"";"" +"Sem_2707_OptionalAttributes_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"2707_C";"";"" +"Syn_2707_OptionalAttributes_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause 27.7";"None";"None";"Ensure that the IUT correctly handles attribute definitions and their scoping rules";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"2707_A";"";"" +"NegSem_B010101_omitting_values_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of omitted values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010101_D";"Clause B.1.1.1";"null" +"Sem_B010101_omitting_values_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of omitted values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010101_C";"";"" +"Sem_B010101_omitting_values_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of omitted values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010101_C";"";"" +"Sem_B0101_matching_specific_value_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"Clause B.1.1";"Matching specific values" +"Sem_B0101_matching_specific_value_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_010";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B0101_matching_specific_value_011";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.1";"None";"None";"Ensure that the IUT correctly handles template matching of specific values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0101_C";"";"" +"Sem_B010201_value_list_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.1";"None";"None";"Ensure that the IUT correctly handles template matching of listed multiple values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010201_C";"Clause B.1.2.1";"Value list " +"Sem_B010202_complemented_value_list_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"Clause B.1.2.2";"Complemented value list" +"Sem_B010202_complemented_value_list_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"";"" +"Sem_B010202_complemented_value_list_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"";"" +"Sem_B010202_complemented_value_list_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"";"" +"Sem_B010202_complemented_value_list_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"";"" +"Sem_B010202_complemented_value_list_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.2";"None";"None";"Ensure that the IUT correctly handles template matching of complemented value listing";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010202_C";"";"" +"Sem_B010203_any_value_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010203_C";"Clause B.1.2.3";"Any value" +"Sem_B010203_any_value_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010203_C";"";"" +"NegSem_B010204_any_value_or_none_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.4";"None";"None";"Ensure that the IUT correctly handles template matching of * values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010204_D";"Clause B.1.2.4";"Any value or none" +"NegSem_B010204_any_value_or_none_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.4";"None";"None";"Ensure that the IUT correctly handles template matching of * values";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010204_D";"";"" +"Sem_B010204_any_value_or_none_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.4";"None";"None";"Ensure that the IUT correctly handles template matching of * values";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010204_C";"";"" +"NegSem_B010205_value_range_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010205_D";"Clause B.1.2.5";"Value range" +"NegSem_B010205_value_range_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010205_D";"";"" +"NegSem_B010205_value_range_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010205_D";"";"" +"Sem_B010205_value_range_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"Sem_B010205_value_range_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.5";"None";"None";"Ensure that the IUT correctly handles template matching of value range definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010205_C";"";"" +"NegSem_B010206_superset_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.6";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010206_D";"Clause B.1.2.6";"SuperSet" +"NegSem_B010206_superset_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.6";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010206_D";"";"" +"Sem_B010206_superset_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.6";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010206_C";"";"" +"Sem_B010206_superset_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.6";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010206_C";"";"" +"Sem_B010206_superset_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.6";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010206_C";"";"" +"NegSem_B010207_subset_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.7";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010207_D";"Clause B.1.2.7";"SubSet" +"NegSem_B010207_subset_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.7";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010207_D";"";"" +"Sem_B010207_subset_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.7";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010207_C";"";"" +"Sem_B010207_subset_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.7";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010207_C";"";"" +"Sem_B010207_subset_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.2.7";"None";"None";"Ensure that the IUT correctly handles template matching of superset definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010207_C";"";"" +"Sem_B010301_any_element_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"Clause B.1.3.1";"Any element" +"Sem_B010301_any_element_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010301_any_element_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.1";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010301_C";"";"" +"Sem_B010302_any_number_of_elements_or_none_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.2";"None";"None";"Ensure that the IUT correctly handles template matching of * symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010302_C";"Clause B.1.3.2";"Any number of elements of no element" +"Sem_B010302_any_number_of_elements_or_none_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.2";"None";"None";"Ensure that the IUT correctly handles template matching of * symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010302_C";"";"" +"Sem_B010302_any_number_of_elements_or_none_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.2";"None";"None";"Ensure that the IUT correctly handles template matching of * symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010302_C";"";"" +"NegSem_B010303_permutation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010303_D";"Clause B.1.3.3";"Permutation" +"Sem_B010303_permutation_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"Sem_B010303_permutation_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"Sem_B010303_permutation_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"Sem_B010303_permutation_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"Sem_B010303_permutation_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles template matching of ? symbols in value elements";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"Sem_B010303_permutation_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.3.3";"None";"None";"Ensure that the IUT correctly handles permutation within arrays";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010303_C";"";"" +"NegSem_B010401_length_restrictions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010401_D";"Clause B.1.4.1";"Length restrictions" +"NegSem_B010401_length_restrictions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010401_D";"";"" +"NegSem_B010401_length_restrictions_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010401_D";"";"" +"NegSem_B010401_length_restrictions_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010401_D";"";"" +"Sem_B010401_length_restrictions_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010401_C";"";"" +"Sem_B010401_length_restrictions_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.1";"None";"None";"Ensure that the IUT correctly handles template matching of value length definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010401_C";"";"" +"NegSem_B010402_ifPresent_indicator_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.2";"None";"None";"Ensure that the IUT correctly handles template matching of ifpresent indicators";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010402_D";"Clause B.1.4.2";"The ifpresent indicator" +"Sem_B010402_ifPresent_indicator_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.2";"None";"None";"Ensure that the IUT correctly handles template matching of ifpresent indicators";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010402_C";"";"" +"Sem_B010402_ifPresent_indicator_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.4.2";"None";"None";"Ensure that the IUT correctly handles template matching of ifpresent indicators";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010402_C";"";"" +"NegSem_B010501_set_expression_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010501_D";"Clause B.1.5.1";"Set expression" +"Sem_B010501_set_expression_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010501_C";"";"" +"Sem_B010501_set_expression_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010501_C";"";"" +"Sem_B010501_set_expression_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010501_C";"";"" +"Sem_B010501_set_expression_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010501_C";"";"" +"Sem_B010501_set_expression_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.1";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern set expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010501_C";"";"" +"Sem_B010502_reference_expression_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"Clause B.1.5.2";"Reference expression" +"Sem_B010502_reference_expression_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_008";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010502_reference_expression_009";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.2";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference expressions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010502_C";"";"" +"Sem_B010503_match_n_times_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.3";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern expression multiplicity";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010503_C";"Clause B.1.5.3";"Match expression n times" +"Sem_B010503_match_n_times_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.3";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern expression multiplicity";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010503_C";"";"" +"Sem_B010503_match_n_times_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.3";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern expression multiplicity";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010503_C";"";"" +"Sem_B010503_match_n_times_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.3";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern expression multiplicity";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010503_C";"";"" +"Sem_B010503_match_n_times_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.3";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern expression multiplicity";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010503_C";"";"" +"NegSem_B010504_match_referenced_characters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZB010504_D";"Clause B.1.5.4";"Match a referenced character set" +"Sem_B010504_match_referenced_characters_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_003";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_004";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_005";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_006";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010504_match_referenced_characters_007";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.4";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern reference characters";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010504_C";"";"" +"Sem_B010505_pattern_compatibility_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.5";"None";"None";"Ensure that the IUT correctly handles character pattern compatibility rules of template matching";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010505_C";"Clause B.1.5.5";"Type compatibility rules for patterns" +"Sem_B010505_pattern_compatibility_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5.5";"None";"None";"Ensure that the IUT correctly handles character pattern compatibility rules of template matching";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB010505_C";"";"" +"Sem_B0105_toplevel_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause B.1.5";"None";"None";"Ensure that the IUT correctly handles template matching of character pattern definitions";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZB0105_C";"Clause B.1.5";"Matching character pattern" +"Sem_C0602_The_testcasename_function_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause C.6.2";"None";"None";"Ensure that the IUT correctly handles the testcasename function";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZC0602_C";"Clause C.6.2";"null" +"Sem_D01_macro_module_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __MODULE__ replaces the module name";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZD01_C";"Clause D";"Preprocessing macros" +"Sem_D02_macro_file_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __FILE__ macro stores the path and file name in a charstring";"The test should pass if the TTCN-3 module was accepted by the tool without beeing executed.";"";"ZD02_C";"";"" +"Sem_D03_macro_bfile_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that the __BFILE__ macro replaces the actual file name";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZD03_C";"";"" +"Sem_D04_macro_line_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __LINE__ macro stores the actual line number when it is called";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZD04_C";"";"" +"NegSem_D05_macro_scope_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __SCOPE__ replaces the actual higher named basic scope unit";"The test should pass if the TTCN-3 module was rejected either by the validator or after beeing executed.";"";"ZD05_D";"";"" +"Sem_D05_macro_scope_001";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __SCOPE__ replaces the actual higher basic unit";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZD05_C";"";"" +"Sem_D05_macro_scope_002";"Part 1: TTCN-3 Core Language - ETSI ES 201 873-1 V4.3.1 (2011-06), Clause D";"None";"None";"Ensure that __SCOPE__ replaces the actual higher basic unit";"The test should pass if the TTCN-3 module was accepted by the tool after beeing executed. All testcases have to produce the verdict pass.";"";"ZD05_C";"";"" \ No newline at end of file diff --git a/docs/part1-ics/MTS-00132-1ed131-T3Conf_ICS-v0.0.3.doc b/docs/part1-ics/MTS-00132-1ed131-T3Conf_ICS-v0.0.3.doc new file mode 100644 index 0000000000000000000000000000000000000000..0b21dd286ce0b8577ccfc1bbd4984b1b6998f2d9 GIT binary patch literal 2446336 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

;7m9R&W4TOES@vd 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

-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

quddT~f_Y;IP>;OB$&QJ*| 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"P!#cpKh_ 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

i<;3^N;A- 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%0AAd(kRYSaP1%>;~-%V~qn>|Ktk!BIs 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

  • St)h6;u4!7v*{O@9x}=2H0YyLS?`8hWraH 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�d{ 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 P{{9Q5|K0w7AA$b^;4XN$ literal 0 HcmV?d00001 diff --git a/docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3.doc b/docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3.doc new file mode 100644 index 0000000000000000000000000000000000000000..93a223914ce3f0b751b6c1f56795a340913246c3 GIT binary patch literal 289792 zcmeF42Vm9J^~ZmKKnU)zB+ck9BfEv_oofBApTy}$b#Z;*h47GLzs`^`JfIrrRi&K(DaSdS{%7OHjdFD~=VL%27z>I3 zx3Yi##T0n&>OWh(R_5he)@M81saTuS7pCS|JuK_SpIX*-*5acUA2s?nqkp4r2L8#* z-O+k8ud6lhUQ1!^`TF)zfv3EajT`&8Cz+1T18dYlOQ}AW-{PtIcvHVa&FlOwbe>Q5 zTgm;axqk=0;c1q2I+ALhoA5Wws^|Ru>6UdEB44q;WsT#xSk~hHmi6h8 zmh}|RKU{BF@A3XcFIpBq)+PMPUuS`;okZYYLx(ldz-9L& zLAm5leuwZY&%tKv_s*{=&$2doDwV#bp8Bq?_rEC51C*zPi{`!L-#bZvJsFwunRJrR zg+Bg2laBvdXO2z%Go>f#{*Lne;Q`C)?kkrmPiOK-_e{eR>8@JVOZn~poN@YNP)h$9 zx%y2Dv_n4begwHPH~D>(bRNmKtk0px-kgj4$=_~|TGniyf8aHJZs;TDw{pqkZ?5a7 zHveBq#}Vzo%Z5HTa(__Z&i~elk&oox&8>wfad{{C*QAqtJ^9=`x2^q(ZvJ6!^xwXg zRfg2(S-o@mSRsz`Mcrio{;Mf4qq?fXuCB5dEm|ZPW0%?o6%`g0mf9mqii%6d6ipl% znj2|rjMXLV`dHkqjwITmEe&?KrOvKujnqc#qqX6-XspE^F}J#E6^kmWL*8F?q_(kz^qYcN zg?cZD)JNhG(hg0pt{O|mV~UE3OH0O-PA@Jg9#dUfK7ZcKnyJ-Qp#vf-mc`KRql74v3sKv6>>p+IQD_#%5jti3H_*F_Tcoc7vitSOQR%^XuSVRA{aT@`C> zjE3#0Ep5@(SW`4%mq+R%%k44t%mq{DmCp!;sv}K>W%gdBrS>>`a)~{8oIS3@E-JEZ zduDjKd!y8zFy0Qb6Kx`_UwZzXDpagG4B9- zNMl=DYuVVb%a$!GjI<@9g|T?U5Id)Tn#%>D>U6m@hgV20&17JQmxiNF;l)i6JKAD5 z$EaIdBZY{yMC?ctwT;IR6?m8wzH)~@pZPYVC_HD}|krq4AUfXC=PmESXi5n?2*KH(2s8uOcm6A?3 z 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 LWB>h6kAeRO0=#}R literal 0 HcmV?d00001 diff --git a/docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3_ats.zip b/docs/part3-ats_and_ixit/MTS-00132-3ed131-T3Conf_ATS-v0.0.3_ats.zip new file mode 100644 index 0000000000000000000000000000000000000000..c1af706c4de5485ed628778b635d111825a883ad GIT binary patch literal 1468968 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∈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

    #`E7M5)OLGpb#$9&=Z%r^G8!~ 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�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

  • %XwPD#NzSpe+EaMr30^|6yX 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 z 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