typedef char bool; typedef enum { STATE_I = 0, STATE_A, STATE_B, STATE_C, STATE_D } testfsm_state_t; typedef struct { testfsm_state_t m_state; bool m_a; bool m_b; } testfsm_t; void process(testfsm_t *p_fsm, const bool input) { testfsm_state_t nextState = p_fsm->m_state; p_fsm->m_a = false; p_fsm->m_b = false; switch(p_fsm->m_state) { case STATE_I: if (!input) nextState = STATE_A; else nextState = STATE_B; break; case STATE_A: p_fsm->m_a = true; if (!input) nextState = STATE_D; else nextState = STATE_C; break; case STATE_B: p_fsm->m_a = true; p_fsm->m_b = true; nextState = STATE_C; break; case STATE_C: p_fsm->m_b = true; nextState = STATE_A; break; case STATE_D: nextState = STATE_B; break; } p_fsm->m_state = nextState; } bool randbool(int throws) { bool stillTrue = true; for (int i = 0; i < throws; ++i) { stillTrue &= rand() & 1; } return stillTrue; } int main() { testfsm_t fsm = { .m_state = STATE_I, .m_a = false, .m_b = false }; bool input = false; srand(0); for (int j = 0; j < 100; ++j) { input = randbool(1); process(&fsm, input); } return 0; }