Releases: PavolUlicny/HyperPrune
Releases · PavolUlicny/HyperPrune
Release list
HyperPrune v2.5.2
Documentation
- Updated the vendored Unity test framework sources to upstream 2.6.3 and removed the local formatting changes
- Added upstream Unity MIT license text at
test/unity/LICENSE.txt - Added a short third-party notices section to
README.mdpointing to the vendored Unity license
HyperPrune v2.5.1
CI
- Added dedicated
verify-5x5CI job: builds forBOARD_SIZE=5and runs 1M self-play games with a 200M-entry transposition table to verify perfect play on 5×5
Documentation
- Updated README tagline to reflect verified perfect play on 3×3 to 5×5 (was an unverified claim for all boards up to 8×8)
- Documented
bitboard_has_wonLUT precondition:player_piecesmust have no bits set aboveMAX_MOVES-1
HyperPrune v2.5.0
Performance
- Replaced
bitboard_has_wonmask loop with a precomputed lookup table forMAX_MOVES≤ 16 (i.e.BOARD_SIZE≤ 4); 512 bytes for 3×3, 64 KiB for 4×4, populated once at startup byinit_win_masks() - Extended lookup table to
checkWinnerforMAX_MOVES≤ 16, replacing thebitboard_did_last_move_winmask scan with a single table load (equivalent under the precondition that the board was non-terminal before the move)
Fixed
- Corrected
initializeBoard()comment:player_turnis not used bycheckWinner(); onlymove_countis - Corrected
checkWinner()comment: abbreviated return valuesTIE/CONTINUEchanged to actual enum namesGAME_TIE/GAME_CONTINUE
HyperPrune v2.4.0
Performance
- Added
ENABLE_MOVE_ORDERINGcompile-time flag to control killer-move and history heuristics; defaults toONforBOARD_SIZE <= 4(pruning gains outweigh O(n²) sort cost) andOFFfor larger boards where ordering degrades performance
CI
- Reworked test workflow: replaced matrix dimensions for
board_sizeandmove_orderingwith inner shell loops, reducing job count while covering all board sizes (3–8) × both move-ordering states across every job - Added Debug build coverage to
test(Make),test-cmake, andtest-windowsjobs - Added
--seed/-SCLI smoke tests totest,test-cmake, andtest-windows(3×3 Release runs) - Added default
ENABLE_MOVE_ORDERINGselection validation (no explicit override) forBOARD_SIZE=3andBOARD_SIZE=5intest,test-cmake, andtest-windows, exercising the Makefile and CMake default-derivation logic - Expanded
build-portableto cover all board sizes × both move-ordering states (was 3×3 only) - Switched
test-windowsfrom PowerShell to Bash to fix CMake-Dvariable expansion
HyperPrune v2.3.4
Performance
- Portable builds (
make portable,make install) now use LTO,-fno-semantic-interposition, matching the release build flags (minus-march=native) - Default CMake Release builds now use LTO,
-funroll-loops, and-fno-semantic-interposition; previously these required-DENABLE_NATIVE_OPTIMIZATIONS=ON
Documentation
- Rewrote "How it works" as a step-by-step pipeline walkthrough of a single
getAiMove()call, covering board representation, move generation, search entry point, negamax loop, transposition table, terminal conditions, move ordering, and PGO - Trimmed Highlights section — removed redundant inline explanations already covered in "How it works"
- Added CodeQL, release version, and platforms badges to README
- Added CI/CD bullet to Highlights covering the test matrix and automated release workflow
- Added note after Requirements about 5×5+ boards being impractical for real-time play
HyperPrune v2.3.3
Fixed
make installnow runsmake cleanafter installing, preventing root-owned build artifacts from blocking futuremake cleancalls when installing withsudo- CI: set
cancel-in-progress: falseon all workflows so new pushes queue instead of cancelling in-progress runs
Tests
- Renamed
nxtox_countintest_restartGame_clears_board_and_resets_turnfor consistency witho_count
Documentation
- Clarified that
make installandmake uninstallrequiresudoon systems where/usr/local/binis root-owned - Corrected PGO description in README from "compiles twice" to the accurate three-step process
negamax.h: addedzobrist_init()andtransposition_table_init()togetAiMove()prerequisites
HyperPrune v2.3.2
Added
-Sshort flag for--seed(e.g.ttt -S 42 -s 1000)
Documentation
- Added "Prebuilt binaries" section to README with
chmod +xinstructions for Linux/macOS release downloads - Added author credit to README and
--helpoutput
HyperPrune v2.3.1
Performance
player_to_index: replaced conditional withplayer & 1(ASCII bit-parity)getAiMove: cacheoccupiedmask to avoid recomputingx_pieces | o_piecestwice- Combined throughput improvement: 3×3 release ~7.3 M games/s, PGO ~8.2 M games/s (up from ~7.1 / ~7.7)
HyperPrune v2.3.0
Changed
- Self-play mode now exits with code 1 and prints a diagnostic to stderr if any game is won (perfect play broken); previously continued silently
- Self-play output no longer includes the Outcomes breakdown (x/o/tie counts); all games are expected to be ties
- Self-play output condensed to a single line:
N games in X.XXX s (Y.YY M games/s)
Fixed
--helptext now documents that--quietrequires--selfplay- Corrected inaccurate comments and documentation across the codebase
CI
- CodeQL now runs on all branches and pull requests, not only
main - Simplified self-play verification steps to rely on exit code instead of parsing human-readable output
- Release workflow now runs 1M-game self-play verification before uploading binaries
HyperPrune v2.2.3
Fixed
- Replaced
scanf("%d")withfgets+strtolin interactive coordinate input to eliminate undefined behaviour on out-of-range integer input
CI
- Added CodeQL static analysis workflow (
security-extendedquery suite) with weekly schedule - Bumped
github/codeql-actionfrom v3 to v4 for Node.js 24 compatibility