mirror of
https://github.com/MSWS/Chess.git
synced 2025-12-05 21:30:23 -08:00
* ci: Add and update CI workflows; refine build and test steps - Add new "Static" GitHub Actions workflow for running `staticcheck` - Rename `go.yml` to `buildtest.yml` and update workflows - Add build and test jobs with caching, coverage, and result publishing - Update `.gitignore` to exclude `.vscode` files [.github/workflows/static.yml] - Added a new GitHub Actions workflow named "Static". - Configured the workflow to trigger on push and pull request events. - Defined a CI job running on `ubuntu-latest`. - Included steps for checking out the repository and running the `staticcheck` tool using a specific version (`2022.1.1`). [.github/workflows/go.yml] - Renamed the GitHub Actions workflow file from `go.yml` to `buildtest.yml`. - Updated the file paths in the `push` trigger to reflect the new filename. - Renamed the `unit_tests` job to `build` and added a "Build" step to run `go build -v ./...`. - Introduced a cache setup step in the `build` job for Golang caches, improving build performance. - Added a new `test` job that runs after the `build` job (with `needs: build` dependency). - `test` job includes permissions configuration for checks and pull requests. - Installs dependencies, runs tests with coverage, generates JUnit reports, and publishes test results. - Removed unused permissions settings in the `build` job. [.gitignore] - Added `.vscode` to the ignored files in the `.gitignore` file. * ci: Update checkout action to version 4 in workflow * ci: Update staticcheck action to version 1.3.1 * ci: Update staticcheck action to use the latest version * Fix/static errors (#4) * refactor: Refactor piece enums to prioritize color over type - Update piece composition order to prioritize color before piece type across relevant files (`Color | Piece` instead of `Piece | Color`) - Remove `filterEnemies` method from `board/move.go` - Update test cases and helper functions in `board/fen_test.go` to reflect the new composition order - Adjust piece constant definitions in `board/pieces_test.go` for consistency with new composition order [board/pieces_test.go] - Updated the order of composition for piece constants to prioritize color before piece type (e.g., White | King instead of King | White). [board/move.go] - Removed the `filterEnemies` method, which filtered moves based on whether the captured piece was an enemy. - No other changes to the file. [board/fen_test.go] - Reordered enum composition for clarity and consistency, changing the order from `Piece | Color` to `Color | Piece`. - Updated test cases in `TestGenerateRow` to reflect the new order of enum composition. - Modified piece definitions in scenarios including "All Pawns", "Rooks Only", "Alternating Pawns", "Many Kings". - Adjusted the helper function `getTestBoard` to match the new enum composition order in all board row definitions. * ci: Refactor workflows by merging test into build job - Update `.github/workflows/buildtest.yml` to merge "Test" job into "Build" job - Add explicit permissions for checks and pull-requests in the "Build" job - Integrate testing, coverage reporting, JUnit report generation, and result publishing into the "Build" job [.github/workflows/buildtest.yml] - Added explicit permissions for checks and pull-requests in the "Build" job. - Removed the "Test" job and merged its steps into the "Build" job. - Integrated testing, coverage reporting, JUnit report generation, and result publishing directly into the "Build" job. * ci: Specify read permissions in CI job configuration
167 lines
3.6 KiB
Go
167 lines
3.6 KiB
Go
package board
|
|
|
|
import "testing"
|
|
|
|
func TestGenerateBoard(t *testing.T) {
|
|
tests := map[string]struct {
|
|
input string
|
|
result [8][8]Piece
|
|
}{
|
|
"Starting": {
|
|
input: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",
|
|
result: *getStartBoard(),
|
|
},
|
|
"Empty Board": {
|
|
input: "8/8/8/8/8/8/8/8",
|
|
result: [8][8]Piece{},
|
|
},
|
|
"Test Board": {
|
|
input: getTestPieceString(),
|
|
result: *getTestBoard(),
|
|
},
|
|
}
|
|
|
|
for name, test := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
result, err := GenerateBoard(test.input)
|
|
if err != nil {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
|
|
if *result != test.result {
|
|
t.Errorf("boards are not equal, expected %v, got %v",
|
|
test.result, *result)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGenerateRow(t *testing.T) {
|
|
tests := map[string]struct {
|
|
input string
|
|
result [8]Piece
|
|
}{
|
|
"Empty Row": {
|
|
input: "8",
|
|
result: [8]Piece{},
|
|
},
|
|
"All Pawns": {
|
|
input: "pppppppp",
|
|
result: [8]Piece{Black | Pawn, Black | Pawn, Black | Pawn, Black | Pawn, Black | Pawn, Black | Pawn, Black | Pawn, Black | Pawn},
|
|
},
|
|
"Starting Row": {
|
|
input: "RNBQKBNR",
|
|
result: getStartRow(),
|
|
},
|
|
"Rooks Only": {
|
|
input: "r6R",
|
|
result: [8]Piece{Rook | Black, 0, 0, 0, 0, 0, 0, White | Rook},
|
|
},
|
|
"Alternating Pawns": {
|
|
input: "pP1Pp2P",
|
|
result: [8]Piece{Pawn | Black, White | Pawn, 0, White | Pawn, Pawn | Black, 0, 0, White | Pawn},
|
|
},
|
|
"Many Kings": {
|
|
input: "KKKKkkkk",
|
|
result: [8]Piece{White | King, White | King, White | King, White | King, Black | King, Black | King, King | Black, King | Black},
|
|
},
|
|
}
|
|
|
|
for name, test := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
result, err := generateBoardRow(test.input)
|
|
|
|
if err != nil {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
|
|
if *result != test.result {
|
|
t.Errorf("rows do not match, expected %v, got %v",
|
|
test.result, *result)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func getStartRow() [8]Piece {
|
|
return [8]Piece{Rook, Knight, Bishop, Queen, King, Bishop, Knight, Rook}
|
|
}
|
|
|
|
func getStartBoard() *[8][8]Piece {
|
|
pawnRow := [8]Piece{Pawn, Pawn, Pawn, Pawn, Pawn, Pawn, Pawn, Pawn}
|
|
|
|
board := [8][8]Piece{
|
|
getStartRow(), // White starting row
|
|
pawnRow, // White pawn row
|
|
{},
|
|
{},
|
|
{},
|
|
{},
|
|
pawnRow, // Black pawn row
|
|
getStartRow(), // Black starting row
|
|
}
|
|
|
|
markRowColor(&board[0], White)
|
|
markRowColor(&board[1], White)
|
|
markRowColor(&board[6], Black)
|
|
markRowColor(&board[7], Black)
|
|
|
|
return &board
|
|
}
|
|
|
|
func getTestBoard() *[8][8]Piece {
|
|
board := [8][8]Piece{
|
|
{0, 0, White | Pawn, 0, 0, 0, White | Knight},
|
|
{0, Pawn | Black, 0, 0, 0, Bishop | Black},
|
|
{White | Bishop, 0, 0, 0, Black | Rook},
|
|
{0, 0, 0, White | Queen, 0, 0, 0, Black | Queen},
|
|
{Pawn | Black, Pawn | Black, Pawn | Black},
|
|
{Pawn | Black, Pawn | Black},
|
|
{Pawn | Black},
|
|
{0, 0, 0, 0, 0, 0, 0, King | Black},
|
|
}
|
|
|
|
return &board
|
|
}
|
|
|
|
func getTestPieceString() string {
|
|
return "7k/p7/pp6/ppp5/3Q3q/B3r3/1p3b2/2P3N1"
|
|
}
|
|
|
|
func TestGeneratePieceString(t *testing.T) {
|
|
tests := map[string]struct {
|
|
input [8][8]Piece
|
|
expected string
|
|
}{
|
|
"Starting": {
|
|
input: *getStartBoard(),
|
|
expected: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",
|
|
},
|
|
"Empty Board": {
|
|
input: [8][8]Piece{},
|
|
expected: "8/8/8/8/8/8/8/8",
|
|
},
|
|
"Test Board": {
|
|
input: *getTestBoard(),
|
|
expected: getTestPieceString(),
|
|
},
|
|
}
|
|
|
|
for name, test := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
result := GeneratePieceString(test.input)
|
|
|
|
if test.expected != result {
|
|
t.Errorf("got invalid board, expected %s, got %s",
|
|
test.expected, result)
|
|
}
|
|
})
|
|
}
|
|
}
|