main.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cassert>
  4. #include <cstring>
  5. #include <string>
  6. #include "Timer.h"
  7. #include "DummyTimer.h"
  8. #include "InterfaceTestStatemachineOOW.hpp"
  9. #include "InterfaceTestEvent.h"
  10. #define MAXEVENTSPERTYPE 4
  11. const char* stateName[6] = {"State1", "State2", "State3", "State4", "State5", "State6"};
  12. /*@Test: test_default_interface good case, guard matches */
  13. int test_default_interface_good()
  14. {
  15. /* set up dummy Timer */
  16. Timer dummyTimer;
  17. dummyTimer_init(&dummyTimer);
  18. integer retval;
  19. InterfaceTestStatemachineOOW machine(&dummyTimer);
  20. InterfaceTestIfOO interfaceTestIf = machine.get_iface();
  21. InterfaceTestIfOtherOO interfaceTestIfOther = machine.get_ifaceOther();
  22. InterfaceTestIfThirdOO interfaceTestIfThird = machine.get_ifaceThird();
  23. /*@Desc: check the initial state */
  24. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  25. assert( stateName[machine.getStates()[0]] == "State1");
  26. /*@Desc: raise event1 on default interface */
  27. interfaceTestIf.raise_event1();
  28. /*@DescInfo: Initial value for the guard is 2.3, which is bigger than 0, so the transition should be taken */
  29. /*@Desc: run an explicit cycle */
  30. machine.runCycle();
  31. /*@Desc: check whether the state is set to "State2" */
  32. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  33. assert( stateName[machine.getStates()[0]] == "State2");
  34. /*@Desc: check if the entry event2 is raised */
  35. assert( interfaceTestIf.is_event2_raised(&retval) == bool_true );
  36. /*@Desc: check if the return value of event2 is set to 22 */
  37. assert( retval == 22 );
  38. /*@Desc: raise event1 on default interface */
  39. interfaceTestIf.raise_event1();
  40. /*@Desc: run an explicit cycle */
  41. machine.runCycle();
  42. /*@Desc: check whether state has changed back to "State1" */
  43. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  44. assert( stateName[machine.getStates()[0]] == "State1");
  45. /*@Desc: check whether event2 is not raised any more */
  46. assert( interfaceTestIf.is_event2_raised(&retval) == bool_false );
  47. return 0;
  48. }
  49. /*@Test: test_default_interface good case, guard matches */
  50. int test_default_interface_bad()
  51. {
  52. /* set up dummy Timer */
  53. Timer dummyTimer;
  54. dummyTimer_init(&dummyTimer);
  55. integer retval = 55;
  56. InterfaceTestStatemachineOOW machine(&dummyTimer);
  57. InterfaceTestIfOO interfaceTestIf = machine.get_iface();
  58. InterfaceTestIfOtherOO interfaceTestIfOther = machine.get_ifaceOther();
  59. InterfaceTestIfThirdOO interfaceTestIfThird = machine.get_ifaceThird();
  60. /*@Desc: check the initial state */
  61. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  62. assert( stateName[machine.getStates()[0]] == "State1");
  63. /*@Desc: set variable var2 to -12.6 */
  64. interfaceTestIf.set_var2(-12.6);
  65. //interfaceTest_if_set_var2(&machine.interface, -12.6);
  66. /*@Desc: raise event1 on default interface */
  67. interfaceTestIf.raise_event1();
  68. // interfaceTest_if_raise_event1(&machine.interface);
  69. /*@DescInfo: Transition should not be taken, as guard with var2 is less than 0 */
  70. /*@Desc: run an explicit cycle */
  71. machine.runCycle();
  72. // interfaceTestStatemachine_runCycle(&machine);
  73. /*@Desc: check whether the state is still set to "State1" */
  74. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  75. assert( stateName[machine.getStates()[0]] == "State1");
  76. /*@Desc: check if the entry event2 is NOT raised */
  77. assert( interfaceTestIf.is_event2_raised(&retval) == bool_false );
  78. /*@Desc: check if the original retval has not been changed */
  79. assert( retval == 55 );
  80. /*@Desc: raise event1 on default interface */
  81. interfaceTestIf.raise_event1();
  82. //interfaceTest_if_raise_event1(&machine.interface);
  83. /*@Desc: set variable var2 to 213.55 (>0) */
  84. interfaceTestIf.set_var2(213.55);
  85. //interfaceTest_if_set_var2(&machine.interface, 213.55);
  86. /*@Desc: run an explicit cycle */
  87. machine.runCycle();
  88. //interfaceTestStatemachine_runCycle(&machine);
  89. /*@Desc: check whether state has changed back to "State2" */
  90. std::cout << "actual State: "<< stateName[machine.getStates()[0]] << std::endl;
  91. assert( stateName[machine.getStates()[0]] == "State2");
  92. /*@Desc: check whether event2 is raised */
  93. assert( interfaceTestIf.is_event2_raised(&retval) == bool_true );
  94. //assert( interfaceTest_if_is_event2_raised(&machine.interface, &retval) == bool_true );
  95. return 0;
  96. }
  97. ///*@Test: test_other_interface good case, guard matches */
  98. //int test_other_interface_good()
  99. //{
  100. // InterfaceTestStatemachine machine;
  101. // Timer dummyTimer;
  102. // EventPool eventPool;
  103. //
  104. // /*@Desc: setup initial statemachine */
  105. // setupStatemachine(&machine, &dummyTimer, &eventPool);
  106. //
  107. // /*@Desc: check the initial state */
  108. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  109. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  110. //
  111. // /*@Desc: raise event3 on other interface */
  112. // interfaceTest_if_other_raise_event3(&machine.interfaceOther);
  113. //
  114. // /*@DescInfo: Initial value for the guard is var3 == 1, which is the initial value, so the transition should be taken */
  115. //
  116. // /*@Desc: run an explicit cycle */
  117. // interfaceTestStatemachine_runCycle(&machine);
  118. //
  119. // /*@Desc: check whether the state is set to "State3" */
  120. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  121. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State3") == 0);
  122. //
  123. // /*@Desc: check if the entry event4 is raised */
  124. // assert( interfaceTest_if_other_is_event4_raised(&machine.interfaceOther) == bool_true );
  125. //
  126. // /*@Desc: raise event3 on other interface */
  127. // interfaceTest_if_other_raise_event3(&machine.interfaceOther);
  128. //
  129. // /*@Desc: run an explicit cycle */
  130. // interfaceTestStatemachine_runCycle(&machine);
  131. //
  132. // /*@Desc: check whether state has changed back to "State1" */
  133. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  134. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  135. //
  136. // /*@Desc: check whether event4 is not raised any more */
  137. // assert( interfaceTest_if_other_is_event4_raised(&machine.interfaceOther) == bool_false );
  138. //
  139. // /*@Desc: teardown statemachine */
  140. // teardownStatemachine(&machine, &dummyTimer, &eventPool);
  141. //
  142. // return 0;
  143. //}
  144. //
  145. //
  146. ///*@Test: test_default_interface good case, guard matches */
  147. //int test_other_interface_bad()
  148. //{
  149. // InterfaceTestStatemachine machine;
  150. // Timer dummyTimer;
  151. // EventPool eventPool;
  152. //
  153. // /*@Desc: setup initial statemachine */
  154. // setupStatemachine(&machine, &dummyTimer, &eventPool);
  155. //
  156. // /*@Desc: check the initial state */
  157. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  158. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  159. //
  160. // /*@Desc: set variable var3 to 2 in default interface */
  161. // interfaceTest_if_set_var3(&machine.interface, 2);
  162. //
  163. // /*@Desc: raise event1 on other interface */
  164. // interfaceTest_if_other_raise_event3(&machine.interfaceOther);
  165. //
  166. // /*@DescInfo: Transition should not be taken, as guard with var3 is not equal 1 */
  167. //
  168. // /*@Desc: run an explicit cycle */
  169. // interfaceTestStatemachine_runCycle(&machine);
  170. //
  171. // /*@Desc: check whether the state is still set to "State1" */
  172. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  173. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  174. //
  175. // /*@Desc: check if the entry event2 is NOT raised */
  176. // assert( interfaceTest_if_other_is_event4_raised(&machine.interfaceOther) == bool_false );
  177. //
  178. // /*@Desc: raise event1 on other interface */
  179. // interfaceTest_if_other_raise_event3(&machine.interfaceOther);
  180. //
  181. // /*@Desc: set variable var3 to 1 */
  182. // interfaceTest_if_set_var3(&machine.interface, 1);
  183. //
  184. // /*@Desc: run an explicit cycle */
  185. // interfaceTestStatemachine_runCycle(&machine);
  186. //
  187. // /*@Desc: check whether state has changed back to "State2" */
  188. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  189. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State3") == 0);
  190. //
  191. // /*@Desc: check whether event2 is raised */
  192. // assert( interfaceTest_if_other_is_event4_raised(&machine.interfaceOther) == bool_true );
  193. //
  194. // /*@Desc: teardown statemachine */
  195. // teardownStatemachine(&machine, &dummyTimer, &eventPool);
  196. //
  197. // return 0;
  198. //}
  199. //
  200. ///*@Test: test_third_interface good case, guard matches */
  201. //int test_third_interface_good()
  202. //{
  203. // InterfaceTestStatemachine machine;
  204. // Timer dummyTimer;
  205. // EventPool eventPool;
  206. // boolean retVal = bool_false;
  207. //
  208. // /*@Desc: setup initial statemachine */
  209. // setupStatemachine(&machine, &dummyTimer, &eventPool);
  210. //
  211. // /*@Desc: check the initial state */
  212. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  213. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  214. //
  215. // /*@Desc: raise event5 on other interface */
  216. // interfaceTest_if_third_raise_event5(&machine.interfaceThird);
  217. //
  218. // /*@Desc: set var1 to true */
  219. // interfaceTest_if_set_var1(&machine.interface, bool_true);
  220. //
  221. // /*@Desc: run an explicit cycle */
  222. // interfaceTestStatemachine_runCycle(&machine);
  223. //
  224. // /*@Desc: check whether the state is set to "State4" */
  225. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  226. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State4") == 0);
  227. //
  228. // /*@Desc: check if the entry event4 is raised */
  229. // assert( interfaceTest_if_third_is_event6_raised(&machine.interfaceThird, &retVal) == bool_true );
  230. //
  231. // /*@Desc: check whether returned event6 value is set to true */
  232. // assert( retVal == bool_true );
  233. //
  234. // /*@Desc: raise event5 on other interface */
  235. // interfaceTest_if_third_raise_event5(&machine.interfaceThird);
  236. //
  237. // /*@Desc: set retValue to false */
  238. // retVal = bool_false;
  239. //
  240. // /*@Desc: run an explicit cycle */
  241. // interfaceTestStatemachine_runCycle(&machine);
  242. //
  243. // /*@Desc: check whether state has changed back to "State1" */
  244. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  245. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  246. //
  247. // /*@Desc: check whether event4 is not raised any more */
  248. // assert( interfaceTest_if_third_is_event6_raised(&machine.interfaceThird, &retVal) == bool_false );
  249. //
  250. // /*@Desc: check whether returned event6 value is set to false */
  251. // assert( retVal == bool_false );
  252. //
  253. // /*@Desc: teardown statemachine */
  254. // teardownStatemachine(&machine, &dummyTimer, &eventPool);
  255. //
  256. // return 0;
  257. //}
  258. //
  259. ///*@Test: test_default_interface good case, guard matches */
  260. //int test_third_interface_bad()
  261. //{
  262. // InterfaceTestStatemachine machine;
  263. // Timer dummyTimer;
  264. // EventPool eventPool;
  265. //
  266. // boolean retVal = bool_false;
  267. //
  268. // /*@Desc: setup initial statemachine */
  269. // setupStatemachine(&machine, &dummyTimer, &eventPool);
  270. //
  271. // /*@Desc: check the initial state */
  272. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  273. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  274. //
  275. // /*@Desc: set variable var1 to false in default interface */
  276. // interfaceTest_if_set_var1(&machine.interface, bool_false);
  277. //
  278. // /*@Desc: raise event1 on third interface */
  279. // interfaceTest_if_third_raise_event5(&machine.interfaceThird);
  280. //
  281. // /*@DescInfo: Transition should not be taken, as guard with var3 is not equal 1 */
  282. //
  283. // /*@Desc: run an explicit cycle */
  284. // interfaceTestStatemachine_runCycle(&machine);
  285. //
  286. // /*@Desc: check whether the state is still set to "State1" */
  287. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  288. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  289. //
  290. // /*@Desc: check if the entry event2 is NOT raised */
  291. // assert( interfaceTest_if_third_is_event6_raised(&machine.interfaceThird, &retVal) == bool_false );
  292. //
  293. // /*@Desc: raise event5 on third interface */
  294. // interfaceTest_if_third_raise_event5(&machine.interfaceThird);
  295. //
  296. // /*@Desc: set variable var1 to true on default interface */
  297. // interfaceTest_if_set_var1(&machine.interface, bool_true);
  298. //
  299. // /*@Desc: run an explicit cycle */
  300. // interfaceTestStatemachine_runCycle(&machine);
  301. //
  302. // /*@Desc: check whether state has changed back to "State2" */
  303. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  304. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State4") == 0);
  305. //
  306. // /*@Desc: check whether event2 is raised */
  307. // assert( interfaceTest_if_third_is_event6_raised(&machine.interfaceThird, &retVal) == bool_true );
  308. //
  309. // /*@Desc: check whether returned event6 value is set to true */
  310. // assert( retVal == bool_true );
  311. //
  312. // /*@Desc: teardown statemachine */
  313. // teardownStatemachine(&machine, &dummyTimer, &eventPool);
  314. //
  315. // return 0;
  316. //}
  317. //
  318. //int test_namespaces()
  319. //{
  320. // InterfaceTestStatemachine machine;
  321. // Timer dummyTimer;
  322. // EventPool eventPool;
  323. //
  324. // /*@Desc: setup initial statemachine */
  325. // setupStatemachine(&machine, &dummyTimer, &eventPool);
  326. //
  327. // /*@Desc: check the initial state */
  328. // printf("%s\n", stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)]);
  329. // assert( strcmp(stateName[statemachineBase_getState((StatemachineBase*)&machine, 0)], "State1") == 0);
  330. //
  331. // /*@Desc: check correct initialization of variable v1 */
  332. // assert( interfaceTest_if_other_get_v1(&machine.interfaceOther) == 5 );
  333. //
  334. // /*@Desc: set third interface variable v1 to 52.83 */
  335. // interfaceTest_if_third_set_v1( &machine.interfaceThird, 52.83 );
  336. //
  337. // /*@Desc: set other interface variable to 8877 */
  338. // interfaceTest_if_other_set_v1( &machine.interfaceOther, 8877 );
  339. //
  340. // /*@DescInfo: toogle through all states */
  341. //
  342. // /*@Desc: raise event1 on default event */
  343. // interfaceTest_if_raise_event1( &machine.interface);
  344. //
  345. // /*@Desc: run an explicit cycle */
  346. // interfaceTestStatemachine_runCycle(&machine);
  347. //
  348. // /*@Desc: raise event1 on default event */
  349. // interfaceTest_if_raise_event1( &machine.interface);
  350. //
  351. // /*@Desc: run an explicit cycle */
  352. // interfaceTestStatemachine_runCycle(&machine);
  353. //
  354. // /*@Desc: raise event3 on default event */
  355. // interfaceTest_if_other_raise_event3( &machine.interfaceOther);
  356. //
  357. // /*@Desc: run an explicit cycle */
  358. // interfaceTestStatemachine_runCycle(&machine);
  359. //
  360. // /*@Desc: raise event3 on default event */
  361. // interfaceTest_if_other_raise_event3( &machine.interfaceOther);
  362. //
  363. // /*@Desc: run an explicit cycle */
  364. // interfaceTestStatemachine_runCycle(&machine);
  365. //
  366. // /*@Desc: set var1 of default interface to true */
  367. // interfaceTest_if_set_var1( &machine.interface, bool_true);
  368. //
  369. // /*@Desc: raise event5 on default event */
  370. // interfaceTest_if_third_raise_event5( &machine.interfaceThird);
  371. //
  372. // /*@Desc: run an explicit cycle */
  373. // interfaceTestStatemachine_runCycle(&machine);
  374. //
  375. // /*@Desc: raise event5 on default event */
  376. // interfaceTest_if_third_raise_event5( &machine.interfaceThird);
  377. //
  378. // /*@Desc: run an explicit cycle */
  379. // interfaceTestStatemachine_runCycle(&machine);
  380. //
  381. // printf ("%f", interfaceTest_if_third_get_v1(&machine.interfaceThird));
  382. //
  383. // /*@Desc: check if v1 of third interface is still 52.83 */
  384. // assert( interfaceTest_if_third_get_v1(&machine.interfaceThird) > 52.82 &&
  385. // interfaceTest_if_third_get_v1(&machine.interfaceThird) < 52.84 );
  386. //
  387. // /*@Desc: check if v1 of other interface is still 8877 */
  388. // assert( interfaceTest_if_other_get_v1(&machine.interfaceOther) == 8877 );
  389. //
  390. // /*@Desc: teardown statemachine */
  391. // teardownStatemachine(&machine, &dummyTimer, &eventPool);
  392. //
  393. // return 0;
  394. //}
  395. //
  396. int main(int argc, char** argv)
  397. {
  398. if (argc != 2)
  399. return -1;
  400. switch (atoi(argv[1])) {
  401. case 1:
  402. return test_default_interface_good();
  403. case 2:
  404. return test_default_interface_bad();
  405. // case 3:
  406. // return test_other_interface_good();
  407. // case 4:
  408. // return test_other_interface_bad();
  409. // case 5:
  410. // return test_third_interface_good();
  411. // case 6:
  412. // return test_third_interface_bad();
  413. // case 7:
  414. // return test_namespaces();
  415. }
  416. return 0;
  417. }