#!/usr/bin/env bash status=0 testZobrist() { local name="$1" local fen="$2" local moves="$3" local expected="$4" echo "" resultRaw=$(./build/mono zobrist "$fen" $moves) result=$(echo $resultRaw | jq -r '.hash') took=$(echo $resultRaw | jq -r '.ms') if [ "$result" = "$expected" ]; then echo "PASS: $name, Took: $took" else echo "FAIL: $name" echo " Expected: $expected" echo " Got: $result" echo " Raw: $resultRaw" status=1 fi } configs=( # starting position "startpos|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1||5060803636482931868" # single moves "1.d4|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|d2d4|9443689642921087454" "1.e4|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4|9384546495678726550" "1.c4|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|c2c4|14562399549841627035" # two moves "1.e4 e5|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4 e7e5|595762792459712928" "1.e4 c5|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4 c7c5|7227515431820872427" "1.e4 e6|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4 e7e6|17603279437685838276" "1.e4 c6|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4 c7c6|1172755318016414253" "1.d4 d5|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|d2d4 d7d5|460664201775194104" # three moves "1.e4 e5 2.Nf3|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|e2e4 e7e5 g1f3|15213300192948443293" "1.d4 d5 2.c4|rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1|d2d4 d7d5 c2c4|9963937660605248767" # different starting FEN "Kiwipete|r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1||14109232545397825053" ) for config in "${configs[@]}"; do IFS='|' read -r name fen moves expected <<< "$config" testZobrist "$name" "$fen" "$moves" "$expected" if [ $status -ne 0 ]; then exit "$status" fi done