perftcheck

CLI linux · macOS · windows

Cross-platform CLI that points at a UCI chess engine and validates its go perft N output against ~105,000 known-correct positions baked into the binary. Writes a JSON report; exits non-zero on any mismatch.

Install

Self-contained single-file binaries published to GitHub Releases on every tagged build. No .NET runtime required on the target machine.

Platform Architecture Asset
Linux x86_64 perftcheck-linux-x64
Linux aarch64 perftcheck-linux-arm64
macOS Intel perftcheck-osx-x64
macOS Apple Silicon perftcheck-osx-arm64
Windows x86_64 perftcheck-win-x64.exe

macOS / Linux

$ curl -L -o perftcheck \
    https://github.com/Timmoth/grandchesstree/releases/latest/download/perftcheck-<rid>
$ chmod +x perftcheck
$ ./perftcheck --engine ./your-engine

On macOS, Gatekeeper may quarantine the binary on first run. Right-click → Open, or run xattr -d com.apple.quarantine perftcheck.

Windows (PowerShell)

PS> Invoke-WebRequest `
    https://github.com/Timmoth/grandchesstree/releases/latest/download/perftcheck-win-x64.exe `
    -OutFile perftcheck.exe
PS> .\perftcheck.exe --engine .\your-engine.exe

Usage

One required flag — --engine, pointing at a UCI executable. Default run walks every bundled position to depth 4 and writes perft-report.json. Source & full docs: PerftSuite/.

$ ./perftcheck --engine ./stockfish
Flag Default Description
-e, --engine <PATH>requiredUCI engine executable
--epd <FILE>bundledUse this EPD file instead of the bundled corpora. Repeatable.
--depth-cap <N>4Skip cases deeper than this
--depth-min <N>1Skip cases shallower than this
--timeout <SECS>30Per-case timeout; engine is killed and restarted on exceed
--filter <SUBSTR>Only run cases whose FEN contains this substring
--limit <N>Take only the first N matching cases
--report <PATH>perft-report.jsonPath to write the JSON report
--fail-fastoffStop on the first non-pass
--quietoffSuppress live console output (CI mode)

Exit codes: 0 all passed, 1 at least one failure, 2 bad args.