Skip to content

Disservin/chess-library

Repository files navigation

An extensive SHL Chess Library for C++

Chess Library

chess-library is a multi-purpose library for chess in C++17.

It can be used for any type of chess program, be it a chess engine, a chess GUI, or a chess data anaylsis tool.

Why this library?

  • Fast: This library is fast enough for pretty much any purpose in C++ and it is faster than most other chess libraries in C++.
  • Documentation: Easy to browse documentation at https://disservin.github.io/chess-library
  • Robust: Unit Tests & it has been tested on millions of chess positions, while developing the C++ part of Stockfish's Winrate Model.
  • PGN Support: Parse basic PGN files.
  • Namespace: Everything is in the chess:: namespace, so it won't pollute your namespace.
  • Compact Board Representation in 24bytes: The board state can be compressed into 24 bytes, using PackedBoard and Board::Compact::encode/Board::Compact::decode.

Note

Users are advised to update to the latest version of the library, to fix possible SAN/LAN issues.

Usage

This is a single header library.

You only need to include chess.hpp header! Aftewards you can access the chess logic over the chess:: namespace.

Exceptions

This library might throw exceptions in some cases, for example when the input is invalid or things are not as expected. To disable exceptions, define CHESS_NO_EXCEPTIONS before including the header.

Benchmarks

Tested on Ryzen 9 5950X.

PGN Parser

Ran with lichess_db_standard_rated_2017-03.pgn on a Samsung 980 SSD.

Benchmark Time Throughput
./build/example 28.927s 413.281 MB/s

Perft

With movelist preallocation:

Category Depth Time (ms) NPS FEN
Standard Chess 7 8988 355534749 rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Standard Chess 5 430 449398352 r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
Standard Chess 7 661 269839367 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1
Standard Chess 6 1683 419266646 r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1
Standard Chess 5 210 426261582 rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8
Standard Chess 5 377 434062304 r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 1
Chess960 6 358 331644356 rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w HAha - 0 1
Chess960 6 710 269707784 1rqbkrbn/1ppppp1p/1n6/p1N3p1/8/2P4P/PP1PPPP1/1RQBKRBN w FBfb - 0 9
Chess960 6 2434 379540629 rbbqn1kr/pp2p1pp/6n1/2pp1p2/2P4P/P7/BP1PPPP1/R1BQNNKR w HAha - 0 9
Chess960 6 927 332492639 rqbbknr1/1ppp2pp/p5n1/4pp2/P7/1PP5/1Q1PPPPP/R1BBKNRN w GAga - 0 9
Chess960 6 2165 402734901 4rrb1/1kp3b1/1p1p4/pP1Pn2p/5p2/1PR2P2/2P1NB1P/2KR1B2 w D - 0 21
Chess960 6 6382 419555508 1rkr3b/1ppn3p/3pB1n1/6q1/R2P4/4N1P1/1P5P/2KRQ1B1 b Ddb - 0 14

Repositories using this library

Development Setup

This project is using the meson build system. https://mesonbuild.com/

Setup

meson setup build

Compilation

meson compile -C build

Tests

meson test -C build

Example

Download the Lichess March 2017 database. You can decompress this with the following command: unzstd -d lichess_db_standard_rated_2017-03.pgn.zst

cd example
meson setup build
meson compile -C build

./build/example ../lichess_db_standard_rated_2017-03.pgn

Comparison to other libraries

Benchmark implementation for more information.