kripkomat/test_bad.c

88 lines
1.5 KiB
C

/*
* Test Bad
* Bad example.
*/
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; //oops
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;
}