main.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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_DeepHistoryStatemachine.h"
  14. /*@DTestSuite: ShallowHistory Statechart Test (Test_ShallowHistory.sct) */
  15. #define MAXEVENTSPERTYPE 4
  16. const char* stateName[10] = {"State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "noState"};
  17. const int EnumTostateStr[10] = { _State1, _State2, _State3, _State4, _State5, _State6, _State7, _State8, _State9, last_state };
  18. const char* getStateString(uint32_t index)
  19. {
  20. int i;
  21. for (i=0; i<10; ++i)
  22. if (EnumTostateStr[i] == index)
  23. return stateName[i];
  24. return stateName[last_state];
  25. }
  26. void setupStatemachine(Test_DeepHistoryStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  27. {
  28. /* set up dummy Timer */
  29. dummyTimer_init(dummyTimer);
  30. /* Set up Event Pool */
  31. test_DeepHistory_eventPool_init_heap(eventPool, MAXEVENTSPERTYPE);
  32. /* initialize state machine */
  33. test_DeepHistoryStatemachine_init(machine, dummyTimer, eventPool);
  34. /* call all necessary enter functions */
  35. test_DeepHistoryStatemachine_enter(machine);
  36. }
  37. void teardownStatemachine(Test_DeepHistoryStatemachine* machine, Timer* dummyTimer, EventPool* eventPool)
  38. {
  39. /* call all exit actions for this state machine */
  40. test_DeepHistoryStatemachine_exit(machine);
  41. /* free all internal memory for this state machine */
  42. test_DeepHistoryStatemachine_destruct(machine);
  43. /* free the timer */
  44. timer_exit(dummyTimer);
  45. /* free all events in the event pool */
  46. eventPool_exit(eventPool);
  47. }
  48. /*@Test: test_default_var1 test behavior of var1 in default interface */
  49. int test_initialization()
  50. {
  51. return 0;
  52. }
  53. /*@Test: initialJumpToState3 test, if the initial state in state2 is activated */
  54. int initialJumpToState3()
  55. {
  56. Test_DeepHistoryStatemachine machine;
  57. Timer dummyTimer;
  58. EventPool eventPool;
  59. Test_DeepHistoryIf* iface;
  60. /*@Desc: setup initial statemachine */
  61. setupStatemachine(&machine, &dummyTimer, &eventPool);
  62. iface = test_DeepHistoryStatemachine_get_iface(&machine);
  63. /*@Desc: check the initial state at position 0 to be State1 */
  64. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  65. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  66. test_DeepHistory_if_raise_event1(iface);
  67. test_DeepHistoryStatemachine_runCycle(&machine);
  68. /*@Desc: check the initial state at position 1 to be no State */
  69. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  70. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  71. test_DeepHistory_if_raise_event2(iface);
  72. test_DeepHistoryStatemachine_runCycle(&machine);
  73. /*@Desc: check the initial state at position 2 to be no State */
  74. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  75. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  76. /*@Desc: teardown statemachine */
  77. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  78. return 0;
  79. }
  80. /*@Test: test_default_var1 test behavior of var1 in default and other interface */
  81. int initialJumpToState5()
  82. {
  83. Test_DeepHistoryStatemachine machine;
  84. Timer dummyTimer;
  85. EventPool eventPool;
  86. Test_DeepHistoryIf* iface;
  87. /*@Desc: setup initial statemachine */
  88. setupStatemachine(&machine, &dummyTimer, &eventPool);
  89. iface = test_DeepHistoryStatemachine_get_iface(&machine);
  90. /*@Desc: check the initial state at position 0 to be State1 */
  91. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  92. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  93. test_DeepHistory_if_raise_event1(iface);
  94. test_DeepHistoryStatemachine_runCycle(&machine);
  95. /*@Desc: check the initial state at position 1 to be no State */
  96. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  97. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State3") == 0);
  98. test_DeepHistory_if_raise_event3(iface);
  99. test_DeepHistoryStatemachine_runCycle(&machine);
  100. test_DeepHistory_if_raise_event4(iface);
  101. test_DeepHistoryStatemachine_runCycle(&machine);
  102. /*@Desc: check the initial state at position 2 to be no State */
  103. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  104. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  105. test_DeepHistory_if_raise_event2(iface);
  106. test_DeepHistoryStatemachine_runCycle(&machine);
  107. /*@Desc: check the initial state at position 0 to be State1 */
  108. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  109. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State1") == 0);
  110. test_DeepHistory_if_raise_event1(iface);
  111. test_DeepHistoryStatemachine_runCycle(&machine);
  112. /*@Desc: check the initial state at position 2 to be no State */
  113. printf("%s\n", getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)));
  114. assert( strcmp(getStateString(statemachineBase_getState((StatemachineBase*)&machine, 0)), "State5") == 0);
  115. /*@Desc: teardown statemachine */
  116. teardownStatemachine(&machine, &dummyTimer, &eventPool);
  117. return 0;
  118. }
  119. int main(int argc, char** argv)
  120. {
  121. if (argc != 2)
  122. return -1;
  123. switch (atoi(argv[1])) {
  124. case 1:
  125. return initialJumpToState3();
  126. case 2:
  127. return initialJumpToState5();
  128. }
  129. return -1;
  130. }