2 # This is autotest Go-testing framework worker. It picks a random
3 # pairing among the ones defined in the rc file, and plays a single game.
9 # Load rc file. First, prepare functions for the endeavor:
10 echo "Loading rc file..."
14 playerspec
="$1"; shift
15 playerargc
="$1"; shift
17 eval "${playerid}_spec='$playerspec'"
18 eval "${playerid}_argc='$playerargc'"
20 player_param
() { # Accessor method
22 playerattr
="$1"; shift
23 playervar
="${playerid}_${playerattr}"
24 # XXX: ${!...} is bash-specific?
25 eval "echo \$$playervar"
30 eval "pair${pairs}_id='$(pairid "$@
")'"
31 eval "pair${pairs}_bsize='$1'"; shift
32 eval "pair${pairs}_komi='$1'"; shift
33 eval "pair${pairs}_black='$1'"; shift
37 while [ "$argc" -lt "$(player_param $player argc)" ] && [ "$#" -gt 0 ]; do
39 args
="$args $1"; shift
41 eval "pair${pairs}_player1='$player'"
42 eval "pair${pairs}_player1_args='$args'"
46 while [ "$argc" -lt "$(player_param $player argc)" ] && [ "$#" -gt 0 ]; do
48 args
="$args $1"; shift
50 eval "pair${pairs}_player2='$player'"
51 eval "pair${pairs}_player2_args='$args'"
55 pairing_param
() { # Accessor method
58 pairvar
="pair${pairid}_${pairattr}"
59 # XXX: ${!...} is bash-specific?
60 eval "echo \$$pairvar"
66 echo "Loaded $pairs pairings"
68 pair
="$((RANDOM % $pairs))"
69 pairid
="$(pairing_param $pair id)"
70 echo "Picked pairing #$pair: $pairid"
72 log
"starting game with pairing #$pair: $pairid"
75 # Assign players to final colors
76 black
="$(pairing_param ${pair} black)"
77 [ "$black" != "a" ] || black
="$((1 + RANDOM % 2))"
78 white
="$((1+2-black))"
79 p_black
="$(player_param $(pairing_param $pair player$black) spec)"; pa_black
="$(pairing_param $pair player${black}_args)"
80 p_white
="$(player_param $(pairing_param $pair player$white) spec)"; pa_white
="$(pairing_param $pair player${white}_args)"
83 # Create player commandlines
87 # Rest of arguments are in $1, $2, ...
88 eval "$name=\"$cmdline\""
90 prun_get prun_black
"$p_black" $pa_black
91 prun_get prun_white
"$p_white" $pa_white
92 komi
="$(pairing_param $pair komi | sed 's/^h/0.5 -handicap /')"
96 rm -f "c/$clientid"/scratch
*
97 echo $twogtp_path -black "$prun_black" -white "$prun_white" -auto -verbose -size "$(pairing_param $pair bsize)" -komi $komi -games 1 -sgffile "c/$clientid/scratch"
98 $twogtp_path -black "$prun_black" -white "$prun_white" -auto -verbose -size "$(pairing_param $pair bsize)" -komi $komi -games 1 -sgffile "c/$clientid/scratch"
100 # Get count of our game
101 mkdir
-p "c/$clientid/$pairid"
102 if [ -s "c/$clientid/$pairid/game.dat" ]; then
103 gameno
="$(($(tail -n 1 "c
/$clientid/$pairid/game.dat
" | cut -f 1) + 1))"
107 log
"game over, storing as #$gameno; black=player$black (recording black=player2)"
109 # Move result from scratchspace
110 cat "c/$clientid"/scratch.dat |
grep -v '^#' |
{
111 read GAME RES_B RES_W RES_R ALT DUP LEN TIME_B TIME_W CPU_B CPU_W ERR ERR_MSG
113 if [ "$black" -ne 2 ]; then
115 _S
="$RES_B"; RES_B
="$(echo $RES_W | tr 'BW' 'WB')"; RES_W
="$(echo $_S | tr 'BW' 'WB')"
116 RES_R
="$(echo "$RES_R" | tr 'BW' 'WB')"
118 _S
="$TIME_B"; TIME_B
="$TIME_W"; TIME_W
="$_S"
119 _S
="$CPU_B"; CPU_B
="$CPU_W"; CPU_W
="$_S"
121 echo -e "$GAME\t$RES_B\t$RES_W\t$RES_R\t$ALT\t$DUP\t$LEN\t$TIME_B\t$TIME_W\t$CPU_B\t$CPU_W\t$ERR\t$ERR_MSG"
122 } >>"c/$clientid/$pairid/game.dat"
123 mv "c/$clientid/scratch-0.sgf" "c/$clientid/$pairid/game-$gameno.sgf"