RELEASE_DIR := "target/release"
CUTECHESS_CLI_DIR := "$(pwd)/../cutechess-cli"

# Run all tests
test-all:
    cargo test -r

# Run all tests except the perft suite
test:
    cargo test -r -- --skip perft

# Run only the perft suite
test-perft:
    cargo test -r perft

# Re-run tests (minus perft) on every change under src/
watch:
    cargo watch -c -w src -x 'test -r -- --skip perft'

# Build, rotate current zeal -> zeal-old, install new as zeal (for SPRT).
release-switch:
    #!/usr/bin/env bash
    set -euo pipefail
    cargo b -r
    mv {{CUTECHESS_CLI_DIR}}/zeal {{CUTECHESS_CLI_DIR}}/zeal-old
    cp {{RELEASE_DIR}}/zeal {{CUTECHESS_CLI_DIR}}/zeal

# Build and install as zeal (no old-version rotation; for non-SPRT runs)
release:
    #!/usr/bin/env bash
    set -euo pipefail
    cargo b -r
    cp {{RELEASE_DIR}}/zeal {{CUTECHESS_CLI_DIR}}/zeal

# Run SPRT tests between 2 zeal versions
run-sprt concurrency="1":
    #!/usr/bin/env bash
    set -euo pipefail
    cd {{CUTECHESS_CLI_DIR}}
    ./cutechess-cli \
        -engine cmd=./zeal name="zeal-new" proto=uci \
        -engine cmd=./zeal-old name="zeal-old" proto=uci \
        -openings file="8moves_v3.pgn" order=random format=pgn \
        -concurrency {{concurrency}} \
        -ratinginterval 100 \
        -games 10000 \
        -resign movecount=3 score=400 \
        -draw movenumber=40 movecount=3 score=10 \
        -repeat \
        -each tc=8+0.08 \
        -sprt elo0=0 elo1=10 alpha=0.05 beta=0.1 \
        -pgnout "$(pwd)/games.pgn" 2>&1 | tee {{CUTECHESS_CLI_DIR}}/sprt_log.txt

# Run SPRT tests between 2 zeal versions with debug LOG enabled (10 games)
run-debug:
    #!/usr/bin/env bash
    set -euo pipefail
    cd {{CUTECHESS_CLI_DIR}}
    ./cutechess-cli \
        -engine cmd=./zeal name="zeal-new" proto=uci \
        -engine cmd=./zeal-old name="zeal-old" proto=uci \
        -openings file="8moves_v3.pgn" order=random format=pgn \
        -concurrency 1 \
        -ratinginterval 100 \
        -games 10 \
        -resign movecount=3 score=400 \
        -draw movenumber=40 movecount=3 score=10 \
        -repeat \
        -each tc=8+0.08 \
        -sprt elo0=0 elo1=10 alpha=0.05 beta=0.1 \
        -pgnout "$(pwd)/games.pgn" \
        -debug \
        2> "$(pwd)/debug_log.txt"

# Run tests between zeal and a stash version
run-ccrl:
    #!/usr/bin/env bash
    set -euo pipefail
    cd {{CUTECHESS_CLI_DIR}}
    ./cutechess-cli \
        -engine cmd=./zeal name="zeal" proto=uci \
        -engine cmd=./stash-15.0-linux-64 name="stash-15.0-linux-64" proto=uci \
        -openings file="8moves_v3.pgn" order=random format=pgn \
        -concurrency 6 \
        -ratinginterval 100 \
        -games 2000 \
        -resign movecount=3 score=400 \
        -draw movenumber=40 movecount=3 score=10 \
        -repeat \
        -each tc=8+0.08
