summaryrefslogtreecommitdiff
path: root/src/chess.h
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-09-16 00:08:27 -0700
committerScott Gasch <[email protected]>2026-09-16 00:08:27 -0700
commitb91c8453f3fe21c8ccd3568923d8e39141c9c945 (patch)
treeb908fea282ecd4075744590d3dfc88ffa903d943 /src/chess.h
parentc0ac3d7845f60c7f6f2c3bfc306ceb0e4ac045ba (diff)
Add search self-tests (hash consistency, QSearch sanity) and a native EPD parser (`epd` command + ParseEpdRecord), fixing a silent-corruption bug in convert_epd.pl that broke every Black-to-move EPD conversion.
testsearch.c: TestSearchHashConsistency exercises the hash table through real search (repeat-with-warm-table and shallow-then-deep agreement) rather than synthetic store/probe calls. TestQSearchSanity checks termination and a node-count ceiling; its own header documents that the TEST=1 self-test build doesn't define PERF_COUNTERS, so it checks whole-search node count rather than the qsearch-only counter. A planned null-move zugzwang test was dropped in favor of tests/zugzwang.epd (best-move outcome, not an internal counter) after the three classic literature positions turned out not to structurally reach this engine's verification-search code path on this build. fen.c/script.c/command.c: new `epd <file>` command reads raw EPD directly via ParseEpdRecord, reusing ScriptCommand's existing suite-reporting machinery (factored into _ProcessSuiteLine/_PrintSuiteReport). Replaces the need for tests/convert_epd.pl, which had a real bug: its bm/am regex's [^b]+ filler breaks on any Black-to-move record (side-to-move field is literally "b"), and unscoped $fen/$id/$solution globals meant a failed match silently duplicated the previous record instead of erroring. tests/ep_to_epd.pl converts the existing setboard/solution/avoid/id/go suites back to real EPD; cross-checked ecm_ringers.ep_ via `script` against ecm_ringers.epd via `epd` -- byte-identical node counts and solve stats. Added .epd siblings for every genuine tactical suite in tests/. Added src/TESTING_PLAN.md: full audit of test*.c coverage gaps (dead SEE oracle, unwired eval/recognizer tests, zero hash-table correctness coverage, thin search self-tests) with a prioritized plan for closing them. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Diffstat (limited to 'src/chess.h')
-rwxr-xr-xsrc/chess.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/chess.h b/src/chess.h
index 16cdca9..38fdb3f 100755
--- a/src/chess.h
+++ b/src/chess.h
@@ -2162,6 +2162,15 @@ PositionToFen(POSITION *p);
FLAG
FenToPosition(POSITION *p, char *szFen);
+FLAG
+ParseEpdRecord(char *szLineIn,
+ char *szFen, ULONG cbFen,
+ char *szId, ULONG cbId,
+ char szMoves[][SMALL_STRING_LEN_CHAR],
+ ULONG uMaxMoves,
+ ULONG *puNumMoves,
+ FLAG *pfIsAvoid);
+
//
// testfen.c
//
@@ -3051,6 +3060,7 @@ IsLegalDrawByRepetition(void);
// script.c
//
COMMAND(ScriptCommand);
+COMMAND(EpdCommand);
COMMAND(SolutionCommand);
@@ -3303,6 +3313,12 @@ SanityCheckMoves(IN SEARCHER_THREAD_CONTEXT *ctx,
FLAG
TestSearch(void);
+FLAG
+TestSearchHashConsistency(void);
+
+FLAG
+TestQSearchSanity(void);
+
//
// see.c
//