change all "int32" types to "int" (#75)

This commit is contained in:
Torben 2022-05-25 11:17:41 -07:00 committed by GitHub
parent 2d8342018e
commit 3bd1e47bb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 176 additions and 176 deletions

View file

@ -3,17 +3,17 @@ package rules
import "fmt"
type BoardState struct {
Turn int32
Height int32
Width int32
Turn int
Height int
Width int
Food []Point
Snakes []Snake
Hazards []Point
}
type Point struct {
X int32
Y int32
X int
Y int
}
// Makes it easier to copy sample points out of Go logs and test failures.
@ -24,14 +24,14 @@ func (p Point) GoString() string {
type Snake struct {
ID string
Body []Point
Health int32
Health int
EliminatedCause string
EliminatedOnTurn int32
EliminatedOnTurn int
EliminatedBy string
}
// NewBoardState returns an empty but fully initialized BoardState
func NewBoardState(width, height int32) *BoardState {
func NewBoardState(width, height int) *BoardState {
return &BoardState{
Turn: 0,
Height: height,
@ -66,7 +66,7 @@ func (prevState *BoardState) Clone() *BoardState {
// "default" board state with snakes and food.
// In a real game, the engine may generate the board without calling this
// function, or customize the results based on game-specific settings.
func CreateDefaultBoardState(rand Rand, width int32, height int32, snakeIDs []string) (*BoardState, error) {
func CreateDefaultBoardState(rand Rand, width int, height int, snakeIDs []string) (*BoardState, error) {
initialBoardState := NewBoardState(width, height)
err := PlaceSnakesAutomatically(rand, initialBoardState, snakeIDs)
@ -101,7 +101,7 @@ func PlaceSnakesFixed(rand Rand, b *BoardState, snakeIDs []string) error {
}
// Create start 8 points
mn, md, mx := int32(1), (b.Width-1)/2, b.Width-2
mn, md, mx := 1, (b.Width-1)/2, b.Width-2
cornerPoints := []Point{
{mn, mn},
{mn, mx},
@ -207,7 +207,7 @@ func PlaceFoodAutomatically(rand Rand, b *BoardState) error {
if isKnownBoardSize(b) {
return PlaceFoodFixed(rand, b)
}
return PlaceFoodRandomly(rand, b, int32(len(b.Snakes)))
return PlaceFoodRandomly(rand, b, len(b.Snakes))
}
func PlaceFoodFixed(rand Rand, b *BoardState) error {
@ -289,8 +289,8 @@ func PlaceFoodFixed(rand Rand, b *BoardState) error {
}
// PlaceFoodRandomly adds up to n new food to the board in random unoccupied squares
func PlaceFoodRandomly(rand Rand, b *BoardState, n int32) error {
for i := int32(0); i < n; i++ {
func PlaceFoodRandomly(rand Rand, b *BoardState, n int) error {
for i := 0; i < n; i++ {
unoccupiedPoints := GetUnoccupiedPoints(b, false)
if len(unoccupiedPoints) > 0 {
newFood := unoccupiedPoints[rand.Intn(len(unoccupiedPoints))]
@ -300,7 +300,7 @@ func PlaceFoodRandomly(rand Rand, b *BoardState, n int32) error {
return nil
}
func absInt32(n int32) int32 {
func absInt(n int) int {
if n < 0 {
return -n
}
@ -323,10 +323,10 @@ func GetEvenUnoccupiedPoints(b *BoardState) []Point {
}
func GetUnoccupiedPoints(b *BoardState, includePossibleMoves bool) []Point {
pointIsOccupied := map[int32]map[int32]bool{}
pointIsOccupied := map[int]map[int]bool{}
for _, p := range b.Food {
if _, xExists := pointIsOccupied[p.X]; !xExists {
pointIsOccupied[p.X] = map[int32]bool{}
pointIsOccupied[p.X] = map[int]bool{}
}
pointIsOccupied[p.X][p.Y] = true
}
@ -336,7 +336,7 @@ func GetUnoccupiedPoints(b *BoardState, includePossibleMoves bool) []Point {
}
for i, p := range snake.Body {
if _, xExists := pointIsOccupied[p.X]; !xExists {
pointIsOccupied[p.X] = map[int32]bool{}
pointIsOccupied[p.X] = map[int]bool{}
}
pointIsOccupied[p.X][p.Y] = true
@ -349,7 +349,7 @@ func GetUnoccupiedPoints(b *BoardState, includePossibleMoves bool) []Point {
}
for _, nextP := range nextMovePoints {
if _, xExists := pointIsOccupied[nextP.X]; !xExists {
pointIsOccupied[nextP.X] = map[int32]bool{}
pointIsOccupied[nextP.X] = map[int]bool{}
}
pointIsOccupied[nextP.X][nextP.Y] = true
}
@ -358,8 +358,8 @@ func GetUnoccupiedPoints(b *BoardState, includePossibleMoves bool) []Point {
}
unoccupiedPoints := []Point{}
for x := int32(0); x < b.Width; x++ {
for y := int32(0); y < b.Height; y++ {
for x := 0; x < b.Width; x++ {
for y := 0; y < b.Height; y++ {
if _, xExists := pointIsOccupied[x]; xExists {
if isOccupied, yExists := pointIsOccupied[x][y]; yExists {
if isOccupied {
@ -373,8 +373,8 @@ func GetUnoccupiedPoints(b *BoardState, includePossibleMoves bool) []Point {
return unoccupiedPoints
}
func getDistanceBetweenPoints(a, b Point) int32 {
return absInt32(a.X-b.X) + absInt32(a.Y-b.Y)
func getDistanceBetweenPoints(a, b Point) int {
return absInt(a.X-b.X) + absInt(a.Y-b.Y)
}
func isKnownBoardSize(b *BoardState) bool {

View file

@ -19,8 +19,8 @@ func sortPoints(p []Point) {
func TestCreateDefaultBoardState(t *testing.T) {
tests := []struct {
Height int32
Width int32
Height int
Width int
IDs []string
ExpectedNumFood int
Err error
@ -196,15 +196,15 @@ func TestPlaceSnakesDefault(t *testing.T) {
for _, test := range tests {
t.Run(fmt.Sprint(test.BoardState.Width, test.BoardState.Height, len(test.SnakeIDs)), func(t *testing.T) {
require.Equal(t, test.BoardState.Width*test.BoardState.Height, int32(len(GetUnoccupiedPoints(test.BoardState, true))))
require.Equal(t, test.BoardState.Width*test.BoardState.Height, len(GetUnoccupiedPoints(test.BoardState, true)))
err := PlaceSnakesAutomatically(MaxRand, test.BoardState, test.SnakeIDs)
require.Equal(t, test.Err, err, "Snakes: %d", len(test.BoardState.Snakes))
if err == nil {
for i := 0; i < len(test.BoardState.Snakes); i++ {
require.Len(t, test.BoardState.Snakes[i].Body, 3)
for _, point := range test.BoardState.Snakes[i].Body {
require.GreaterOrEqual(t, point.X, int32(0))
require.GreaterOrEqual(t, point.Y, int32(0))
require.GreaterOrEqual(t, point.X, 0)
require.GreaterOrEqual(t, point.Y, 0)
require.Less(t, point.X, test.BoardState.Width)
require.Less(t, point.Y, test.BoardState.Height)
}
@ -400,8 +400,8 @@ func TestPlaceFood(t *testing.T) {
require.NoError(t, err)
require.Equal(t, test.ExpectedFood, len(test.BoardState.Food))
for _, point := range test.BoardState.Food {
require.GreaterOrEqual(t, point.X, int32(0))
require.GreaterOrEqual(t, point.Y, int32(0))
require.GreaterOrEqual(t, point.X, 0)
require.GreaterOrEqual(t, point.Y, 0)
require.Less(t, point.X, test.BoardState.Width)
require.Less(t, point.Y, test.BoardState.Height)
}
@ -590,7 +590,7 @@ func TestGetDistanceBetweenPoints(t *testing.T) {
tests := []struct {
A Point
B Point
Expected int32
Expected int
}{
{Point{0, 0}, Point{0, 0}, 0},
{Point{0, 0}, Point{1, 0}, 1},
@ -611,8 +611,8 @@ func TestGetDistanceBetweenPoints(t *testing.T) {
func TestIsKnownBoardSize(t *testing.T) {
tests := []struct {
Width int32
Height int32
Width int
Height int
Expected bool
}{
{1, 1, false},

View file

@ -32,25 +32,25 @@ Usage:
battlesnake play [flags]
Flags:
-W, --width int32 Width of Board (default 11)
-H, --height int32 Height of Board (default 11)
-W, --width int Width of Board (default 11)
-H, --height int Height of Board (default 11)
-n, --name stringArray Name of Snake
-u, --url stringArray URL of Snake
-S, --squad stringArray Squad of Snake
-t, --timeout int32 Request Timeout (default 500)
-t, --timeout int Request Timeout (default 500)
-s, --sequential Use Sequential Processing
-g, --gametype string Type of Game Rules (default "standard")
-v, --viewmap View the Map Each Turn
-c, --color Use color to draw the map
-r, --seed int Random Seed (default 1649588785026867900)
-d, --delay int32 Turn Delay in Milliseconds
-D, --duration int32 Minimum Turn Duration in Milliseconds
-d, --delay int Turn Delay in Milliseconds
-D, --duration int Minimum Turn Duration in Milliseconds
--debug-requests Log body of all requests sent
-o, --output string File path to output game state to. Existing files will be overwritten
--foodSpawnChance int32 Percentage chance of spawning a new food every round (default 15)
--minimumFood int32 Minimum food to keep on the board every turn (default 1)
--hazardDamagePerTurn int32 Health damage a snake will take when ending its turn in a hazard (default 14)
--shrinkEveryNTurns int32 In Royale mode, the number of turns between generating new hazards (default 25)
--foodSpawnChance int Percentage chance of spawning a new food every round (default 15)
--minimumFood int Minimum food to keep on the board every turn (default 1)
--hazardDamagePerTurn int Health damage a snake will take when ending its turn in a hazard (default 14)
--shrinkEveryNTurns int In Royale mode, the number of turns between generating new hazards (default 25)
-h, --help help for play
Global Flags:

View file

@ -35,28 +35,28 @@ type SnakeState struct {
}
var GameId string
var Turn int32
var Turn int
var HttpClient http.Client
var Width int32
var Height int32
var Width int
var Height int
var Names []string
var URLs []string
var Squads []string
var Timeout int32
var TurnDuration int32
var Timeout int
var TurnDuration int
var Sequential bool
var GameType string
var ViewMap bool
var UseColor bool
var Seed int64
var TurnDelay int32
var TurnDelay int
var DebugRequests bool
var Output string
var FoodSpawnChance int32
var MinimumFood int32
var HazardDamagePerTurn int32
var ShrinkEveryNTurns int32
var FoodSpawnChance int
var MinimumFood int
var HazardDamagePerTurn int
var ShrinkEveryNTurns int
var defaultConfig = map[string]string{
// default to standard ruleset
@ -79,26 +79,26 @@ var playCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(playCmd)
playCmd.Flags().Int32VarP(&Width, "width", "W", 11, "Width of Board")
playCmd.Flags().Int32VarP(&Height, "height", "H", 11, "Height of Board")
playCmd.Flags().IntVarP(&Width, "width", "W", 11, "Width of Board")
playCmd.Flags().IntVarP(&Height, "height", "H", 11, "Height of Board")
playCmd.Flags().StringArrayVarP(&Names, "name", "n", nil, "Name of Snake")
playCmd.Flags().StringArrayVarP(&URLs, "url", "u", nil, "URL of Snake")
playCmd.Flags().StringArrayVarP(&Names, "squad", "S", nil, "Squad of Snake")
playCmd.Flags().Int32VarP(&Timeout, "timeout", "t", 500, "Request Timeout")
playCmd.Flags().IntVarP(&Timeout, "timeout", "t", 500, "Request Timeout")
playCmd.Flags().BoolVarP(&Sequential, "sequential", "s", false, "Use Sequential Processing")
playCmd.Flags().StringVarP(&GameType, "gametype", "g", "standard", "Type of Game Rules")
playCmd.Flags().BoolVarP(&ViewMap, "viewmap", "v", false, "View the Map Each Turn")
playCmd.Flags().BoolVarP(&UseColor, "color", "c", false, "Use color to draw the map")
playCmd.Flags().Int64VarP(&Seed, "seed", "r", time.Now().UTC().UnixNano(), "Random Seed")
playCmd.Flags().Int32VarP(&TurnDelay, "delay", "d", 0, "Turn Delay in Milliseconds")
playCmd.Flags().Int32VarP(&TurnDuration, "duration", "D", 0, "Minimum Turn Duration in Milliseconds")
playCmd.Flags().IntVarP(&TurnDelay, "delay", "d", 0, "Turn Delay in Milliseconds")
playCmd.Flags().IntVarP(&TurnDuration, "duration", "D", 0, "Minimum Turn Duration in Milliseconds")
playCmd.Flags().BoolVar(&DebugRequests, "debug-requests", false, "Log body of all requests sent")
playCmd.Flags().StringVarP(&Output, "output", "o", "", "File path to output game state to. Existing files will be overwritten")
playCmd.Flags().Int32Var(&FoodSpawnChance, "foodSpawnChance", 15, "Percentage chance of spawning a new food every round")
playCmd.Flags().Int32Var(&MinimumFood, "minimumFood", 1, "Minimum food to keep on the board every turn")
playCmd.Flags().Int32Var(&HazardDamagePerTurn, "hazardDamagePerTurn", 14, "Health damage a snake will take when ending its turn in a hazard")
playCmd.Flags().Int32Var(&ShrinkEveryNTurns, "shrinkEveryNTurns", 25, "In Royale mode, the number of turns between generating new hazards")
playCmd.Flags().IntVar(&FoodSpawnChance, "foodSpawnChance", 15, "Percentage chance of spawning a new food every round")
playCmd.Flags().IntVar(&MinimumFood, "minimumFood", 1, "Minimum food to keep on the board every turn")
playCmd.Flags().IntVar(&HazardDamagePerTurn, "hazardDamagePerTurn", 14, "Health damage a snake will take when ending its turn in a hazard")
playCmd.Flags().IntVar(&ShrinkEveryNTurns, "shrinkEveryNTurns", 25, "In Royale mode, the number of turns between generating new hazards")
playCmd.Flags().SortFlags = false
}
@ -256,7 +256,7 @@ func initializeBoardFromArgs(ruleset rules.Ruleset, snakeStates map[string]Snake
return state
}
func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, snakeStates map[string]SnakeState, turn int32) *rules.BoardState {
func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, snakeStates map[string]SnakeState, turn int) *rules.BoardState {
var moves []rules.SnakeMove
if Sequential {
for _, snakeState := range snakeStates {
@ -391,7 +391,7 @@ func convertRulesSnake(snake rules.Snake, snakeState SnakeState) client.Snake {
Body: client.CoordFromPointArray(snake.Body),
Latency: "0",
Head: client.CoordFromPoint(snake.Body[0]),
Length: int32(len(snake.Body)),
Length: len(snake.Body),
Shout: "",
Squad: snakeState.Squad,
Customizations: client.Customizations{
@ -518,15 +518,15 @@ func parseSnakeColor(color string) (int64, int64, int64) {
return 136, 136, 136
}
func printMap(state *rules.BoardState, snakeStates map[string]SnakeState, gameTurn int32) {
func printMap(state *rules.BoardState, snakeStates map[string]SnakeState, gameTurn int) {
var o bytes.Buffer
o.WriteString(fmt.Sprintf("Ruleset: %s, Seed: %d, Turn: %v\n", GameType, Seed, gameTurn))
board := make([][]string, state.Width)
for i := range board {
board[i] = make([]string, state.Height)
}
for y := int32(0); y < state.Height; y++ {
for x := int32(0); x < state.Width; x++ {
for y := 0; y < state.Height; y++ {
for x := 0; x < state.Width; x++ {
if UseColor {
board[x][y] = TERM_FG_LIGHTGRAY + "□"
} else {
@ -579,7 +579,7 @@ func printMap(state *rules.BoardState, snakeStates map[string]SnakeState, gameTu
if UseColor {
o.WriteString(TERM_BG_WHITE)
}
for x := int32(0); x < state.Width; x++ {
for x := 0; x < state.Width; x++ {
o.WriteString(board[x][y])
}
if UseColor {

View file

@ -5,7 +5,7 @@ import "github.com/BattlesnakeOfficial/rules"
// The top-level message sent in /start, /move, and /end requests
type SnakeRequest struct {
Game Game `json:"game"`
Turn int32 `json:"turn"`
Turn int `json:"turn"`
Board Board `json:"board"`
You Snake `json:"you"`
}
@ -15,14 +15,14 @@ type Game struct {
ID string `json:"id"`
Ruleset Ruleset `json:"ruleset"`
Map string `json:"map"`
Timeout int32 `json:"timeout"`
Timeout int `json:"timeout"`
Source string `json:"source"`
}
// Board provides information about the game board
type Board struct {
Height int32 `json:"height"`
Width int32 `json:"width"`
Height int `json:"height"`
Width int `json:"width"`
Snakes []Snake `json:"snakes"`
Food []Coord `json:"food"`
Hazards []Coord `json:"hazards"`
@ -33,10 +33,10 @@ type Snake struct {
ID string `json:"id"`
Name string `json:"name"`
Latency string `json:"latency"`
Health int32 `json:"health"`
Health int `json:"health"`
Body []Coord `json:"body"`
Head Coord `json:"head"`
Length int32 `json:"length"`
Length int `json:"length"`
Shout string `json:"shout"`
Squad string `json:"squad"`
Customizations Customizations `json:"customizations"`
@ -65,8 +65,8 @@ type SquadSettings rules.SquadSettings
// Coord represents a point on the board
type Coord struct {
X int32 `json:"x"`
Y int32 `json:"y"`
X int `json:"x"`
Y int `json:"y"`
}
// The expected format of the response body from a /move request

View file

@ -12,8 +12,8 @@ func TestConstrictorRulesetInterface(t *testing.T) {
func TestConstrictorModifyInitialBoardState(t *testing.T) {
tests := []struct {
Height int32
Width int32
Height int
Width int
IDs []string
}{
{1, 1, []string{}},

View file

@ -43,7 +43,7 @@ type Editor interface {
RemoveHazard(rules.Point)
// Updates the body and health of a snake.
PlaceSnake(id string, body []rules.Point, health int32)
PlaceSnake(id string, body []rules.Point, health int)
}
// An Editor backed by a BoardState.
@ -91,7 +91,7 @@ func (editor *BoardStateEditor) RemoveHazard(p rules.Point) {
}
}
func (editor *BoardStateEditor) PlaceSnake(id string, body []rules.Point, health int32) {
func (editor *BoardStateEditor) PlaceSnake(id string, body []rules.Point, health int) {
for index, snake := range editor.Snakes {
if snake.ID == id {
editor.Snakes[index].Body = body

View file

@ -4,7 +4,7 @@ import "github.com/BattlesnakeOfficial/rules"
// SetupBoard is a shortcut for looking up a map by ID and initializing a new board state with it.
func SetupBoard(mapID string, settings rules.Settings, width, height int, snakeIDs []string) (*rules.BoardState, error) {
boardState := rules.NewBoardState(int32(width), int32(height))
boardState := rules.NewBoardState(width, height)
rules.InitializeSnakes(boardState, snakeIDs)

View file

@ -47,9 +47,9 @@ func (m RoyaleHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings
randGenerator := settings.GetRand(0)
numShrinks := turn / settings.RoyaleSettings.ShrinkEveryNTurns
minX, maxX := int32(0), lastBoardState.Width-1
minY, maxY := int32(0), lastBoardState.Height-1
for i := int32(0); i < numShrinks; i++ {
minX, maxX := 0, lastBoardState.Width-1
minY, maxY := 0, lastBoardState.Height-1
for i := 0; i < numShrinks; i++ {
switch randGenerator.Intn(4) {
case 0:
minX += 1
@ -62,8 +62,8 @@ func (m RoyaleHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings
}
}
for x := int32(0); x < lastBoardState.Width; x++ {
for y := int32(0); y < lastBoardState.Height; y++ {
for x := 0; x < lastBoardState.Width; x++ {
for y := 0; y < lastBoardState.Height; y++ {
if x < minX || x > maxX || y < minY || y > maxY {
editor.AddHazard(rules.Point{X: x, Y: y})
}

View file

@ -21,7 +21,7 @@ type RoyaleRuleset struct {
Seed int64
ShrinkEveryNTurns int32
ShrinkEveryNTurns int
}
func (r *RoyaleRuleset) Name() string { return GameTypeRoyale }
@ -58,9 +58,9 @@ func PopulateHazardsRoyale(b *BoardState, settings Settings, moves []SnakeMove)
randGenerator := rand.New(rand.NewSource(settings.RoyaleSettings.seed))
numShrinks := turn / settings.RoyaleSettings.ShrinkEveryNTurns
minX, maxX := int32(0), b.Width-1
minY, maxY := int32(0), b.Height-1
for i := int32(0); i < numShrinks; i++ {
minX, maxX := 0, b.Width-1
minY, maxY := 0, b.Height-1
for i := 0; i < numShrinks; i++ {
switch randGenerator.Intn(4) {
case 0:
minX += 1
@ -73,8 +73,8 @@ func PopulateHazardsRoyale(b *BoardState, settings Settings, moves []SnakeMove)
}
}
for x := int32(0); x < b.Width; x++ {
for y := int32(0); y < b.Height; y++ {
for x := 0; x < b.Width; x++ {
for y := 0; y < b.Height; y++ {
if x < minX || x > maxX || y < minY || y > maxY {
b.Hazards = append(b.Hazards, Point{x, y})
}

View file

@ -38,10 +38,10 @@ func TestRoyaleName(t *testing.T) {
func TestRoyaleHazards(t *testing.T) {
seed := int64(25543234525)
tests := []struct {
Width int32
Height int32
Turn int32
ShrinkEveryNTurns int32
Width int
Height int
Turn int
ShrinkEveryNTurns int
Error error
ExpectedHazards []Point
}{
@ -128,7 +128,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
r := RoyaleRuleset{StandardRuleset: StandardRuleset{HazardDamagePerTurn: 30}, Seed: seed, ShrinkEveryNTurns: 10}
m := []SnakeMove{{ID: "one", Move: "down"}}
stateAfterTurn := func(prevState *BoardState, turn int32) *BoardState {
stateAfterTurn := func(prevState *BoardState, turn int) *BoardState {
nextState := prevState.Clone()
nextState.Turn = turn - 1
_, err := PopulateHazardsRoyale(nextState, r.Settings(), nil)
@ -141,7 +141,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
next, err := r.CreateNextBoardState(prevState, m)
require.NoError(t, err)
require.Equal(t, NotEliminated, next.Snakes[0].EliminatedCause)
require.Equal(t, int32(99), next.Snakes[0].Health)
require.Equal(t, 99, next.Snakes[0].Health)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, 10, len(next.Hazards)) // X = 0
@ -149,7 +149,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
next, err = r.CreateNextBoardState(prevState, m)
require.NoError(t, err)
require.Equal(t, NotEliminated, next.Snakes[0].EliminatedCause)
require.Equal(t, int32(99), next.Snakes[0].Health)
require.Equal(t, 99, next.Snakes[0].Health)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, 20, len(next.Hazards)) // X = 9
@ -157,7 +157,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
next, err = r.CreateNextBoardState(prevState, m)
require.NoError(t, err)
require.Equal(t, NotEliminated, next.Snakes[0].EliminatedCause)
require.Equal(t, int32(69), next.Snakes[0].Health)
require.Equal(t, 69, next.Snakes[0].Health)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, 20, len(next.Hazards))
@ -165,7 +165,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
next, err = r.CreateNextBoardState(prevState, m)
require.NoError(t, err)
require.Equal(t, EliminatedByOutOfHealth, next.Snakes[0].EliminatedCause)
require.Equal(t, int32(0), next.Snakes[0].Health)
require.Equal(t, 0, next.Snakes[0].Health)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, 20, len(next.Hazards))
@ -174,7 +174,7 @@ func TestRoyalDamageNextTurn(t *testing.T) {
require.NoError(t, err)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, NotEliminated, next.Snakes[0].EliminatedCause)
require.Equal(t, int32(100), next.Snakes[0].Health)
require.Equal(t, 100, next.Snakes[0].Health)
require.Equal(t, Point{9, 0}, next.Snakes[0].Body[0])
require.Equal(t, 20, len(next.Hazards))
}

View file

@ -21,9 +21,9 @@ type SnakeMove struct {
// Settings contains all settings relevant to a game.
// It is used by game logic to take a previous game state and produce a next game state.
type Settings struct {
FoodSpawnChance int32 `json:"foodSpawnChance"`
MinimumFood int32 `json:"minimumFood"`
HazardDamagePerTurn int32 `json:"hazardDamagePerTurn"`
FoodSpawnChance int `json:"foodSpawnChance"`
MinimumFood int `json:"minimumFood"`
HazardDamagePerTurn int `json:"hazardDamagePerTurn"`
HazardMap string `json:"hazardMap"`
HazardMapAuthor string `json:"hazardMapAuthor"`
RoyaleSettings RoyaleSettings `json:"royale"`
@ -34,7 +34,7 @@ type Settings struct {
}
// Get a random number generator initialized based on the seed and current turn.
func (settings Settings) GetRand(turn int32) Rand {
func (settings Settings) GetRand(turn int) Rand {
// Allow overriding the random generator for testing
if settings.rand != nil {
return settings.rand
@ -65,7 +65,7 @@ func (settings Settings) WithSeed(seed int64) Settings {
// RoyaleSettings contains settings that are specific to the "royale" game mode
type RoyaleSettings struct {
seed int64
ShrinkEveryNTurns int32 `json:"shrinkEveryNTurns"`
ShrinkEveryNTurns int `json:"shrinkEveryNTurns"`
}
// SquadSettings contains settings that are specific to the "squad" game mode
@ -132,9 +132,9 @@ func (rb *rulesetBuilder) AddSnakeToSquad(snakeID, squadName string) *rulesetBui
// Ruleset constructs a customised ruleset using the parameters passed to the builder.
func (rb rulesetBuilder) Ruleset() PipelineRuleset {
standardRuleset := &StandardRuleset{
FoodSpawnChance: paramsInt32(rb.params, ParamFoodSpawnChance, 0),
MinimumFood: paramsInt32(rb.params, ParamMinimumFood, 0),
HazardDamagePerTurn: paramsInt32(rb.params, ParamHazardDamagePerTurn, 0),
FoodSpawnChance: paramsInt(rb.params, ParamFoodSpawnChance, 0),
MinimumFood: paramsInt(rb.params, ParamMinimumFood, 0),
HazardDamagePerTurn: paramsInt(rb.params, ParamHazardDamagePerTurn, 0),
HazardMap: rb.params[ParamHazardMap],
HazardMapAuthor: rb.params[ParamHazardMapAuthor],
}
@ -153,7 +153,7 @@ func (rb rulesetBuilder) Ruleset() PipelineRuleset {
return &RoyaleRuleset{
StandardRuleset: *standardRuleset,
Seed: rb.seed,
ShrinkEveryNTurns: paramsInt32(rb.params, ParamShrinkEveryNTurns, 0),
ShrinkEveryNTurns: paramsInt(rb.params, ParamShrinkEveryNTurns, 0),
}
case GameTypeSolo:
return &SoloRuleset{
@ -192,14 +192,14 @@ func (rb rulesetBuilder) PipelineRuleset(name string, p Pipeline) PipelineRulese
name: name,
pipeline: p,
settings: Settings{
FoodSpawnChance: paramsInt32(rb.params, ParamFoodSpawnChance, 0),
MinimumFood: paramsInt32(rb.params, ParamMinimumFood, 0),
HazardDamagePerTurn: paramsInt32(rb.params, ParamHazardDamagePerTurn, 0),
FoodSpawnChance: paramsInt(rb.params, ParamFoodSpawnChance, 0),
MinimumFood: paramsInt(rb.params, ParamMinimumFood, 0),
HazardDamagePerTurn: paramsInt(rb.params, ParamHazardDamagePerTurn, 0),
HazardMap: rb.params[ParamHazardMap],
HazardMapAuthor: rb.params[ParamHazardMapAuthor],
RoyaleSettings: RoyaleSettings{
seed: rb.seed,
ShrinkEveryNTurns: paramsInt32(rb.params, ParamShrinkEveryNTurns, 0),
ShrinkEveryNTurns: paramsInt(rb.params, ParamShrinkEveryNTurns, 0),
},
SquadSettings: SquadSettings{
squadMap: rb.squadMap(),
@ -224,14 +224,14 @@ func paramsBool(params map[string]string, paramName string, defaultValue bool) b
return defaultValue
}
// paramsInt32 returns the int32 value for the specified parameter.
// paramsInt returns the int value for the specified parameter.
// If the parameter doesn't exist, the default value will be returned.
// If the parameter does exist, but is not a valid int, the default value will be returned.
func paramsInt32(params map[string]string, paramName string, defaultValue int32) int32 {
func paramsInt(params map[string]string, paramName string, defaultValue int) int {
if val, ok := params[paramName]; ok {
i, err := strconv.Atoi(val)
if err == nil {
return int32(i)
return i
}
}
return defaultValue

View file

@ -10,11 +10,11 @@ import (
_ "github.com/BattlesnakeOfficial/rules/test"
)
func TestParamInt32(t *testing.T) {
require.Equal(t, int32(5), paramsInt32(nil, "test", 5), "nil map")
require.Equal(t, int32(10), paramsInt32(map[string]string{}, "foo", 10), "empty map")
require.Equal(t, int32(10), paramsInt32(map[string]string{"hullo": "there"}, "hullo", 10), "invalid value")
require.Equal(t, int32(20), paramsInt32(map[string]string{"bonjour": "20"}, "bonjour", 20), "valid value")
func TestParamInt(t *testing.T) {
require.Equal(t, 5, paramsInt(nil, "test", 5), "nil map")
require.Equal(t, 10, paramsInt(map[string]string{}, "foo", 10), "empty map")
require.Equal(t, 10, paramsInt(map[string]string{"hullo": "there"}, "hullo", 10), "invalid value")
require.Equal(t, 20, paramsInt(map[string]string{"bonjour": "20"}, "bonjour", 20), "valid value")
}
func TestParamBool(t *testing.T) {

View file

@ -172,9 +172,9 @@ func TestRulesetBuilder(t *testing.T) {
require.NotNil(t, rsb.Ruleset())
require.Equal(t, expected.GameType, rsb.Ruleset().Name())
// All the standard settings should always be copied over
require.Equal(t, int32(10), rsb.Ruleset().Settings().FoodSpawnChance)
require.Equal(t, int32(12), rsb.Ruleset().Settings().HazardDamagePerTurn)
require.Equal(t, int32(5), rsb.Ruleset().Settings().MinimumFood)
require.Equal(t, 10, rsb.Ruleset().Settings().FoodSpawnChance)
require.Equal(t, 12, rsb.Ruleset().Settings().HazardDamagePerTurn)
require.Equal(t, 5, rsb.Ruleset().Settings().MinimumFood)
require.Equal(t, "test", rsb.Ruleset().Settings().HazardMap)
require.Equal(t, "tester", rsb.Ruleset().Settings().HazardMapAuthor)
})
@ -194,7 +194,7 @@ func TestStageFuncContract(t *testing.T) {
func TestRulesetBuilderGetRand(t *testing.T) {
var seed int64 = 12345
var turn int32 = 5
var turn int = 5
ruleset := rules.NewRulesetBuilder().WithSeed(seed).PipelineRuleset("example", rules.NewPipeline(rules.StageGameOverStandard))
rand1 := ruleset.Settings().GetRand(turn)

View file

@ -121,8 +121,8 @@ func TestSquadShareSquadHealth(t *testing.T) {
testSnakes := []struct {
SnakeID string
SquadID string
Health int32
ExpectedHealth int32
Health int
ExpectedHealth int
}{
// Red Squad
{"R1", "red", 11, 88},

View file

@ -6,9 +6,9 @@ import (
)
type StandardRuleset struct {
FoodSpawnChance int32 // [0, 100]
MinimumFood int32
HazardDamagePerTurn int32
FoodSpawnChance int // [0, 100]
MinimumFood int
HazardDamagePerTurn int
HazardMap string // optional
HazardMapAuthor string // optional
}
@ -318,7 +318,7 @@ func snakeIsOutOfHealth(s *Snake) bool {
return s.Health <= 0
}
func snakeIsOutOfBounds(s *Snake, boardWidth int32, boardHeight int32) bool {
func snakeIsOutOfBounds(s *Snake, boardWidth int, boardHeight int) bool {
for _, point := range s.Body {
if (point.X < 0) || (point.X >= boardWidth) {
return true
@ -391,11 +391,11 @@ func SpawnFoodStandard(b *BoardState, settings Settings, moves []SnakeMove) (boo
if IsInitialization(b, settings, moves) {
return false, nil
}
numCurrentFood := int32(len(b.Food))
numCurrentFood := int(len(b.Food))
if numCurrentFood < settings.MinimumFood {
return false, PlaceFoodRandomly(GlobalRand, b, settings.MinimumFood-numCurrentFood)
}
if settings.FoodSpawnChance > 0 && int32(rand.Intn(100)) < settings.FoodSpawnChance {
if settings.FoodSpawnChance > 0 && int(rand.Intn(100)) < settings.FoodSpawnChance {
return false, PlaceFoodRandomly(GlobalRand, b, 1)
}
return false, nil

View file

@ -22,8 +22,8 @@ func TestSanity(t *testing.T) {
state, err = r.ModifyInitialBoardState(state)
require.NoError(t, err)
require.NotNil(t, state)
require.Equal(t, int32(0), state.Width)
require.Equal(t, int32(0), state.Height)
require.Equal(t, 0, state.Width)
require.Equal(t, 0, state.Height)
require.Len(t, state.Food, 0)
require.Len(t, state.Snakes, 0)
@ -33,8 +33,8 @@ func TestSanity(t *testing.T) {
)
require.NoError(t, err)
require.NotNil(t, next)
require.Equal(t, int32(0), state.Width)
require.Equal(t, int32(0), state.Height)
require.Equal(t, 0, state.Width)
require.Equal(t, 0, state.Height)
require.Len(t, state.Snakes, 0)
}
@ -564,9 +564,9 @@ func TestMoveSnakes(t *testing.T) {
require.NoError(t, err)
require.Len(t, b.Snakes, 3)
require.Equal(t, int32(111111), b.Snakes[0].Health)
require.Equal(t, int32(222222), b.Snakes[1].Health)
require.Equal(t, int32(1), b.Snakes[2].Health)
require.Equal(t, 111111, b.Snakes[0].Health)
require.Equal(t, 222222, b.Snakes[1].Health)
require.Equal(t, 1, b.Snakes[2].Health)
require.Len(t, b.Snakes[0].Body, 2)
require.Len(t, b.Snakes[1].Body, 4)
@ -804,35 +804,35 @@ func TestReduceSnakeHealth(t *testing.T) {
r := StandardRuleset{}
_, err := ReduceSnakeHealthStandard(b, r.Settings(), mockSnakeMoves())
require.NoError(t, err)
require.Equal(t, b.Snakes[0].Health, int32(98))
require.Equal(t, b.Snakes[1].Health, int32(1))
require.Equal(t, b.Snakes[2].Health, int32(50))
require.Equal(t, b.Snakes[0].Health, 98)
require.Equal(t, b.Snakes[1].Health, 1)
require.Equal(t, b.Snakes[2].Health, 50)
_, err = ReduceSnakeHealthStandard(b, r.Settings(), mockSnakeMoves())
require.NoError(t, err)
require.Equal(t, b.Snakes[0].Health, int32(97))
require.Equal(t, b.Snakes[1].Health, int32(0))
require.Equal(t, b.Snakes[2].Health, int32(50))
require.Equal(t, b.Snakes[0].Health, 97)
require.Equal(t, b.Snakes[1].Health, 0)
require.Equal(t, b.Snakes[2].Health, 50)
_, err = ReduceSnakeHealthStandard(b, r.Settings(), mockSnakeMoves())
require.NoError(t, err)
require.Equal(t, b.Snakes[0].Health, int32(96))
require.Equal(t, b.Snakes[1].Health, int32(-1))
require.Equal(t, b.Snakes[2].Health, int32(50))
require.Equal(t, b.Snakes[0].Health, 96)
require.Equal(t, b.Snakes[1].Health, -1)
require.Equal(t, b.Snakes[2].Health, 50)
_, err = ReduceSnakeHealthStandard(b, r.Settings(), mockSnakeMoves())
require.NoError(t, err)
require.Equal(t, b.Snakes[0].Health, int32(95))
require.Equal(t, b.Snakes[1].Health, int32(-2))
require.Equal(t, b.Snakes[2].Health, int32(50))
require.Equal(t, b.Snakes[0].Health, 95)
require.Equal(t, b.Snakes[1].Health, -2)
require.Equal(t, b.Snakes[2].Health, 50)
}
func TestSnakeIsOutOfHealth(t *testing.T) {
tests := []struct {
Health int32
Health int
Expected bool
}{
{Health: math.MinInt32, Expected: true},
{Health: math.MinInt, Expected: true},
{Health: -10, Expected: true},
{Health: -2, Expected: true},
{Health: -1, Expected: true},
@ -840,7 +840,7 @@ func TestSnakeIsOutOfHealth(t *testing.T) {
{Health: 1, Expected: false},
{Health: 2, Expected: false},
{Health: 10, Expected: false},
{Health: math.MaxInt32, Expected: false},
{Health: math.MaxInt, Expected: false},
}
for _, test := range tests {
@ -850,16 +850,16 @@ func TestSnakeIsOutOfHealth(t *testing.T) {
}
func TestSnakeIsOutOfBounds(t *testing.T) {
boardWidth := int32(10)
boardHeight := int32(100)
boardWidth := 10
boardHeight := 100
tests := []struct {
Point Point
Expected bool
}{
{Point{X: math.MinInt32, Y: math.MinInt32}, true},
{Point{X: math.MinInt32, Y: 0}, true},
{Point{X: 0, Y: math.MinInt32}, true},
{Point{X: math.MinInt, Y: math.MinInt}, true},
{Point{X: math.MinInt, Y: 0}, true},
{Point{X: 0, Y: math.MinInt}, true},
{Point{X: -1, Y: -1}, true},
{Point{X: -1, Y: 0}, true},
{Point{X: 0, Y: -1}, true},
@ -876,12 +876,12 @@ func TestSnakeIsOutOfBounds(t *testing.T) {
{Point{X: 11, Y: 9}, true},
{Point{X: 11, Y: 10}, true},
{Point{X: 11, Y: 11}, true},
{Point{X: math.MaxInt32, Y: 11}, true},
{Point{X: math.MaxInt, Y: 11}, true},
{Point{X: 9, Y: 99}, false},
{Point{X: 9, Y: 100}, true},
{Point{X: 9, Y: 101}, true},
{Point{X: 9, Y: math.MaxInt32}, true},
{Point{X: math.MaxInt32, Y: math.MaxInt32}, true},
{Point{X: 9, Y: math.MaxInt}, true},
{Point{X: math.MaxInt, Y: math.MaxInt}, true},
}
for _, test := range tests {
@ -1339,10 +1339,10 @@ func TestMaybeDamageHazards(t *testing.T) {
func TestHazardDamagePerTurn(t *testing.T) {
tests := []struct {
Health int32
HazardDamagePerTurn int32
Health int
HazardDamagePerTurn int
Food bool
ExpectedHealth int32
ExpectedHealth int
ExpectedEliminationCause string
Error error
}{
@ -1461,7 +1461,7 @@ func TestMaybeFeedSnakes(t *testing.T) {
func TestMaybeSpawnFoodMinimum(t *testing.T) {
tests := []struct {
MinimumFood int32
MinimumFood int
Food []Point
ExpectedFood int
}{
@ -1530,7 +1530,7 @@ func TestMaybeSpawnFoodHalfChance(t *testing.T) {
tests := []struct {
Seed int64
Food []Point
ExpectedFood int32
ExpectedFood int
}{
// Use pre-tested seeds and results
{123, []Point{}, 1},
@ -1556,7 +1556,7 @@ func TestMaybeSpawnFoodHalfChance(t *testing.T) {
rand.Seed(test.Seed)
_, err := SpawnFoodStandard(b, r.Settings(), mockSnakeMoves())
require.NoError(t, err)
require.Equal(t, test.ExpectedFood, int32(len(b.Food)), "Seed %d", test.Seed)
require.Equal(t, test.ExpectedFood, len(b.Food), "Seed %d", test.Seed)
}
}

View file

@ -52,7 +52,7 @@ func (r *WrappedRuleset) IsGameOver(b *BoardState) (bool, error) {
return GameOverStandard(b, r.Settings(), nil)
}
func wrap(value, min, max int32) int32 {
func wrap(value, min, max int) int {
if value < min {
return max
}

View file

@ -250,16 +250,16 @@ func TestEdgeCrossingEating(t *testing.T) {
func TestWrap(t *testing.T) {
// no wrap
assert.Equal(t, int32(0), wrap(0, 0, 0))
assert.Equal(t, int32(0), wrap(0, 1, 0))
assert.Equal(t, int32(0), wrap(0, 0, 1))
assert.Equal(t, int32(1), wrap(1, 0, 1))
assert.Equal(t, 0, wrap(0, 0, 0))
assert.Equal(t, 0, wrap(0, 1, 0))
assert.Equal(t, 0, wrap(0, 0, 1))
assert.Equal(t, 1, wrap(1, 0, 1))
// wrap to min
assert.Equal(t, int32(0), wrap(2, 0, 1))
assert.Equal(t, 0, wrap(2, 0, 1))
// wrap to max
assert.Equal(t, int32(1), wrap(-1, 0, 1))
assert.Equal(t, 1, wrap(-1, 0, 1))
}
// Checks that snakes moving out of bounds get wrapped to the other side.