public void Execute(McNxtBrick brick, SortRail sortRail, BallPosition position)
        {
            int tacho = sortRail.GetTachoToPosition(position);
            MotorDirection motorDirection = MotorDirection.Forward;

            if (tacho < 0)
            {
                motorDirection = MotorDirection.Backward;
            }

            var absTacho = (uint)Math.Abs(tacho);

            if (absTacho != 0)
            {

                Debug.WriteLine("Heading for position {0} with tacho {1}",
                                position,
                                tacho);

                int resultTacho = MotorHelper.RunAndWaitOnCompletion(
                    (McNxtMotor)brick.MotorA,
                    absTacho,
                    motorDirection);

                sortRail.CurrentTacho += resultTacho;
            }
        }
            public void ShouldFailOnPosition15()
            {
                // Arange
                var sortRail = new SortRail();

                // Act
                sortRail.GetTachoToPosition((BallPosition) 15);

                // Assert
                // Expected exception thrown
            }
            public void ShouldReturn1000ForBall6ByCurrentTacho1640()
            {
                // Arange
                var sortRail = new SortRail {CurrentTacho = 1640};
                const int expected = 1000;

                // Act
                int result = sortRail.GetTachoToPosition(BallPosition.Six);

                // Assert
                Assert.AreEqual(expected, result);
            }
            public void ShouldReturn0ForBallPivotByCurrentTacho4950()
            {
                // Arange
                var sortRail = new SortRail {CurrentTacho = 4950};
                const int expected = 0;

                // Act
                int result = sortRail.GetTachoToPosition(BallPosition.Swap);

                // Assert
                Assert.AreEqual(expected, result);
            }