From 7854e11e511350e97b49c1f0f49306b68cc71551 Mon Sep 17 00:00:00 2001 From: Brad Van Vugt <1531419+bvanvugt@users.noreply.github.com> Date: Sun, 5 Jan 2020 17:08:05 -0800 Subject: [PATCH 1/3] Package name rulesets -> rules. --- ruleset.go | 2 +- standard.go | 2 +- standard_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruleset.go b/ruleset.go index f62b550..e1fa9bb 100644 --- a/ruleset.go +++ b/ruleset.go @@ -1,4 +1,4 @@ -package rulesets +package rules const ( MoveUp = "up" diff --git a/standard.go b/standard.go index 7ff8e50..ed1c1f5 100644 --- a/standard.go +++ b/standard.go @@ -1,4 +1,4 @@ -package rulesets +package rules import ( "errors" diff --git a/standard_test.go b/standard_test.go index 93691ec..fe4dca2 100644 --- a/standard_test.go +++ b/standard_test.go @@ -1,4 +1,4 @@ -package rulesets +package rules import ( "errors" From 9c13dea6c083f463a6a05852c9b3fd9843fef9d2 Mon Sep 17 00:00:00 2001 From: Brad Van Vugt <1531419+bvanvugt@users.noreply.github.com> Date: Sun, 5 Jan 2020 21:03:54 -0800 Subject: [PATCH 2/3] Add error cases to standard move resolution. --- standard.go | 10 +++++++ standard_test.go | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/standard.go b/standard.go index ed1c1f5..f5b147c 100644 --- a/standard.go +++ b/standard.go @@ -181,6 +181,13 @@ func (r *StandardRuleset) ResolveMoves(prevState *BoardState, moves []SnakeMove) } func (r *StandardRuleset) moveSnakes(b *BoardState, moves []SnakeMove) error { + if len(moves) < len(b.Snakes) { + return errors.New("not enough snake moves") + } + if len(moves) > len(b.Snakes) { + return errors.New("too many snake moves") + } + for _, move := range moves { var snake *Snake for i := 0; i < len(b.Snakes); i++ { @@ -188,6 +195,9 @@ func (r *StandardRuleset) moveSnakes(b *BoardState, moves []SnakeMove) error { snake = &b.Snakes[i] } } + if snake == nil { + return errors.New("snake not found for move") + } // Do not move eliminated snakes if snake.EliminatedCause != NotEliminated { diff --git a/standard_test.go b/standard_test.go index fe4dca2..be2b016 100644 --- a/standard_test.go +++ b/standard_test.go @@ -340,6 +340,77 @@ func TestMoveSnakes(t *testing.T) { } } +func TestMoveSnakesWrongID(t *testing.T) { + b := &BoardState{ + Snakes: []Snake{ + { + ID: "one", + Body: []Point{{1, 1}}, + }, + }, + } + moves := []SnakeMove{ + { + ID: "not found", + Move: MoveUp, + }, + } + + r := StandardRuleset{} + err := r.moveSnakes(b, moves) + require.Equal(t, err, errors.New("snake not found")) +} + +func TestMoveSnakesNotEnoughMoves(t *testing.T) { + b := &BoardState{ + Snakes: []Snake{ + { + ID: "one", + Body: []Point{{1, 1}}, + }, + { + ID: "two", + Body: []Point{{2, 2}}, + }, + }, + } + moves := []SnakeMove{ + { + ID: "two", + Move: MoveUp, + }, + } + + r := StandardRuleset{} + err := r.moveSnakes(b, moves) + require.Equal(t, err, errors.New("not enough snake moves")) +} + +func TestMoveSnakesTooManyMoves(t *testing.T) { + b := &BoardState{ + Snakes: []Snake{ + { + ID: "one", + Body: []Point{{1, 1}}, + }, + }, + } + moves := []SnakeMove{ + { + ID: "one", + Move: MoveUp, + }, + { + ID: "two", + Move: MoveUp, + }, + } + + r := StandardRuleset{} + err := r.moveSnakes(b, moves) + require.Equal(t, err, errors.New("too many snake moves")) +} + func TestIsKnownBoardSize(t *testing.T) { tests := []struct { Width int32 From b69d768b13d9dfc306635c9a1257bb3b99768e80 Mon Sep 17 00:00:00 2001 From: Brad Van Vugt <1531419+bvanvugt@users.noreply.github.com> Date: Sun, 5 Jan 2020 21:53:11 -0800 Subject: [PATCH 3/3] correct error message --- standard_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standard_test.go b/standard_test.go index be2b016..788b1ea 100644 --- a/standard_test.go +++ b/standard_test.go @@ -358,7 +358,7 @@ func TestMoveSnakesWrongID(t *testing.T) { r := StandardRuleset{} err := r.moveSnakes(b, moves) - require.Equal(t, err, errors.New("snake not found")) + require.Equal(t, err, errors.New("snake not found for move")) } func TestMoveSnakesNotEnoughMoves(t *testing.T) {