main.c 26 KB

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