aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/tests')
-rwxr-xr-xscripts/tests/perft.bash62
1 files changed, 62 insertions, 0 deletions
diff --git a/scripts/tests/perft.bash b/scripts/tests/perft.bash
new file mode 100755
index 0000000..1338569
--- /dev/null
+++ b/scripts/tests/perft.bash
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+status=0
+
+testPerft() {
+ local fen="$1"
+ local depth="$2"
+ local expected="$3"
+
+ echo ""
+
+ result=$(./build/mono "perft" $depth "$fen")
+ count=$(echo "$result" | jq -r '.result')
+ took=$(echo "$result" | jq -r '.ms')
+ if [ "$count" = "$expected" ]; then
+ echo "Results match"
+ echo "Took: $took ms"
+ else
+ echo "RESULTS DONT MATCH"
+ echo "Took: $took ms"
+ echo "Depth: $depth"
+ echo "Fen: $fen"
+ echo "Expected: $expected"
+ echo "Got: $count"
+ status=1
+ fi
+}
+
+configs=(
+ # starting pos
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|1|20"
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|2|400"
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|3|8902"
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|4|197281"
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|5|4865609"
+
+ # kiwipete
+ "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -|1|48"
+ "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -|2|2039"
+ "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -|3|97862"
+ "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -|4|4085603"
+
+ # other positions
+ "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1|1|14"
+ "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1|2|191"
+ "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1|3|2812"
+ "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1|4|43238"
+
+ # even more cool ones
+ "r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1|1|6"
+ "r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1|2|264"
+ "r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1|3|9467"
+ "r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1|4|422333"
+)
+
+for config in "${configs[@]}"; do
+ IFS='|' read -r fen depth expected <<< "$config"
+ testPerft "$fen" "$depth" "$expected"
+ if [ $status -ne 0 ]; then
+ exit "$status"
+ fi
+done