prefix=''
exeprefix='valgrind --error-exitcode=42'
postfix='1>/dev/null'
+ threads="1"
;;
- --sanitizer)
- echo "sanitizer testing started"
+ --valgrind-thread)
+ echo "valgrind-thread testing started"
+ prefix=''
+ exeprefix='valgrind --error-exitcode=42'
+ postfix='1>/dev/null'
+ threads="2"
+ ;;
+ --sanitizer-undefined)
+ echo "sanitizer-undefined testing started"
+ prefix='!'
+ exeprefix=''
+ postfix='2>&1 | grep -A50 "runtime error:"'
+ threads="1"
+ ;;
+ --sanitizer-thread)
+ echo "sanitizer-thread testing started"
prefix='!'
exeprefix=''
- postfix='2>&1 | grep "runtime error:"'
+ postfix='2>&1 | grep -A50 "WARNING: ThreadSanitizer:"'
+ threads="2"
+
+cat << EOF > tsan.supp
+race:TTEntry::move
+race:TTEntry::depth
+race:TTEntry::bound
+race:TTEntry::save
+race:TTEntry::value
+race:TTEntry::eval
+race:TTEntry::is_pv
+
+race:TranspositionTable::probe
+race:TranspositionTable::hashfull
+
+EOF
+
+ export TSAN_OPTIONS="suppressions=./tsan.supp"
+
;;
*)
echo "unknown testing started"
prefix=''
exeprefix=''
postfix=''
+ threads="1"
;;
esac
"go depth 10" \
"go movetime 1000" \
"go wtime 8000 btime 8000 winc 500 binc 500" \
- "bench 128 1 10 default depth"
+ "bench 128 $threads 10 default depth"
do
echo "$prefix $exeprefix ./stockfish $args $postfix"
send "uci\n"
expect "uciok"
+ send "setoption name Threads value $threads\n"
+
send "ucinewgame\n"
send "position startpos\n"
send "go nodes 1000\n"
exit \$value
EOF
-for exps in game.exp
+#download TB as needed
+if [ ! -d ../tests/syzygy ]; then
+ curl -sL https://api.github.com/repos/niklasf/python-chess/tarball/9b9aa13f9f36d08aadfabff872882f4ab1494e95 | tar -xzf -
+ mv niklasf-python-chess-9b9aa13 ../tests/syzygy
+fi
+
+cat << EOF > syzygy.exp
+ set timeout 240
+ spawn $exeprefix ./stockfish
+ send "uci\n"
+ send "setoption name SyzygyPath value ../tests/syzygy/\n"
+ expect "info string Found 35 tablebases" {} timeout {exit 1}
+ send "bench 128 1 10 default depth\n"
+ send "quit\n"
+ expect eof
+
+ # return error code of the spawned program, useful for valgrind
+ lassign [wait] pid spawnid os_error_flag value
+ exit \$value
+EOF
+
+for exp in game.exp syzygy.exp
do
- echo "$prefix expect game.exp $postfix"
- eval "$prefix expect game.exp $postfix"
+ echo "$prefix expect $exp $postfix"
+ eval "$prefix expect $exp $postfix"
+
+ rm $exp
done
-rm game.exp
+rm -f tsan.supp
echo "instrumented testing OK"