public void DoStepForward3()
        {
            var automaton = new AutomatonBubbleSort(new[] { -1});

            var state = automaton.DoStepForward();

            while (state.StateId != (int)AutomatonBubbleSort.States.FinalState)
            {
                state = automaton.DoStepForward();
            }

            Assert.IsTrue(ArrayEquals(new[] { -1}, state.Array));
        }
        public void DoStepForward4()
        {
            var automaton = new AutomatonBubbleSort(new[] { -1, 2, 0 });

            var state = automaton.DoStepForward();

            Assert.AreEqual((int)AutomatonBubbleSort.States.Condition, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 2, 0 }, state.Array));
            Assert.IsTrue(ArrayEquals(new [ ] {0, 1 }, state.SelectedElements.ToArray()));

            state = automaton.DoStepForward();

            Assert.AreEqual((int) AutomatonBubbleSort.States.Condition, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 2, 0 }, state.Array));
            Assert.IsTrue(ArrayEquals(new[] { 1, 2 }, state.SelectedElements.ToArray()));

            state = automaton.DoStepForward();

            Assert.AreEqual((int)AutomatonBubbleSort.States.SwappingAdjacentElements, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 0, 2 }, state.Array));
            Assert.IsTrue(ArrayEquals(new[] { 1, 2 }, state.SelectedElements.ToArray()));

            state = automaton.DoStepForward();

            Assert.AreEqual((int)AutomatonBubbleSort.States.Condition, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 0, 2 }, state.Array));
            Assert.IsTrue(ArrayEquals(new[] { 0, 1 }, state.SelectedElements.ToArray()));
            state = automaton.DoStepForward();

            Assert.AreEqual((int)AutomatonBubbleSort.States.Condition, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 0, 2 }, state.Array));
            Assert.IsTrue(ArrayEquals(new[] { 1, 2 }, state.SelectedElements.ToArray()));
            
            state = automaton.DoStepForward();

            while (state.StateId != (int) AutomatonBubbleSort.States.FinalState)
            {
                Assert.AreEqual((int)AutomatonBubbleSort.States.Condition, state.StateId);
                state = automaton.DoStepForward();
            }

            automaton.DoStepForward();
            Assert.AreEqual((int)AutomatonBubbleSort.States.FinalState, state.StateId);

            automaton.DoStepForward();
            Assert.AreEqual((int)AutomatonBubbleSort.States.FinalState, state.StateId);
            Assert.IsTrue(ArrayEquals(new[] { -1, 0, 2 }, state.Array));
        }