From 2414ba36001e22ad8e163c57c456412427098e08 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 19 Aug 2025 18:43:26 -0400 Subject: [PATCH] Add perft section to readme --- README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cefcc64..ddfd1b0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Chess Engine in C — Project Goal +# Chess Engine in C Build a clean, fast chess engine in C that starts from a FEN string and produces fully legal moves, verified via **PERFT** for correctness and speed. @@ -29,6 +29,33 @@ FEN is a single line string that describes a chess position. Format: - halfmove: `0` - fullmove: `1` +# Perft Testing A Chess Engine + +**Perft** (“performance test”) walks the move tree *without move evaluation* and counts nodes at certain depths in the tree. It’s a standard way to verify an engine's **move generation + make/unmake (or make-on-copy)** are correct. The important to understand that the node counts have been generated and verified by the chess programming community, meaning that these counts are a reliable reference point for a chess engine to match against. + +## What perft checks +- **Legality filtering:** no moves that leave your own king in check. +- **Special rules:** castling path/rights, en passant (incl. pinned-EP edge case), promotions. +- **State integrity:** side-to-move flips; occupancy stays consistent. + +## Start-position reference counts + + rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 + +- d1 = **20** +- d2 = **400** +- d3 = **8,902** +- d4 = **197,281** +- d5 = **4,865,609** +- d6 = **119,060,324** + +## Other Positions + +The chess programming wiki provides several other starting positions to test. They +can be found here. + +**PERFT Results & test positions:** + ## Future Work - Incorporate algorithms and evaluation methods for chess positions to enable an **AI player**.