Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
official-stockfish
GitHub Repository: official-stockfish/Stockfish
Path: blob/master/tests/perft.sh
376 views
1
#!/bin/bash
2
# verify perft numbers (positions from https://www.chessprogramming.org/Perft_Results)
3
4
TESTS_FAILED=0
5
6
error()
7
{
8
echo "perft testing failed on line $1"
9
exit 1
10
}
11
trap 'error ${LINENO}' ERR
12
13
echo "perft testing started"
14
15
EXPECT_SCRIPT=$(mktemp)
16
17
cat << 'EOF' > $EXPECT_SCRIPT
18
#!/usr/bin/expect -f
19
set timeout 120
20
lassign [lrange $argv 0 4] pos depth result chess960 logfile
21
log_file -noappend $logfile
22
spawn ./stockfish
23
if {$chess960 == "true"} {
24
send "setoption name UCI_Chess960 value true\n"
25
}
26
send "position $pos\ngo perft $depth\n"
27
expect {
28
"Nodes searched: $result" {}
29
timeout {puts "TIMEOUT: Expected $result nodes"; exit 1}
30
eof {puts "EOF: Stockfish crashed"; exit 2}
31
}
32
send "quit\n"
33
expect eof
34
EOF
35
36
chmod +x $EXPECT_SCRIPT
37
38
run_test() {
39
local pos="$1"
40
local depth="$2"
41
local expected="$3"
42
local chess960="$4"
43
local tmp_file=$(mktemp)
44
45
echo -n "Testing depth $depth: ${pos:0:40}... "
46
47
if $EXPECT_SCRIPT "$pos" "$depth" "$expected" "$chess960" "$tmp_file" > /dev/null 2>&1; then
48
echo "OK"
49
rm -f "$tmp_file"
50
else
51
local exit_code=$?
52
echo "FAILED (exit code: $exit_code)"
53
echo "===== Output for failed test ====="
54
cat "$tmp_file"
55
echo "=================================="
56
rm -f "$tmp_file"
57
TESTS_FAILED=1
58
fi
59
}
60
61
# standard positions
62
63
run_test "startpos" 7 3195901860 "false"
64
run_test "fen r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -" 5 193690690 "false"
65
run_test "fen 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -" 7 178633661 "false"
66
run_test "fen r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1" 6 706045033 "false"
67
run_test "fen rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8" 5 89941194 "false"
68
run_test "fen r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10" 5 164075551 "false"
69
run_test "fen r7/4p3/5p1q/3P4/4pQ2/4pP2/6pp/R3K1kr w Q - 1 3" 5 11609488 "false"
70
71
# chess960 positions
72
73
run_test "fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w AHah - 0 1" 6 119060324 "true"
74
run_test "fen 1rqbkrbn/1ppppp1p/1n6/p1N3p1/8/2P4P/PP1PPPP1/1RQBKRBN w FBfb - 0 9" 6 191762235 "true"
75
run_test "fen rbbqn1kr/pp2p1pp/6n1/2pp1p2/2P4P/P7/BP1PPPP1/R1BQNNKR w HAha - 0 9" 6 924181432 "true"
76
run_test "fen rqbbknr1/1ppp2pp/p5n1/4pp2/P7/1PP5/1Q1PPPPP/R1BBKNRN w GAga - 0 9" 6 308553169 "true"
77
run_test "fen 4rrb1/1kp3b1/1p1p4/pP1Pn2p/5p2/1PR2P2/2P1NB1P/2KR1B2 w D - 0 21" 6 872323796 "true"
78
run_test "fen 1rkr3b/1ppn3p/3pB1n1/6q1/R2P4/4N1P1/1P5P/2KRQ1B1 b Dbd - 0 14" 6 2678022813 "true"
79
run_test "fen qbbnrkr1/p1pppppp/1p4n1/8/2P5/6N1/PPNPPPPP/1BRKBRQ1 b FCge - 1 3" 6 521301336 "true"
80
run_test "fen rr6/2kpp3/1ppn2p1/p2b1q1p/P4P1P/1PNN2P1/2PP4/1K2R2R b E - 1 20" 2 1438 "true"
81
run_test "fen rr6/2kpp3/1ppn2p1/p2b1q1p/P4P1P/1PNN2P1/2PP4/1K2RR2 w E - 0 20" 3 37340 "true"
82
run_test "fen rr6/2kpp3/1ppnb1p1/p2Q1q1p/P4P1P/1PNN2P1/2PP4/1K2RR2 b E - 2 19" 4 2237725 "true"
83
run_test "fen rr6/2kpp3/1ppnb1p1/p4q1p/P4P1P/1PNN2P1/2PP2Q1/1K2RR2 w E - 1 19" 4 2098209 "true"
84
run_test "fen rr6/2kpp3/1ppnb1p1/p4q1p/P4P1P/1PNN2P1/2PP2Q1/1K2RR2 w E - 1 19" 5 79014522 "true"
85
run_test "fen rr6/2kpp3/1ppnb1p1/p4q1p/P4P1P/1PNN2P1/2PP2Q1/1K2RR2 w E - 1 19" 6 2998685421 "true"
86
87
rm -f $EXPECT_SCRIPT
88
echo "perft testing completed"
89
90
if [ $TESTS_FAILED -ne 0 ]; then
91
echo "Some tests failed"
92
exit 1
93
fi
94
95