From dddcaa09ad12f1972a3128748b5d90d22f9a9326 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Thu, 3 Sep 2026 17:40:17 -0700 Subject: Cherry-pick non-LMR fixes and tooling from the "LMR" stash Pulled the parts of the stashed LMR work that are genuinely independent of the reduction logic itself, leaving the actual LMR redesign for separate review: - Fix extension-taper table overflow: remove the flat MAX_EXTEND_PER_LINE cap and instead clamp the depth used to build g_uExtensionReduction[] so a deep `sd` request can't leave the whole taper table stuck at "0 penalty" (every index unreachable). - Remove a spuriously-firing ASSERT(fMovesRescoredByIID) in Search(): RescoreMovesViaSearch's own fail-high branch deliberately leaves that flag FALSE by contract, so the assert could fire on any DEBUG build given an unlucky rescore, making the DEBUG/TEST harness unreliable. - Misc correctness/portability fixes: unix.c pointer-truncation casts, chess.h's CONTAINING_STRUCT/IS_ENPASSANT/ABS_DIFF macro hardening (plus gating the branchless bit-tricks on _X64_ too, not just _X86_), removal of dead Slide*WithoutSigs prototypes, main.c's hash default bumped to 256m and its CPP self-test's arch gate widened to _X64_. - eval_tune/match_play.py: cosmetic SPRT progress-bar/output rework. - Delete eval_tune/run_ecm.sh (superseded, unreferenced elsewhere). - run_tests.sh: parameterize suites/SD/SN via args/env vars instead of hardcoding the three curated suites and sd10/sn5M (defaults kept pointing at the existing curated suites, since the stash's own lmr_sensitive_30/lmr_control_30 default suites aren't present in the repo). Deliberately left out of this commit: the stash's actual LMR reduction logic, the M-SIGNAL-SHADOW diagnostic subsystem, the large PERF_COUNTERS instrumentation buildout, the history-table gravity rework, and the FindEnprisePiece pre-move staleness fix (skipped per request pending a decision on whether to also change EFP's pruning behavior). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01MjdDfHry3i2jfJzyDXaG8A --- src/run_tests.sh | 53 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) (limited to 'src/run_tests.sh') diff --git a/src/run_tests.sh b/src/run_tests.sh index d5905e4..7e3a053 100755 --- a/src/run_tests.sh +++ b/src/run_tests.sh @@ -6,26 +6,41 @@ LOGDIR="/tmp/typhoon/manual" HEAD_LOGDIR="../head_reference/logs" TESTS="../tests" -/bin/rm -rf "${LOGDIR}/*" +# Suite names default to the three curated suites (see CLAUDE.md's +# head_reference protocol). Override on the command line to run other +# suites, e.g. ./run_tests.sh ecm_ringers ecm_lmr_delta +SUITES=("$@") +if [ ${#SUITES[@]} -eq 0 ]; then + SUITES=(ecm_ringers ecm_confident_quick ecm_hard_quick) +fi -clear -echo -n "Launching all test suites @ sn=5M and sd=10 in parallel (expect ~5-6 min)... " +# sd (fixed depth) is the right choice when judging whether a pruning/ +# ordering change makes the tree smaller or larger for the same search +# effort; sn (fixed node budget) is the right choice when judging how many +# positions solve within a fixed cost. Override via SD/SN env vars. +SD="${SD:-10}" +SN="${SN:-5000000}" + +/bin/rm -rf "${LOGDIR}" +mkdir -p "${LOGDIR}" + +echo -n "Launching test suites (${SUITES[*]}) @ sn=${SN} and sd=${SD} in parallel... " _start_time=$(date +%s) -for suite in ecm_ringers ecm_confident_quick ecm_hard_quick; do +for suite in "${SUITES[@]}"; do ./typhoon \ --cpus 1 \ --hash 256m \ - --logfile "$LOGDIR/sd10_${suite}.log" \ + --logfile "$LOGDIR/sd${SD}_${suite}.log" \ --batch \ - --command "force; book name /nonexistent.book.bin; sd 10; script $TESTS/${suite}.ep_" \ - > "$LOGDIR/sd10_${suite}.out" 2>&1 & + --command "force; book name /nonexistent.book.bin; sd ${SD}; script $TESTS/${suite}.ep_" \ + > "$LOGDIR/sd${SD}_${suite}.out" 2>&1 & ./typhoon \ --cpus 1 \ --hash 256m \ - --logfile "$LOGDIR/sn5m_${suite}.log" \ + --logfile "$LOGDIR/sn${SN}_${suite}.log" \ --batch \ - --command "force; book name /nonexistent.book.bin; sn 5000000; script $TESTS/${suite}.ep_" \ - > "$LOGDIR/sn5m_${suite}.out" 2>&1 & + --command "force; book name /nonexistent.book.bin; sn ${SN}; script $TESTS/${suite}.ep_" \ + > "$LOGDIR/sn${SN}_${suite}.out" 2>&1 & done wait _elapsed=$(( $(date +%s) - _start_time )) @@ -69,15 +84,19 @@ print_stats_table() { ' "$headfile" "$candfile" } -for suite in ecm_ringers ecm_confident_quick ecm_hard_quick; do - echo "----[ $suite sd=10 ]----" +for suite in "${SUITES[@]}"; do + echo "----[ $suite sd=${SD} ]------------------------------------------------------------------" print_stats_table \ - <(sed -n '/correct solutions/,/script time/p' "$HEAD_LOGDIR/sd10_${suite}.out") \ - <(sed -n '/correct solutions/,/script time/p' "$LOGDIR/sd10_${suite}.out") + <(sed -n '/correct solutions/,/script time/p' "$HEAD_LOGDIR/sd${SD}_${suite}.out") \ + <(sed -n '/correct solutions/,/script time/p' "$LOGDIR/sd${SD}_${suite}.out") echo - echo "----[ $suite sn=5M ]----" + echo "----[ $suite sn=${SN} ]------------------------------------------------------------------" print_stats_table \ - <(sed -n '/correct solutions/,/script time/p' "$HEAD_LOGDIR/sn5m_${suite}.out") \ - <(sed -n '/correct solutions/,/script time/p' "$LOGDIR/sn5m_${suite}.out") + <(sed -n '/correct solutions/,/script time/p' "$HEAD_LOGDIR/sn${SN}_${suite}.out") \ + <(sed -n '/correct solutions/,/script time/p' "$LOGDIR/sn${SN}_${suite}.out") echo done +echo +echo "NOTE: The logfiles for these runs are in /tmp/typhoon/manual and will be" +echo " overwritten by the next invocation of this script; save now them if" +echo " you want them!" -- cgit v1.3