main.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  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_TransitionStatemachine.h"
  14. /*@DTestSuite: Hierachy Statechart Test (Test_Transition.sct) */
  15. #define MAXEVENTSPERTYPE 4
  16. const char* stateName[3] = {"State1", "State2", "noState"};
  17. const int EnumTostateStr[3] = {
  18. _Test_Transition_region0_State1,
  19. _Test_Transition_region0_State2,
  20. last_state };
  21. const char* getStateString(uint32_t index)
  22. {
  23. int i;
  24. for (i=0; i<10; ++i)
  25. if (EnumTostateStr[i] == index)
  26. return stateName[i];
  27. return stateName[last_state];
  28. }
  29. /* Timer Test Environment START */
  30. int myTimerSet = 0;
  31. uint32_t timerValue;
  32. sc_boolean timerPeriodic;
  33. void setMyTimer(const uint32_t evid, const uint32_t time_ms, sc_boolean periodic)
  34. {
  35. myTimerSet = 1;
  36. timerValue = time_ms;
  37. timerPeriodic = periodic;
  38. printf("myTimer: set event <%d> with time %dms\n", evid, time_ms);
  39. }
  40. void unsetMyTimer(const uint32_t evid)
  41. {
  42. myTimerSet = -1;
  43. timerValue = 0;
  44. timerPeriodic = bool_false;
  45. printf("myTimer: unset event <%d>\n", evid);
  46. }
  47. void myTimer_init(Timer* handle)
  48. {
  49. timer_setFPtr(handle, &setMyTimer, &unsetMyTimer);
  50. }
  51. /* Timer Test Environment END */
  52. void setupStatemachine(Test_TransitionStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  53. {
  54. /* set up dummy Timer */
  55. dummyTimer_init(dummyTimer);
  56. /* Set up Event Pool */
  57. test_Transition_eventPool_init_heap(eventPool, MAXEVENTSPERTYPE);
  58. /* initialize state machine */
  59. test_TransitionStatemachine_init(machine, dummyTimer, eventPool);
  60. /* call all necessary enter functions */
  61. test_TransitionStatemachine_enter(machine);
  62. }
  63. void setupStatemachineMyTimer(Test_TransitionStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  64. {
  65. /* set up dummy Timer */
  66. myTimer_init(dummyTimer);
  67. /* Set up Event Pool */
  68. test_Transition_eventPool_init_heap(eventPool, MAXEVENTSPERTYPE);
  69. /* initialize state machine */
  70. test_TransitionStatemachine_init(machine, dummyTimer, eventPool);
  71. /* call all necessary enter functions */
  72. test_TransitionStatemachine_enter(machine);
  73. }
  74. void teardownStatemachine(Test_TransitionStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  75. {
  76. /* call all exit actions for this state machine */
  77. test_TransitionStatemachine_exit(machine);
  78. /* free all internal memory for this state machine */
  79. test_TransitionStatemachine_destruct(machine);
  80. /* free the timer */
  81. timer_exit(dummyTimer);
  82. /* free all events in the event pool */
  83. eventPool_exit(eventPool);
  84. }
  85. /*@Test: test_default_var1 test behavior of var1 in default interface */
  86. int test_initialization()
  87. {
  88. return 0;
  89. }
  90. /*@Test: test_transition_with_AEvent1_value_gt5 test transition to state2 with event1 on Interface A carrying value 6 */
  91. int test_transition_with_AEvent1_value_gt5()
  92. {
  93. Test_TransitionStatemachine machine;
  94. Timer dummyTimer;
  95. EventPool eventPool;
  96. Test_TransitionIfA* ifaceA = 0;
  97. Test_TransitionIf* iface = 0;
  98. /*@Desc: setup initial statemachine */
  99. setupStatemachine(&machine, &dummyTimer, &eventPool);
  100. /*@Desc: receive interface for scope A */
  101. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  102. /*@Desc: receive interface for default scope */
  103. iface = test_TransitionStatemachine_get_iface(&machine);
  104. /*@Desc: check the initial state at position 0 */
  105. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  106. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  107. /*@Desc: set event1 on interface A with value 6 */
  108. test_Transition_if_A_raise_event1(ifaceA, 6);
  109. /*@Desc: run an explicit cycle */
  110. test_TransitionStatemachine_runCycle(&machine);
  111. /*@Desc: check the initial state at position 0 */
  112. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  113. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  114. /*@Desc: check whether i is set to 2 */
  115. assert( test_Transition_if_get_i(iface) == 1);
  116. /*@Desc: teardown statemachine */
  117. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  118. return 0;
  119. }
  120. /*@Test: test_transition_with_AEvent1_value_is_0 test whether there is no transition if event1 of interface A is set with value equal 0 */
  121. int test_transition_with_AEvent1_value_is_0()
  122. {
  123. Test_TransitionStatemachine machine;
  124. Timer dummyTimer;
  125. EventPool eventPool;
  126. Test_TransitionIfA* ifaceA = 0;
  127. Test_TransitionIf* iface = 0;
  128. /*@Desc: setup initial statemachine */
  129. setupStatemachine(&machine, &dummyTimer, &eventPool);
  130. /*@Desc: receive interface for scope A */
  131. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  132. /*@Desc: receive interface for default scope */
  133. iface = test_TransitionStatemachine_get_iface(&machine);
  134. /*@Desc: check the initial state at position 0 */
  135. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  136. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  137. /*@Desc: set event1 on interface A with value 0 */
  138. test_Transition_if_A_raise_event1(ifaceA, 0);
  139. /*@Desc: run an explicit cycle */
  140. test_TransitionStatemachine_runCycle(&machine);
  141. /*@Desc: check the initial state at position 0 */
  142. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  143. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  144. /*@Desc: check whether i is set to default 0 */
  145. assert( test_Transition_if_get_i(iface) == 0);
  146. /*@Desc: teardown statemachine */
  147. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  148. return 0;
  149. }
  150. /*@Test: test_transition_with_AEvent1_value_lt0 test transition to state2 with event1 on Interface A carrying value -1 */
  151. int test_transition_with_AEvent1_value_lt0()
  152. {
  153. Test_TransitionStatemachine machine;
  154. Timer dummyTimer;
  155. EventPool eventPool;
  156. Test_TransitionIfA* ifaceA = 0;
  157. Test_TransitionIf* iface = 0;
  158. /*@Desc: setup initial statemachine */
  159. setupStatemachine(&machine, &dummyTimer, &eventPool);
  160. /*@Desc: receive interface for scope A */
  161. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  162. /*@Desc: receive interface for default scope */
  163. iface = test_TransitionStatemachine_get_iface(&machine);
  164. /*@Desc: check the initial state at position 0 */
  165. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  166. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  167. /*@Desc: set event1 on interface A with value 6 */
  168. test_Transition_if_A_raise_event1(ifaceA, -1);
  169. /*@Desc: run an explicit cycle */
  170. test_TransitionStatemachine_runCycle(&machine);
  171. /*@Desc: check the initial state at position 0 */
  172. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  173. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  174. /*@Desc: check whether i is set to 2 */
  175. assert( test_Transition_if_get_i(iface) == 2);
  176. /*@Desc: teardown statemachine */
  177. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  178. return 0;
  179. }
  180. /*@Test: test_transition_with_no_event_and_i_eq_5 test whether there is a transition due to the guard [i==5]*/
  181. int test_transition_with_no_event_and_i_eq_5()
  182. {
  183. Test_TransitionStatemachine machine;
  184. Timer dummyTimer;
  185. EventPool eventPool;
  186. Test_TransitionIf* iface = 0;
  187. /*@Desc: setup initial statemachine */
  188. setupStatemachine(&machine, &dummyTimer, &eventPool);
  189. /*@Desc: receive interface for scope A */
  190. iface = test_TransitionStatemachine_get_iface(&machine);
  191. /*@Desc: check the initial state at position 0 */
  192. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  193. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  194. /*@Desc: set event1 on interface A with value 0 */
  195. test_Transition_if_set_i(iface, 5);
  196. /*@Desc: run an explicit cycle */
  197. test_TransitionStatemachine_runCycle(&machine);
  198. /*@Desc: check the initial state at position 0 */
  199. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  200. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  201. /*@Desc: teardown statemachine */
  202. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  203. return 0;
  204. }
  205. /*@Test: test_transition_with_no_event_and_i_eq_5 test whether there is a transition due to the guard [i==5]*/
  206. int test_transition_event2_set_with_event1_unconditioned()
  207. {
  208. Test_TransitionStatemachine machine;
  209. Timer dummyTimer;
  210. EventPool eventPool;
  211. Test_TransitionIfA* ifaceA = 0;
  212. /*@Desc: setup initial statemachine */
  213. setupStatemachine(&machine, &dummyTimer, &eventPool);
  214. /*@Desc: receive interface for scope A */
  215. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  216. /*@Desc: check the initial state at position 0 */
  217. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  218. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  219. /*@Desc: raise event2 on interface A*/
  220. test_Transition_if_A_raise_event2(ifaceA);
  221. /*@Desc: run an explicit cycle */
  222. test_TransitionStatemachine_runCycle(&machine);
  223. /*@Desc: this will actually produce a segmentation faults */
  224. /*@Desc: check the initial state at position 0 */
  225. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  226. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  227. /*@Desc: teardown statemachine */
  228. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  229. return 0;
  230. }
  231. int test_transition_event2_set_with_event1_value_set_before()
  232. {
  233. Test_TransitionStatemachine machine;
  234. Timer dummyTimer;
  235. EventPool eventPool;
  236. Test_TransitionIfA* ifaceA = 0;
  237. Test_TransitionIf* iface = 0;
  238. /*@Desc: setup initial statemachine */
  239. setupStatemachine(&machine, &dummyTimer, &eventPool);
  240. /*@Desc: receive interface for scope A */
  241. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  242. /*@Desc: receive interface for default scope */
  243. iface = test_TransitionStatemachine_get_iface(&machine);
  244. /*@Desc: check the initial state at position 0 */
  245. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  246. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  247. /*@Desc: raise event2 on interface A*/
  248. test_Transition_if_A_raise_event1(ifaceA, -6);
  249. /*@Desc: run an explicit cycle */
  250. test_TransitionStatemachine_runCycle(&machine);
  251. /*@Desc: check the initial state at position 0 */
  252. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  253. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  254. /*@Desc: raise event6 on default interface*/
  255. test_Transition_if_raise_event6(iface);
  256. /*@Desc: run an explicit cycle */
  257. test_TransitionStatemachine_runCycle(&machine);
  258. /*@Desc: check the initial state at position 0 */
  259. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  260. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  261. /*@Desc: raise event2 on interface A*/
  262. test_Transition_if_A_raise_event2(ifaceA);
  263. /*@Desc: run an explicit cycle */
  264. test_TransitionStatemachine_runCycle(&machine);
  265. /*@Desc: check the initial state at position 0 */
  266. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  267. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  268. /*@Desc: teardown statemachine */
  269. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  270. return 0;
  271. }
  272. int test_transition_with_Event3_j_lt_20()
  273. {
  274. Test_TransitionStatemachine machine;
  275. Timer dummyTimer;
  276. EventPool eventPool;
  277. Test_TransitionIfA* ifaceA = 0;
  278. Test_TransitionIf* iface = 0;
  279. /*@Desc: setup initial statemachine */
  280. setupStatemachine(&machine, &dummyTimer, &eventPool);
  281. /*@Desc: receive interface for scope A */
  282. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  283. /*@Desc: receive interface for default scope */
  284. iface = test_TransitionStatemachine_get_iface(&machine);
  285. /*@Desc: check the initial state at position 0 */
  286. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  287. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  288. /*@Desc: set event1 on interface A with value 0 */
  289. test_Transition_if_set_j(iface, 10);
  290. /*@Desc: set event1 on interface A with value 6 */
  291. test_Transition_if_A_raise_event3(ifaceA);
  292. /*@Desc: run an explicit cycle */
  293. test_TransitionStatemachine_runCycle(&machine);
  294. /*@Desc: check the initial state at position 0 */
  295. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  296. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  297. /*@Desc: teardown statemachine */
  298. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  299. return 0;
  300. }
  301. int test_transition_with_Event3_j_gt_30()
  302. {
  303. Test_TransitionStatemachine machine;
  304. Timer dummyTimer;
  305. EventPool eventPool;
  306. Test_TransitionIfA* ifaceA = 0;
  307. Test_TransitionIf* iface = 0;
  308. /*@Desc: setup initial statemachine */
  309. setupStatemachine(&machine, &dummyTimer, &eventPool);
  310. /*@Desc: receive interface for scope A */
  311. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  312. /*@Desc: receive interface for default scope */
  313. iface = test_TransitionStatemachine_get_iface(&machine);
  314. /*@Desc: check the initial state at position 0 */
  315. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  316. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  317. /*@Desc: set event1 on interface A with value 0 */
  318. test_Transition_if_set_j(iface, 40);
  319. /*@Desc: set event1 on interface A with value 6 */
  320. test_Transition_if_A_raise_event3(ifaceA);
  321. /*@Desc: run an explicit cycle */
  322. test_TransitionStatemachine_runCycle(&machine);
  323. /*@Desc: check the initial state at position 0 */
  324. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  325. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  326. /*@Desc: teardown statemachine */
  327. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  328. return 0;
  329. }
  330. int test_transition_with_Event3_j_eq_25()
  331. {
  332. Test_TransitionStatemachine machine;
  333. Timer dummyTimer;
  334. EventPool eventPool;
  335. Test_TransitionIfA* ifaceA = 0;
  336. Test_TransitionIf* iface = 0;
  337. /*@Desc: setup initial statemachine */
  338. setupStatemachine(&machine, &dummyTimer, &eventPool);
  339. /*@Desc: receive interface for scope A */
  340. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  341. /*@Desc: receive interface for default scope */
  342. iface = test_TransitionStatemachine_get_iface(&machine);
  343. /*@Desc: check the initial state at position 0 */
  344. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  345. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  346. /*@Desc: set variable j to value 25 */
  347. test_Transition_if_set_j(iface, 25);
  348. /*@Desc: set event3 on default interface */
  349. test_Transition_if_A_raise_event3(ifaceA);
  350. /*@Desc: run an explicit cycle */
  351. test_TransitionStatemachine_runCycle(&machine);
  352. /*@Desc: check the initial state at position 0 */
  353. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  354. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  355. /*@Desc: teardown statemachine */
  356. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  357. return 0;
  358. }
  359. int test_transition_with_Event4_j_gt_30()
  360. {
  361. Test_TransitionStatemachine machine;
  362. Timer dummyTimer;
  363. EventPool eventPool;
  364. Test_TransitionIfA* ifaceA = 0;
  365. Test_TransitionIf* iface = 0;
  366. /*@Desc: setup initial statemachine */
  367. setupStatemachine(&machine, &dummyTimer, &eventPool);
  368. /*@Desc: receive interface for scope A */
  369. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  370. /*@Desc: receive interface for default scope */
  371. iface = test_TransitionStatemachine_get_iface(&machine);
  372. /*@Desc: check the initial state at position 0 */
  373. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  374. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  375. /*@Desc: set variable j to value 40 */
  376. test_Transition_if_set_j(iface, 40);
  377. /*@Desc: set event4 on interface A */
  378. test_Transition_if_A_raise_event4(ifaceA);
  379. /*@Desc: run an explicit cycle */
  380. test_TransitionStatemachine_runCycle(&machine);
  381. /*@Desc: check the initial state at position 0 */
  382. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  383. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  384. /*@Desc: teardown statemachine */
  385. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  386. return 0;
  387. }
  388. int test_transition_with_Event4_j_lt_30()
  389. {
  390. Test_TransitionStatemachine machine;
  391. Timer dummyTimer;
  392. EventPool eventPool;
  393. Test_TransitionIfA* ifaceA = 0;
  394. Test_TransitionIf* iface = 0;
  395. /*@Desc: setup initial statemachine */
  396. setupStatemachine(&machine, &dummyTimer, &eventPool);
  397. /*@Desc: receive interface for scope A */
  398. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  399. /*@Desc: receive interface for default scope */
  400. iface = test_TransitionStatemachine_get_iface(&machine);
  401. /*@Desc: check the initial state at position 0 */
  402. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  403. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  404. /*@Desc: set event1 on interface A with value 0 */
  405. test_Transition_if_set_j(iface, 20);
  406. /*@Desc: set event1 on interface A with value 6 */
  407. test_Transition_if_A_raise_event4(ifaceA);
  408. /*@Desc: run an explicit cycle */
  409. test_TransitionStatemachine_runCycle(&machine);
  410. /*@Desc: check the initial state at position 0 */
  411. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  412. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  413. /*@Desc: teardown statemachine */
  414. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  415. return 0;
  416. }
  417. int test_after_transition_at_100_ms()
  418. {
  419. Test_TransitionStatemachine machine;
  420. Timer myTimer;
  421. EventPool eventPool;
  422. Test_TransitionIfA* ifaceA = 0;
  423. Test_TransitionIf* iface = 0;
  424. /*@Desc: setup initial statemachine */
  425. setupStatemachineMyTimer(&machine, &myTimer, &eventPool);
  426. /*@Desc: receive interface for scope A */
  427. ifaceA = test_TransitionStatemachine_get_ifaceA(&machine);
  428. /*@Desc: receive interface for default scope */
  429. iface = test_TransitionStatemachine_get_iface(&machine);
  430. /*@Desc: check the initial state at position 0 */
  431. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  432. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  433. /*Desc: check whether timer is set correctly */
  434. assert (timerValue == 100 || timerValue == 10000);
  435. assert (timerPeriodic == bool_false);
  436. /*@Desc: set event1 on interface A with value 0 */
  437. test_Transition_if_set_j(iface, 40);
  438. /*@Desc: set event1 on interface A with value 6 */
  439. test_Transition_if_A_raise_event4(ifaceA);
  440. /*@Desc: run an explicit cycle */
  441. test_TransitionStatemachine_runCycle(&machine);
  442. /*@Desc: check the initial state at position 0 */
  443. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  444. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  445. /*Desc: check whether timer is set correctly */
  446. assert (timerValue == 0 );
  447. assert (timerPeriodic == bool_false);
  448. /*@Desc: teardown statemachine */
  449. teardownStatemachine(&machine, &myTimer, &eventPool);
  450. return 0;
  451. }
  452. int test_after_transition_eventHandling_100ms()
  453. {
  454. Test_TransitionStatemachine machine;
  455. Timer myTimer;
  456. EventPool eventPool;
  457. Test_TransitionIfA* ifaceA = 0;
  458. Test_TransitionIf* iface = 0;
  459. _Event* time_100ms;
  460. /*@Desc: setup initial statemachine */
  461. setupStatemachineMyTimer(&machine, &myTimer, &eventPool);
  462. /*@Desc: check the initial state at position 0 */
  463. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  464. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  465. /*Desc: check whether timer is set correctly */
  466. assert (timerValue == 100 || timerValue == 10000);
  467. assert (timerPeriodic == bool_false);
  468. /*@Desc: create timer event */
  469. time_100ms = eventPool_createEvent(machine.base.eventPool, ev_state1_time_event_0);
  470. /*@Desc: set event1 on interface A with value 0 */
  471. statemachine_cy_setEvent((Statemachine_cy*)&machine, time_100ms);
  472. /*@Desc: run an explicit cycle */
  473. test_TransitionStatemachine_runCycle(&machine);
  474. /*@Desc: check the initial state at position 0 */
  475. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  476. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  477. /*Desc: check whether timer is set correctly */
  478. assert (timerValue == 0 );
  479. assert (timerPeriodic == bool_false);
  480. /*@Desc: teardown statemachine */
  481. teardownStatemachine(&machine, &myTimer, &eventPool);
  482. return 0;
  483. }
  484. int test_after_transition_eventHandling_10s()
  485. {
  486. Test_TransitionStatemachine machine;
  487. Timer myTimer;
  488. EventPool eventPool;
  489. Test_TransitionIfA* ifaceA = 0;
  490. Test_TransitionIf* iface = 0;
  491. _Event* time_100ms;
  492. /*@Desc: setup initial statemachine */
  493. setupStatemachineMyTimer(&machine, &myTimer, &eventPool);
  494. /*@Desc: check the initial state at position 0 */
  495. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  496. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  497. /*Desc: check whether timer is set correctly */
  498. assert (timerValue == 100 || timerValue == 10000);
  499. assert (timerPeriodic == bool_false);
  500. /*@Desc: create timer event */
  501. time_100ms = eventPool_createEvent(machine.base.eventPool, ev_state1_time_event_1);
  502. /*@Desc: set event1 on interface A with value 0 */
  503. statemachine_cy_setEvent((Statemachine_cy*)&machine, time_100ms);
  504. /*@Desc: run an explicit cycle */
  505. test_TransitionStatemachine_runCycle(&machine);
  506. /*@Desc: check the initial state at position 0 */
  507. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  508. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State2") == 0);
  509. /*Desc: check whether timer is set correctly */
  510. assert (timerValue == 0 );
  511. assert (timerPeriodic == bool_false);
  512. /*@Desc: teardown statemachine */
  513. teardownStatemachine(&machine, &myTimer, &eventPool);
  514. return 0;
  515. }
  516. int main(int argc, char** argv)
  517. {
  518. if (argc != 2)
  519. return -1;
  520. switch (atoi(argv[1])) {
  521. case 1:
  522. return test_transition_with_AEvent1_value_gt5();
  523. case 2:
  524. return test_transition_with_AEvent1_value_is_0();
  525. case 3:
  526. return test_transition_with_AEvent1_value_lt0();
  527. case 4:
  528. return test_transition_with_no_event_and_i_eq_5();
  529. case 5:
  530. return test_transition_event2_set_with_event1_unconditioned();
  531. case 6:
  532. return test_transition_event2_set_with_event1_value_set_before();
  533. case 7:
  534. return test_transition_with_Event3_j_lt_20();
  535. case 8:
  536. return test_transition_with_Event3_j_eq_25();
  537. case 9:
  538. return test_transition_with_Event3_j_gt_30();
  539. case 10:
  540. return test_transition_with_Event4_j_gt_30();
  541. case 11:
  542. return test_transition_with_Event4_j_lt_30();
  543. case 12:
  544. return test_after_transition_at_100_ms();
  545. case 13:
  546. return test_after_transition_eventHandling_100ms();
  547. case 14:
  548. return test_after_transition_eventHandling_10s();
  549. }
  550. return -1;
  551. }