main.c 25 KB

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