main.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  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(Test_HierarchyStatemachine* machine, 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(machine, dummyTimer, eventPool);
  45. /* call all necessary enter functions */
  46. test_HierarchyStatemachine_enter(machine);
  47. }
  48. void teardownStatemachine(Test_HierarchyStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  49. {
  50. /* call all exit actions for this state machine */
  51. test_HierarchyStatemachine_exit(machine);
  52. /* free all internal memory for this state machine */
  53. test_HierarchyStatemachine_destruct(machine);
  54. /* free the timer */
  55. timer_exit(dummyTimer);
  56. /* free all events in the event pool */
  57. eventPool_exit(eventPool);
  58. }
  59. /*@Test: test_default_var1 test behavior of var1 in default interface */
  60. int test_initialization()
  61. {
  62. return 0;
  63. }
  64. /*@Test: test_state9_state10_transition test behavior of var1 in default and other interface */
  65. int test_state9_state10_transition()
  66. {
  67. Test_HierarchyStatemachine machine;
  68. Timer dummyTimer;
  69. EventPool eventPool;
  70. /*@Desc: setup initial statemachine */
  71. setupStatemachine(&machine, &dummyTimer, &eventPool);
  72. /*@Desc: check wether state is 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: run the statechart for the first time (just as dummy) */
  78. test_HierarchyStatemachine_runCycle(&machine);
  79. /*@Desc: check wether state is still in initial state (State9) */
  80. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  81. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  82. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  83. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  84. /*@Desc: raise event9 on default interface */
  85. test_Hierarchy_if_raise_event9(&machine.iface);
  86. /*@Desc: run the statechart to trigger state change */
  87. test_HierarchyStatemachine_runCycle(&machine);
  88. /*@Desc: check wether state is changed to state10 */
  89. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  90. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State10") == 0);
  91. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  92. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  93. /*@Desc: raise event10 on default interface */
  94. test_Hierarchy_if_raise_event10(&machine.iface);
  95. /*@Desc: run the statechart to trigger state change */
  96. test_HierarchyStatemachine_runCycle(&machine);
  97. /*@Desc: check wether state is changed to state10 */
  98. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  99. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  100. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  101. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  102. /*@Desc: teardown statemachine */
  103. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  104. return 0;
  105. }
  106. /*@Test: test_state1_state2_back_transition test of event1 raised on default interface to enter state 3 */
  107. int test_state1_state2_back_transition()
  108. {
  109. Test_HierarchyStatemachine machine;
  110. Timer dummyTimer;
  111. EventPool eventPool;
  112. /*@Desc: setup initial statemachine */
  113. setupStatemachine(&machine, &dummyTimer, &eventPool);
  114. /*@Desc: check wether state is initial state (State9) */
  115. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  116. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  117. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  118. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  119. /*@Desc: raise event1 on default interface */
  120. test_Hierarchy_if_raise_event1(&machine.iface);
  121. /*@Desc: run the statechart for the first time (just as dummy) */
  122. test_HierarchyStatemachine_runCycle(&machine);
  123. /*@Desc: check wether state is changed to state3 */
  124. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  125. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 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(&machine.iface) == 2 );
  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(&machine.iface));
  130. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  131. /*@Desc: raise event6 on default interface */
  132. test_Hierarchy_if_raise_event6(&machine.iface);
  133. /*@Desc: run the statechart for the first time (just as dummy) */
  134. test_HierarchyStatemachine_runCycle(&machine);
  135. /*@Desc: check wether state is changed to state10 */
  136. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  137. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  138. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  139. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  140. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  141. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  142. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  143. /*@Desc: teardown statemachine */
  144. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  145. return 0;
  146. }
  147. /*@Test: test_state1_state2_back_transition test of event1 raised on default interface to enter state 3 */
  148. int test_state1_state2_back_with_event14_transition()
  149. {
  150. Test_HierarchyStatemachine machine;
  151. Timer dummyTimer;
  152. EventPool eventPool;
  153. /*@Desc: setup initial statemachine */
  154. setupStatemachine(&machine, &dummyTimer, &eventPool);
  155. /*@Desc: check wether state is initial state (State9) */
  156. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  157. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  158. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  159. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  160. /*@Desc: raise event1 on default interface */
  161. test_Hierarchy_if_raise_event1(&machine.iface);
  162. /*@Desc: run the statechart for the first time (just as dummy) */
  163. test_HierarchyStatemachine_runCycle(&machine);
  164. /*@Desc: check wether state is changed to state3 */
  165. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  166. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  167. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  168. assert( test_Hierarchy_if_get_s2(&machine.iface) == 2 );
  169. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  170. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  171. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  172. /*@Desc: raise event6 on default interface */
  173. test_Hierarchy_if_raise_event14(&machine.iface);
  174. /*@Desc: run the statechart for the first time (just as dummy) */
  175. test_HierarchyStatemachine_runCycle(&machine);
  176. /*@Desc: check wether state is changed to state10 */
  177. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  178. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  179. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  180. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  181. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  182. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  183. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  184. /*@Desc: teardown statemachine */
  185. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  186. return 0;
  187. }
  188. /*@Test: test_traverse_to_State5_back_with_event6_transition tests whether transition to state5 and back to state9 works correct */
  189. int test_traverse_to_State5_back_with_event6_transition()
  190. {
  191. Test_HierarchyStatemachine machine;
  192. Timer dummyTimer;
  193. EventPool eventPool;
  194. /*@Desc: setup initial statemachine */
  195. setupStatemachine(&machine, &dummyTimer, &eventPool);
  196. /*@Desc: check wether state is initial state (State9) */
  197. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  198. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  199. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  200. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  201. /*@Desc: raise event1 on default interface */
  202. test_Hierarchy_if_raise_event1(&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)), "State3") == 0);
  208. /*@Desc: raise event2 on default interface */
  209. test_Hierarchy_if_raise_event2(&machine.iface);
  210. /*@Desc: run the statechart cycle */
  211. test_HierarchyStatemachine_runCycle(&machine);
  212. /*@Desc: check wether state is changed to state3 */
  213. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  214. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  215. /*@Desc: check whether s2 is set to 3 as State 5 is in third hierarchy level */
  216. assert( test_Hierarchy_if_get_s2(&machine.iface) == 3 );
  217. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  218. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  219. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  220. /*@Desc: raise event6 on default interface */
  221. test_Hierarchy_if_raise_event6(&machine.iface);
  222. /*@Desc: run the statechart for the first time (just as dummy) */
  223. test_HierarchyStatemachine_runCycle(&machine);
  224. /*@Desc: check wether state is changed to state10 */
  225. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  226. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  227. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  228. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  229. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  230. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  231. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  232. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  233. /*@Desc: teardown statemachine */
  234. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  235. return 0;
  236. }
  237. /*@Test: test_default_var1 test behavior of var1 in default and other interface */
  238. int test_traverse_to_State5_back_with_event15_transition()
  239. {
  240. Test_HierarchyStatemachine machine;
  241. Timer dummyTimer;
  242. EventPool eventPool;
  243. /*@Desc: setup initial statemachine */
  244. setupStatemachine(&machine, &dummyTimer, &eventPool);
  245. /*@Desc: check wether state is initial state (State9) */
  246. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  247. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  248. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  249. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  250. /*@Desc: raise event1 on default interface */
  251. test_Hierarchy_if_raise_event1(&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)), "State3") == 0);
  257. /*@Desc: raise event2 on default interface */
  258. test_Hierarchy_if_raise_event2(&machine.iface);
  259. /*@Desc: run the statechart cycle */
  260. test_HierarchyStatemachine_runCycle(&machine);
  261. /*@Desc: check wether state is changed to state3 */
  262. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  263. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  264. /*@Desc: check whether s2 is set to 3 as State 5 is in third hierarchy level */
  265. assert( test_Hierarchy_if_get_s2(&machine.iface) == 3 );
  266. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  267. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  268. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  269. /*@Desc: raise event6 on default interface */
  270. test_Hierarchy_if_raise_event15(&machine.iface);
  271. /*@Desc: run the statechart for the first time (just as dummy) */
  272. test_HierarchyStatemachine_runCycle(&machine);
  273. /*@Desc: check wether state is changed to state10 */
  274. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  275. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State10") == 0);
  276. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  277. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  278. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  279. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  280. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  281. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  282. /*@Desc: teardown statemachine */
  283. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  284. return 0;
  285. }
  286. /*@Test: test_traverse_to_State7_back_with_event6_transition tests whether transition to state7 and back to state9 works correct */
  287. int test_traverse_to_State7_back_with_event6_transition()
  288. {
  289. Test_HierarchyStatemachine machine;
  290. Timer dummyTimer;
  291. EventPool eventPool;
  292. /*@Desc: setup initial statemachine */
  293. setupStatemachine(&machine, &dummyTimer, &eventPool);
  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(&machine.iface) == 2 );
  299. /*@Desc: raise event1 on default interface */
  300. test_Hierarchy_if_raise_event1(&machine.iface);
  301. /*@Desc: run the statechart cycle */
  302. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface);
  308. /*@Desc: run the statechart cycle */
  309. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface);
  315. /*@Desc: run the statechart cycle */
  316. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface) == 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(&machine.iface));
  324. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  325. /*@Desc: raise event6 on default interface */
  326. test_Hierarchy_if_raise_event6(&machine.iface);
  327. /*@Desc: run the statechart for the first time (just as dummy) */
  328. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface));
  334. assert( test_Hierarchy_if_get_s2(&machine.iface) == 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(&machine.iface));
  337. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  338. /*@Desc: teardown statemachine */
  339. teardownStatemachine(&machine, &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(&machine, &dummyTimer, &eventPool);
  350. /*@Desc: check wether state is initial state (State9) */
  351. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  352. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  353. /*@Desc: check whether s1 is set to 2 as State 9 is in second hierarchy level */
  354. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  355. /*@Desc: raise event1 on default interface */
  356. test_Hierarchy_if_raise_event1(&machine.iface);
  357. /*@Desc: run the statechart cycle */
  358. test_HierarchyStatemachine_runCycle(&machine);
  359. /*@Desc: check wether state is changed to state3 */
  360. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  361. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  362. /*@Desc: raise event2 on default interface */
  363. test_Hierarchy_if_raise_event2(&machine.iface);
  364. /*@Desc: run the statechart cycle */
  365. test_HierarchyStatemachine_runCycle(&machine);
  366. /*@Desc: check wether state is changed to state5 */
  367. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  368. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  369. /*@Desc: raise event3 on default interface */
  370. test_Hierarchy_if_raise_event3(&machine.iface);
  371. /*@Desc: run the statechart cycle */
  372. test_HierarchyStatemachine_runCycle(&machine);
  373. /*@Desc: check wether state is changed to state7 */
  374. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  375. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State7") == 0);
  376. /*@Desc: raise event4 on default interface */
  377. test_Hierarchy_if_raise_event4(&machine.iface);
  378. /*@Desc: run the statechart cycle */
  379. test_HierarchyStatemachine_runCycle(&machine);
  380. /*@Desc: check wether state is changed to state8 */
  381. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  382. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State8") == 0);
  383. /*@Desc: check whether s2 is set to 3 as State 7 is in 4th hierarchy level */
  384. assert( test_Hierarchy_if_get_s2(&machine.iface) == 4 );
  385. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  386. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  387. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  388. /*@Desc: raise event6 on default interface */
  389. test_Hierarchy_if_raise_event6(&machine.iface);
  390. /*@Desc: run the statechart for the first time (just as dummy) */
  391. test_HierarchyStatemachine_runCycle(&machine);
  392. /*@Desc: check wether state is changed to state9 */
  393. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  394. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State9") == 0);
  395. /*@Desc: check whether s2 is set to 2 as State 3 is in second hierarchy level */
  396. printf( " s2 = %d\n", test_Hierarchy_if_get_s2(&machine.iface));
  397. assert( test_Hierarchy_if_get_s2(&machine.iface) == 0 );
  398. /*@Desc: check whether s1 is set to 0 as State 1 has been left */
  399. printf( " s1 = %d\n", test_Hierarchy_if_get_s1(&machine.iface));
  400. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  401. /*@Desc: teardown statemachine */
  402. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  403. return 0;
  404. }
  405. /*@Test: test_traverse_to_State8_back_with_event16_transition tests whether transition to state8 and back to state10 works correct */
  406. int test_traverse_to_State8_back_with_event16_transition()
  407. {
  408. Test_HierarchyStatemachine machine;
  409. Timer dummyTimer;
  410. EventPool eventPool;
  411. /*@Desc: setup initial statemachine */
  412. setupStatemachine(&machine, &dummyTimer, &eventPool);
  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(&machine.iface) == 2 );
  418. /*@Desc: raise event1 on default interface */
  419. test_Hierarchy_if_raise_event1(&machine.iface);
  420. /*@Desc: run the statechart cycle */
  421. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface);
  427. /*@Desc: run the statechart cycle */
  428. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface);
  434. /*@Desc: run the statechart cycle */
  435. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface);
  441. /*@Desc: run the statechart cycle */
  442. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface) == 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(&machine.iface));
  450. assert( test_Hierarchy_if_get_s1(&machine.iface) == 0 );
  451. /*@Desc: raise event16 on default interface */
  452. test_Hierarchy_if_raise_event16(&machine.iface);
  453. /*@Desc: run the statechart for the first time (just as dummy) */
  454. test_HierarchyStatemachine_runCycle(&machine);
  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(&machine.iface));
  460. assert( test_Hierarchy_if_get_s2(&machine.iface) == 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(&machine.iface));
  463. assert( test_Hierarchy_if_get_s1(&machine.iface) == 2 );
  464. /*@Desc: teardown statemachine */
  465. teardownStatemachine(&machine, &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. }