/// <summary>
        ///   Moves one step in the indicated direction.
        /// </summary>
        /// <param name="direction">
        ///   A signed integer value indicating The direction to step. Any positive value results in a single forward step.
        ///   any negative value results in a backward step. Zero results in no step.
        /// </param>
        public void MoveOneStep(int direction)
        {
            var safeDirection = Math.Sign(direction);

            if (safeDirection == 0)
            {
                return; // Not moving.
            }
            RaiseBeforeStep(this);
            stepper.PerformStep(safeDirection);
            currentPosition += safeDirection;
            if (currentPosition > limitOfTravel || currentPosition < 0)
            {
                WrapPosition();
            }
        }