public void TestTransitions()
{
FiniteStateMachine <State> fsm = new FiniteStateMachine <State>();
fsm.AddTransition(State.A, State.B, State.C);
fsm.AddTransition(State.B, State.C);
fsm.AddTransition(State.C, State.A);
fsm.Start(State.A);
Assert.IsTrue(fsm.CurrentState == State.A);
fsm.TransitionTo(State.B);
Assert.IsTrue(fsm.CurrentState == State.B);
Assert.That(() => fsm.TransitionTo(State.A), Throws.ArgumentException);
fsm.TransitionToIfExists(State.A);
Assert.IsTrue(fsm.CurrentState == State.B);
fsm.TransitionTo(State.C);
Assert.IsTrue(fsm.CurrentState == State.C);
fsm.TransitionTo(State.A);
Assert.IsTrue(fsm.CurrentState == State.A);
fsm.TransitionTo(State.C);
Assert.IsTrue(fsm.CurrentState == State.C);
Assert.That(() => fsm.TransitionTo(State.B), Throws.ArgumentException);
}