public void BasicTestWithFluentInterface()
        {
            StateMachineBuilder <States> builder =
                StateMachineBuilder <States>
                .New()
                .State(States.R)
                .State(States.G)
                .State(States.B)

                .Transition(States.R, States.G)
                .Transition(States.R, States.B)
                .Transition(States.G, States.R)
                .Transition(States.G, States.B)
                .Transition(States.B, States.R)
                .Transition(States.B, States.G)

                .Entering(States.R, (state) => Assert.AreEqual(States.R, state.Name))
                .Entering(States.G, (state) => Assert.AreEqual(States.G, state.Name))
                .Entering(States.B, (state) => Assert.AreEqual(States.B, state.Name))

                .Exiting(States.R, (state) => Assert.AreEqual(States.R, state.Name))
                .Exiting(States.G, (state) => Assert.AreEqual(States.G, state.Name))
                .Exiting(States.B, (state) => Assert.AreEqual(States.B, state.Name))

                .GoingTo(States.R, States.G, (from, to) => { Assert.AreEqual(States.R, from.Name); Assert.AreEqual(States.G, to.Name); })
                .GoingTo(States.R, States.B, (from, to) => { Assert.AreEqual(States.R, from.Name); Assert.AreEqual(States.B, to.Name); })
                .GoingTo(States.G, States.R, (from, to) => { Assert.AreEqual(States.G, from.Name); Assert.AreEqual(States.R, to.Name); })
                .GoingTo(States.G, States.B, (from, to) => { Assert.AreEqual(States.G, from.Name); Assert.AreEqual(States.B, to.Name); })
                .GoingTo(States.B, States.R, (from, to) => { Assert.AreEqual(States.B, from.Name); Assert.AreEqual(States.R, to.Name); })
                .GoingTo(States.B, States.G, (from, to) => { Assert.AreEqual(States.B, from.Name); Assert.AreEqual(States.G, to.Name); })

                .OnTransiting((obj, e) => Assert.IsTrue((obj as StateMachine <States>).IsTransiting))
                .OnTransited((obj, e) => Assert.IsFalse((obj as StateMachine <States>).IsTransiting))
            ;

            builder.GoToState(States.R);
            builder.GoToState(States.G);
            builder.GoToState(States.B);
        }