diff --git a/ruleset.go b/ruleset.go index bda3208..e97601b 100644 --- a/ruleset.go +++ b/ruleset.go @@ -1,10 +1,36 @@ package rules +type RulesetError string + +func (err RulesetError) Error() string { return string(err) } + const ( MoveUp = "up" MoveDown = "down" MoveRight = "right" MoveLeft = "left" + + BoardSizeSmall = 7 + BoardSizeMedium = 11 + BoardSizeLarge = 19 + + SnakeMaxHealth = 100 + SnakeStartSize = 3 + + // bvanvugt - TODO: Just return formatted strings instead of codes? + NotEliminated = "" + EliminatedByCollision = "snake-collision" + EliminatedBySelfCollision = "snake-self-collision" + EliminatedByOutOfHealth = "out-of-health" + EliminatedByHeadToHeadCollision = "head-collision" + EliminatedByOutOfBounds = "wall-collision" + + // TODO - Error consts + ErrorTooManySnakes = RulesetError("too many snakes for fixed start positions") + ErrorNoRoomForSnake = RulesetError("not enough space to place snake") + ErrorNoRoomForFood = RulesetError("not enough space to place food") + ErrorNoMoveFound = RulesetError("move not provided for snake") + ErrorZeroLengthSnake = RulesetError("snake is length zero") ) type Point struct { @@ -37,7 +63,3 @@ type Ruleset interface { CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error) IsGameOver(state *BoardState) (bool, error) } - -type RulesetError string - -func (err RulesetError) Error() string { return string(err) } diff --git a/ruleset_test.go b/ruleset_test.go new file mode 100644 index 0000000..61ca220 --- /dev/null +++ b/ruleset_test.go @@ -0,0 +1,12 @@ +package rules + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestRulesetError(t *testing.T) { + err := (error)(RulesetError("test error string")) + require.Equal(t, "test error string", err.Error()) +} diff --git a/standard.go b/standard.go index 50cab2b..d4ab0bd 100644 --- a/standard.go +++ b/standard.go @@ -1,7 +1,6 @@ package rules import ( - //"errors" "math/rand" "sort" ) @@ -11,33 +10,6 @@ type StandardRuleset struct { MinimumFood int32 } -const ( - BoardSizeSmall = 7 - BoardSizeMedium = 11 - BoardSizeLarge = 19 - - SnakeMaxHealth = 100 - SnakeStartSize = 3 - - // bvanvugt - TODO: Just return formatted strings instead of codes? - NotEliminated = "" - EliminatedByCollision = "snake-collision" - EliminatedBySelfCollision = "snake-self-collision" - EliminatedByOutOfHealth = "out-of-health" - EliminatedByHeadToHeadCollision = "head-collision" - EliminatedByOutOfBounds = "wall-collision" - - // TODO - Error consts - ErrorTooManySnakes = RulesetError("too many snakes for fixed start positions") - ErrorNoRoomForSnake = RulesetError("not enough space to place snake") - ErrorNoRoomForFood = RulesetError("not enough space to place food") - ErrorNoMoveFound = RulesetError("move not provided for snake") - - // TODO: These two error codes seem equivalent, Do we only need one ? - ErrorSizeZeroBody = RulesetError("found snake with zero size body") - ErrorZeroLengthSnake = RulesetError("snake is length zero") -) - func (r *StandardRuleset) CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error) { initialBoardState := &BoardState{ Height: height, @@ -263,7 +235,7 @@ func (r *StandardRuleset) moveSnakes(b *BoardState, moves []SnakeMove) error { } if len(snake.Body) == 0 { - return ErrorSizeZeroBody + return ErrorZeroLengthSnake } moveFound := false for _, move := range moves { diff --git a/standard_test.go b/standard_test.go index 56aacd7..178d9a6 100644 --- a/standard_test.go +++ b/standard_test.go @@ -1,7 +1,6 @@ package rules import ( - //"errors" "math" "math/rand" "testing" @@ -513,7 +512,7 @@ func TestCreateNextBoardState(t *testing.T) { {ID: "one", Move: MoveUp}, {ID: "two", Move: MoveDown}, }, - ErrorSizeZeroBody, + ErrorZeroLengthSnake, nil, }, { @@ -940,7 +939,7 @@ func TestMoveSnakesWrongID(t *testing.T) { r := StandardRuleset{} err := r.moveSnakes(b, moves) - require.Equal(t, ErrorNoMoveFound, err) // TODO: @bvanvugt is this a place where an "==" comparision should be used ? + require.Equal(t, ErrorNoMoveFound, err) } func TestMoveSnakesNotEnoughMoves(t *testing.T) {