private bool IsMovingWithinBoundaries(IRover rover) { var currentPosition = _roverService.GetRoverPosition(rover); var heading = _roverService.GetRoverHeading(rover); var gridMaxY = _gridService.GetGridHeight(_grid) - 1; var gridMaxX = _gridService.GetGridWidth(_grid) - 1; switch (heading) { case Heading.North: if (currentPosition.Y == gridMaxY) { return(false); } break; case Heading.East: if (currentPosition.X == gridMaxX) { return(false); } break; case Heading.South: if (currentPosition.Y == 0) { return(false); } break; case Heading.West: if (currentPosition.X == 0) { return(false); } break; default: throw new ArgumentOutOfRangeException(); } return(true); }