Add game over detection to each ruleset.

This commit is contained in:
Brad Van Vugt 2020-05-17 14:22:09 -07:00
parent 44b6b94666
commit 71fc6bf503
5 changed files with 150 additions and 2 deletions

View file

@ -1155,3 +1155,72 @@ func TestMaybeSpawnFood(t *testing.T) {
}
}
}
func TestIsGameOver(t *testing.T) {
tests := []struct {
Snakes []Snake
Expected bool
}{
{[]Snake{}, true},
{[]Snake{{}}, true},
{[]Snake{{}, {}}, false},
{[]Snake{{}, {}, {}, {}, {}}, false},
{
[]Snake{
{EliminatedCause: EliminatedByCollision},
{EliminatedCause: NotEliminated},
},
true,
},
{
[]Snake{
{EliminatedCause: NotEliminated},
{EliminatedCause: EliminatedByCollision},
{EliminatedCause: NotEliminated},
{EliminatedCause: NotEliminated},
},
false,
},
{
[]Snake{
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
},
true,
},
{
[]Snake{
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: NotEliminated},
},
true,
},
{
[]Snake{
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: EliminatedByOutOfBounds},
{EliminatedCause: NotEliminated},
{EliminatedCause: NotEliminated},
},
false,
},
}
r := StandardRuleset{}
for _, test := range tests {
b := &BoardState{
Height: 11,
Width: 11,
Snakes: test.Snakes,
Food: []Point{},
}
actual, err := r.IsGameOver(b)
require.NoError(t, err)
require.Equal(t, test.Expected, actual)
}
}