summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-10-23 13:19:17 -0700
committerScott Gasch <[email protected]>2026-10-23 13:19:17 -0700
commit69525eb2f42ea9cca8255f6cc3b85e6b1312fd05 (patch)
treed78420b6c45d584a3f09b4dcbaf4f1edb36e8d5d /tests
parent6b883e83935f5e8110788565cfcb77cd6fbf8950 (diff)
NNUE search integration: FH% tables, NODE_TYPE refinement, TREEDUMP rewrite
- data.c/chess.h: widen the joint FH% table's late axis 16->17, dedicating the new bucket 0 to a whole-node ("will something here fail high at all") sample rather than sharing it with the first-leftover-move curve. Add an NNUE-eval counterpart table (g_uJointFHThousandths_NNUE) and an NNUE counterpart of the beta-side table, selected at runtime based on whether NNUE eval is active. - search.c/searchsup.c: add _RefineNodeTypeGuess, which uses the FH% tables (via g_NodeTypeGuessTable) to refine a node's NODE_TYPE guess instead of the old heuristic; thread uParentMoveFHEstimate through PLY_INFO so a node can see its parent's prediction for the move that led to it. - generate.c: initialize sKillers[2]/[3].uBonus unconditionally (an uninitialized-stack read caught by valgrind under LTO; harmless today but a real bug). - dumptree.c/chess.h/GNUmakefile: replace the long-dead DUMP_TREE XML tree dump (written for a GUI this project no longer has) with TREEDUMP, a flat, path-keyed move/result trace meant to diff against an identically-instrumented Stockfish build -- see docs/TREEDUMP_FORMAT.md. - docs/DEEPER_PRUNING.md: notes on closing the search-efficiency gap vs Stockfish. - crafty_egtb/stockfish_xboard/typhoon_nnue: wrapper scripts so match_play.py's Engine class can drive Crafty, Stockfish (via PolyGlot), and an NNUE-enabled typhoon the same way it drives HCE typhoon. - tests/lop: rename lop.txt -> lop.ep_; update compare_lop.cpp. - annotate_pgns: add aggregate_marginsafety.py, dedup_pgn.py, fit_lazy_probe.py; update annotate.py/run_nnue_pipeline.py for the NNUE training pipeline. - .gitignore: ignore compile_commands.json (clangd build DB) and eval.nnue (a symlink into the untracked head_reference/ comparison baseline), neither of which belongs in the repo. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Diffstat (limited to 'tests')
-rw-r--r--tests/lop/compare_lop.cpp33
-rw-r--r--tests/lop/lop.ep_ (renamed from tests/lop/lop.txt)0
2 files changed, 32 insertions, 1 deletions
diff --git a/tests/lop/compare_lop.cpp b/tests/lop/compare_lop.cpp
index 690df01..8062406 100644
--- a/tests/lop/compare_lop.cpp
+++ b/tests/lop/compare_lop.cpp
@@ -2,6 +2,7 @@
#include <memory.h>
#include <stdlib.h>
#include <cstdint>
+#include <strings.h>
typedef struct
@@ -45,6 +46,36 @@ uint32_t MyHashString(const char *s)
}
+// Evals are normally plain centipawn integers (e.g. "35", "-120"), but some
+// engines print mate scores as "+MATE10" / "-MATE3" instead of a number.
+// Convert those into a large-magnitude centipawn value (sign-preserved,
+// shorter mates score more extreme) so they still sort correctly and don't
+// get dropped by atoi() silently returning 0.
+int ParseEval(const char *s)
+{
+ int sign = 1;
+ const char *p = s;
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p == '+')
+ p++;
+ else if (*p == '-')
+ {
+ sign = -1;
+ p++;
+ }
+ if (!strncasecmp(p, "MATE", 4))
+ {
+ int pliesToMate = atoi(p + 4);
+ if (pliesToMate <= 0)
+ pliesToMate = 1;
+ return sign * (32767 - pliesToMate);
+ }
+ return atoi(s);
+}
+
+
int CompareLeftEvals(const void *a, const void *b)
{
position_t *pa = (position_t *)a;
@@ -151,7 +182,7 @@ void ReadFileEvals(const char *fileName, bool isLeftFile)
StripTrailingNewline(fenLine);
StripTrailingNewline(evalLine);
StripTrailingNewline(moveLine);
- StoreFileEval(fenLine, fenNumber, atoi(evalLine), moveLine, isLeftFile);
+ StoreFileEval(fenLine, fenNumber, ParseEval(evalLine), moveLine, isLeftFile);
fenNumber++;
}
fclose(f);
diff --git a/tests/lop/lop.txt b/tests/lop/lop.ep_
index 37da48e..37da48e 100644
--- a/tests/lop/lop.txt
+++ b/tests/lop/lop.ep_