main.c 26 KB

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