main.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. /*
  2. * main.c
  3. *
  4. * Created on: 16.11.2011
  5. * Author: showcase
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <assert.h>
  10. #include <string.h>
  11. #include "Timer.h"
  12. #include "DummyTimer.h"
  13. #include "Test_HierarchyStatemachine.h"
  14. /*@DTestSuite: Hierachy Statechart Test (Test_Hierarchy.sct) */
  15. #define MAXEVENTSPERTYPE 4
  16. const char* stateName[13] = {"State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11", "State12", "none"};
  17. const int EnumTostateStr[10] = { _Test_Hierarchy_mainRegion_State1, _Test_Hierarchy_mainRegion_State2, _Test_Hierarchy_mainRegion_State2_Region2_State3, _Test_Hierarchy_mainRegion_State2_Region2_State4,
  18. _Test_Hierarchy_mainRegion_State2_Region2_State4_Region4_State5, _Test_Hierarchy_mainRegion_State2_Region2_State4_Region4_State6,
  19. _Test_Hierarchy_mainRegion_State2_Region2_State4_Region4_State6_Region6_State7,
  20. _Test_Hierarchy_mainRegion_State2_Region2_State4_Region4_State6_Region6_State8,
  21. _Test_Hierarchy_mainRegion_State1_Region1_State9, _Test_Hierarchy_mainRegion_State1_Region1_State10 , last_state };
  22. const char* getStateString(uint32_t index)
  23. {
  24. int i;
  25. for (i=0; i<10; ++i)
  26. if (EnumTostateStr[i] == index)
  27. return stateName[i];
  28. return stateName[12];
  29. }
  30. void setupStatemachine(Test_HierarchyStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  31. {
  32. /* set up dummy Timer */
  33. dummyTimer_init(dummyTimer);
  34. /* Set up Event Pool */
  35. test_Hierarchy_eventPool_init_heap(eventPool, MAXEVENTSPERTYPE);
  36. /* initialize state machine */
  37. test_HierarchyStatemachine_init(machine, dummyTimer, eventPool);
  38. /* call all necessary enter functions */
  39. test_HierarchyStatemachine_enter(machine);
  40. }
  41. void teardownStatemachine(Test_HierarchyStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  42. {
  43. /* call all exit actions for this state machine */
  44. test_HierarchyStatemachine_exit(machine);
  45. /* free all internal memory for this state machine */
  46. test_HierarchyStatemachine_destruct(machine);
  47. /* free the timer */
  48. timer_exit(dummyTimer);
  49. /* free all events in the event pool */
  50. eventPool_exit(eventPool);
  51. }
  52. /*@Test: test_default_var1 test behavior of var1 in default interface */
  53. int test_initialization()
  54. {
  55. return 0;
  56. }
  57. /*@Test: test_state9_state10_transition test behavior of var1 in default and other interface */
  58. int test_state9_state10_transition()
  59. {
  60. Test_HierarchyStatemachine machine;
  61. Timer dummyTimer;
  62. EventPool eventPool;
  63. /*@Desc: setup initial statemachine */
  64. setupStatemachine(&machine, &dummyTimer, &eventPool);
  65. /*@Desc: check wether state is initial state (State9) */
  66. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  67. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  68. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  69. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  70. /*@Desc: run the statechart for the first time (just as dummy) */
  71. test_HierarchyStatemachine_runCycle(&machine);
  72. /*@Desc: check wether state is still in initial state (State9) */
  73. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  74. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  75. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  76. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  77. /*@Desc: raise event9 on default interface */
  78. test_Hierarchy_if_raise_event9(&machine.iface);
  79. /*@Desc: run the statechart to trigger state change */
  80. test_HierarchyStatemachine_runCycle(&machine);
  81. /*@Desc: check wether state is changed to state10 */
  82. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  83. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State10") == 0);
  84. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  85. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  86. /*@Desc: raise event10 on default interface */
  87. test_Hierarchy_if_raise_event10(&machine.iface);
  88. /*@Desc: run the statechart to trigger state change */
  89. test_HierarchyStatemachine_runCycle(&machine);
  90. /*@Desc: check wether state is changed to state10 */
  91. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  92. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  93. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  94. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  95. /*@Desc: teardown statemachine */
  96. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  97. return 0;
  98. }
  99. /*@Test: test_state1_state2_back_transition test of event1 raised on default interface to enter state 3 */
  100. int test_state1_state2_back_transition()
  101. {
  102. Test_HierarchyStatemachine machine;
  103. Timer dummyTimer;
  104. EventPool eventPool;
  105. /*@Desc: setup initial statemachine */
  106. setupStatemachine(&machine, &dummyTimer, &eventPool);
  107. /*@Desc: check wether state is initial state (State9) */
  108. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  109. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  110. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  111. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  112. /*@Desc: raise event1 on default interface */
  113. test_Hierarchy_if_raise_event1(&machine.iface);
  114. /*@Desc: run the statechart for the first time (just as dummy) */
  115. test_HierarchyStatemachine_runCycle(&machine);
  116. /*@Desc: check wether state is changed to state3 */
  117. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  118. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  119. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  120. assert( test_Hierarchy_if_get_s2(&machine.iface) == 2 );
  121. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  122. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  123. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  124. /*@Desc: raise event6 on default interface */
  125. test_Hierarchy_if_raise_event6(&machine.iface);
  126. /*@Desc: run the statechart for the first time (just as dummy) */
  127. test_HierarchyStatemachine_runCycle(&machine);
  128. /*@Desc: check wether state is changed to state10 */
  129. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  130. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  131. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  132. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  133. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  134. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  135. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  136. /*@Desc: teardown statemachine */
  137. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  138. return 0;
  139. }
  140. /*@Test: test_state1_state2_back_transition test of event1 raised on default interface to enter state 3 */
  141. int test_state1_state2_back_with_event14_transition()
  142. {
  143. Test_HierarchyStatemachine machine;
  144. Timer dummyTimer;
  145. EventPool eventPool;
  146. /*@Desc: setup initial statemachine */
  147. setupStatemachine(&machine, &dummyTimer, &eventPool);
  148. /*@Desc: check wether state is initial state (State9) */
  149. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  150. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  151. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  152. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  153. /*@Desc: raise event1 on default interface */
  154. test_Hierarchy_if_raise_event1(&machine.iface);
  155. /*@Desc: run the statechart for the first time (just as dummy) */
  156. test_HierarchyStatemachine_runCycle(&machine);
  157. /*@Desc: check wether state is changed to state3 */
  158. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  159. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  160. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  161. assert( test_Hierarchy_if_get_s2(&machine.iface) == 2 );
  162. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  163. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  164. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  165. /*@Desc: raise event6 on default interface */
  166. test_Hierarchy_if_raise_event14(&machine.iface);
  167. /*@Desc: run the statechart for the first time (just as dummy) */
  168. test_HierarchyStatemachine_runCycle(&machine);
  169. /*@Desc: check wether state is changed to state10 */
  170. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  171. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  172. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  173. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  174. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  175. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  176. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  177. /*@Desc: teardown statemachine */
  178. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  179. return 0;
  180. }
  181. /*@Test: test_traverse_to_State5_back_with_event6_transition tests whether transition to state5 and back to state9 works correct */
  182. int test_traverse_to_State5_back_with_event6_transition()
  183. {
  184. Test_HierarchyStatemachine machine;
  185. Timer dummyTimer;
  186. EventPool eventPool;
  187. /*@Desc: setup initial statemachine */
  188. setupStatemachine(&machine, &dummyTimer, &eventPool);
  189. /*@Desc: check wether state is initial state (State9) */
  190. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  191. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  192. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  193. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  194. /*@Desc: raise event1 on default interface */
  195. test_Hierarchy_if_raise_event1(&machine.iface);
  196. /*@Desc: run the statechart cycle */
  197. test_HierarchyStatemachine_runCycle(&machine);
  198. /*@Desc: check wether state is changed to state3 */
  199. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  200. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  201. /*@Desc: raise event2 on default interface */
  202. test_Hierarchy_if_raise_event2(&machine.iface);
  203. /*@Desc: run the statechart cycle */
  204. test_HierarchyStatemachine_runCycle(&machine);
  205. /*@Desc: check wether state is changed to state3 */
  206. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  207. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  208. /*@Desc: check whether s2 is set to 3 as State 5 is in third hierarchy level */
  209. assert( test_Hierarchy_if_get_s2(&machine.iface) == 3 );
  210. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  211. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  212. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  213. /*@Desc: raise event6 on default interface */
  214. test_Hierarchy_if_raise_event6(&machine.iface);
  215. /*@Desc: run the statechart for the first time (just as dummy) */
  216. test_HierarchyStatemachine_runCycle(&machine);
  217. /*@Desc: check wether state is changed to state10 */
  218. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  219. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  220. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  221. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  222. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  223. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  224. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  225. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  226. /*@Desc: teardown statemachine */
  227. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  228. return 0;
  229. }
  230. /*@Test: test_default_var1 test behavior of var1 in default and other interface */
  231. int test_traverse_to_State5_back_with_event15_transition()
  232. {
  233. Test_HierarchyStatemachine machine;
  234. Timer dummyTimer;
  235. EventPool eventPool;
  236. /*@Desc: setup initial statemachine */
  237. setupStatemachine(&machine, &dummyTimer, &eventPool);
  238. /*@Desc: check wether state is initial state (State9) */
  239. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  240. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  241. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  242. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  243. /*@Desc: raise event1 on default interface */
  244. test_Hierarchy_if_raise_event1(&machine.iface);
  245. /*@Desc: run the statechart cycle */
  246. test_HierarchyStatemachine_runCycle(&machine);
  247. /*@Desc: check wether state is changed to state3 */
  248. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  249. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  250. /*@Desc: raise event2 on default interface */
  251. test_Hierarchy_if_raise_event2(&machine.iface);
  252. /*@Desc: run the statechart cycle */
  253. test_HierarchyStatemachine_runCycle(&machine);
  254. /*@Desc: check wether state is changed to state3 */
  255. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  256. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  257. /*@Desc: check whether s2 is set to 3 as State 5 is in third hierarchy level */
  258. assert( test_Hierarchy_if_get_s2(&machine.iface) == 3 );
  259. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  260. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  261. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  262. /*@Desc: raise event6 on default interface */
  263. test_Hierarchy_if_raise_event15(&machine.iface);
  264. /*@Desc: run the statechart for the first time (just as dummy) */
  265. test_HierarchyStatemachine_runCycle(&machine);
  266. /*@Desc: check wether state is changed to state10 */
  267. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  268. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State10") == 0);
  269. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  270. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  271. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  272. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  273. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  274. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  275. /*@Desc: teardown statemachine */
  276. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  277. return 0;
  278. }
  279. /*@Test: test_traverse_to_State7_back_with_event6_transition tests whether transition to state7 and back to state9 works correct */
  280. int test_traverse_to_State7_back_with_event6_transition()
  281. {
  282. Test_HierarchyStatemachine machine;
  283. Timer dummyTimer;
  284. EventPool eventPool;
  285. /*@Desc: setup initial statemachine */
  286. setupStatemachine(&machine, &dummyTimer, &eventPool);
  287. /*@Desc: check wether state is initial state (State9) */
  288. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  289. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  290. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  291. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  292. /*@Desc: raise event1 on default interface */
  293. test_Hierarchy_if_raise_event1(&machine.iface);
  294. /*@Desc: run the statechart cycle */
  295. test_HierarchyStatemachine_runCycle(&machine);
  296. /*@Desc: check wether state is changed to state3 */
  297. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  298. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  299. /*@Desc: raise event2 on default interface */
  300. test_Hierarchy_if_raise_event2(&machine.iface);
  301. /*@Desc: run the statechart cycle */
  302. test_HierarchyStatemachine_runCycle(&machine);
  303. /*@Desc: check wether state is changed to state5 */
  304. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  305. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  306. /*@Desc: raise event2 on default interface */
  307. test_Hierarchy_if_raise_event3(&machine.iface);
  308. /*@Desc: run the statechart cycle */
  309. test_HierarchyStatemachine_runCycle(&machine);
  310. /*@Desc: check wether state is changed to state7 */
  311. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  312. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State7") == 0);
  313. /*@Desc: check whether s2 is set to 3 as State 7 is in 4th hierarchy level */
  314. assert( test_Hierarchy_if_get_s2(&machine.iface) == 4 );
  315. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  316. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  317. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  318. /*@Desc: raise event6 on default interface */
  319. test_Hierarchy_if_raise_event6(&machine.iface);
  320. /*@Desc: run the statechart for the first time (just as dummy) */
  321. test_HierarchyStatemachine_runCycle(&machine);
  322. /*@Desc: check wether state is changed to state9 */
  323. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  324. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  325. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  326. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  327. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  328. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  329. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  330. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  331. /*@Desc: teardown statemachine */
  332. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  333. return 0;
  334. }
  335. /*@Test: test_traverse_to_State8_back_with_event6_transition tests whether transition to state8 and back to state9 works correct */
  336. int test_traverse_to_State8_back_with_event6_transition()
  337. {
  338. Test_HierarchyStatemachine machine;
  339. Timer dummyTimer;
  340. EventPool eventPool;
  341. /*@Desc: setup initial statemachine */
  342. setupStatemachine(&machine, &dummyTimer, &eventPool);
  343. /*@Desc: check wether state is initial state (State9) */
  344. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  345. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  346. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  347. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  348. /*@Desc: raise event1 on default interface */
  349. test_Hierarchy_if_raise_event1(&machine.iface);
  350. /*@Desc: run the statechart cycle */
  351. test_HierarchyStatemachine_runCycle(&machine);
  352. /*@Desc: check wether state is changed to state3 */
  353. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  354. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  355. /*@Desc: raise event2 on default interface */
  356. test_Hierarchy_if_raise_event2(&machine.iface);
  357. /*@Desc: run the statechart cycle */
  358. test_HierarchyStatemachine_runCycle(&machine);
  359. /*@Desc: check wether state is changed to state5 */
  360. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  361. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  362. /*@Desc: raise event3 on default interface */
  363. test_Hierarchy_if_raise_event3(&machine.iface);
  364. /*@Desc: run the statechart cycle */
  365. test_HierarchyStatemachine_runCycle(&machine);
  366. /*@Desc: check wether state is changed to state7 */
  367. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  368. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State7") == 0);
  369. /*@Desc: raise event4 on default interface */
  370. test_Hierarchy_if_raise_event4(&machine.iface);
  371. /*@Desc: run the statechart cycle */
  372. test_HierarchyStatemachine_runCycle(&machine);
  373. /*@Desc: check wether state is changed to state8 */
  374. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  375. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State8") == 0);
  376. /*@Desc: check whether s2 is set to 3 as State 7 is in 4th hierarchy level */
  377. assert( test_Hierarchy_if_get_s2(&machine.iface) == 4 );
  378. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  379. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  380. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  381. /*@Desc: raise event6 on default interface */
  382. test_Hierarchy_if_raise_event6(&machine.iface);
  383. /*@Desc: run the statechart for the first time (just as dummy) */
  384. test_HierarchyStatemachine_runCycle(&machine);
  385. /*@Desc: check wether state is changed to state9 */
  386. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  387. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  388. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  389. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  390. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  391. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  392. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  393. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  394. /*@Desc: teardown statemachine */
  395. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  396. return 0;
  397. }
  398. /*@Test: test_traverse_to_State8_back_with_event16_transition tests whether transition to state8 and back to state10 works correct */
  399. int test_traverse_to_State8_back_with_event16_transition()
  400. {
  401. Test_HierarchyStatemachine machine;
  402. Timer dummyTimer;
  403. EventPool eventPool;
  404. /*@Desc: setup initial statemachine */
  405. setupStatemachine(&machine, &dummyTimer, &eventPool);
  406. /*@Desc: check wether state is initial state (State9) */
  407. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  408. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  409. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  410. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  411. /*@Desc: raise event1 on default interface */
  412. test_Hierarchy_if_raise_event1(&machine.iface);
  413. /*@Desc: run the statechart cycle */
  414. test_HierarchyStatemachine_runCycle(&machine);
  415. /*@Desc: check wether state is changed to state3 */
  416. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  417. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  418. /*@Desc: raise event2 on default interface */
  419. test_Hierarchy_if_raise_event2(&machine.iface);
  420. /*@Desc: run the statechart cycle */
  421. test_HierarchyStatemachine_runCycle(&machine);
  422. /*@Desc: check wether state is changed to state5 */
  423. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  424. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  425. /*@Desc: raise event3 on default interface */
  426. test_Hierarchy_if_raise_event3(&machine.iface);
  427. /*@Desc: run the statechart cycle */
  428. test_HierarchyStatemachine_runCycle(&machine);
  429. /*@Desc: check wether state is changed to state7 */
  430. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  431. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State7") == 0);
  432. /*@Desc: raise event4 on default interface */
  433. test_Hierarchy_if_raise_event4(&machine.iface);
  434. /*@Desc: run the statechart cycle */
  435. test_HierarchyStatemachine_runCycle(&machine);
  436. /*@Desc: check wether state is changed to state8 */
  437. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  438. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State8") == 0);
  439. /*@Desc: check whether s2 is set to 3 as State 7 is in 4th hierarchy level */
  440. assert( test_Hierarchy_if_get_s2(&machine.iface) == 4 );
  441. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  442. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  443. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  444. /*@Desc: raise event16 on default interface */
  445. test_Hierarchy_if_raise_event16(&machine.iface);
  446. /*@Desc: run the statechart for the first time (just as dummy) */
  447. test_HierarchyStatemachine_runCycle(&machine);
  448. /*@Desc: check wether state is changed to state10 */
  449. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  450. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State10") == 0);
  451. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  452. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  453. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  454. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  455. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  456. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  457. /*@Desc: teardown statemachine */
  458. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  459. return 0;
  460. }
  461. int main(int argc, char** argv)
  462. {
  463. if (argc != 2)
  464. return -1;
  465. switch (atoi(argv[1])) {
  466. case 1:
  467. return test_state9_state10_transition();
  468. case 2:
  469. return test_state1_state2_back_transition();
  470. case 3:
  471. return test_traverse_to_State5_back_with_event6_transition();
  472. case 4:
  473. return test_traverse_to_State5_back_with_event15_transition();
  474. case 5:
  475. return test_state1_state2_back_with_event14_transition();
  476. case 6:
  477. return test_traverse_to_State7_back_with_event6_transition();
  478. case 7:
  479. return test_traverse_to_State8_back_with_event6_transition();
  480. case 8:
  481. return test_traverse_to_State8_back_with_event16_transition();
  482. }
  483. return -1;
  484. }