#!/bin/bash
#@DOC@ try various spells with fmtb_parse
#
# Copyright (C) 2006 Nathan (Acorn) Pooley
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License (gpl.txt) for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# You can contact the author, Nathan (Acorn) Pooley, by writing
# to Nathan (Acorn) Pooley, 949 Buckeye Drive, Sunnyvale, CA 94086, USA
# or through the form at http://www.rawbw.com/~acorn/wand/feedback.html
#
_usage() {
if [[ -n $1 ]] ; then
echo "$*"
fi
echo "Usage: tryem [OPTIONS]"
echo "Usage: tryem [OPTIONS] <file> ..."
echo " Test all motions in picfmtb_spells/ dir against all known spells."
echo " If <file>s are specified then just use those files."
echo "Options:"
echo " -a test all motions in several dirs (more than default)"
echo " -t just compare tokens from old & new algorithm"
echo " -O use old version of program (fmtb_parse_oldA)"
echo " -o use original algorithm"
echo " -M use classic minimal algorithm"
echo " -m use minimal algorithm"
echo " -X use experimental minimal algorithm"
echo " -p use picsim algorithm"
echo " -3 use all 3 algorithms (default)"
echo " -s use silent flag (default)"
echo " -S more silent"
echo " -n do not use silent flag"
exit 1
}
OPT_prog="fmtb_parse"
OPT_all=0
OPT_skipcheck=0
OPT_tokencheck=0
OPT_use_minimal=0
OPT_use_classic=0
OPT_use_xperimental=0
OPT_use_picsim=0
OPT_use_original=0
OPT_use_all=0
OPT_use_opt=""
OPT_silent=""
OPT_noisy="-s"
OPT_moresilent=0
flist[0]=""
fcnt=0
for i in "$@"
do
if [[ x${i%\?}y = x-y ]] ; then
_usage
fi
case $i in
-a) OPT_all=1 ;;
-t) OPT_tokencheck=1 ;;
-O) OPT_prog="fmtb_parse_oldA" ;;
-o) OPT_use_original=1
OPT_use_opt="-o" ;;
-m) OPT_use_minimal=1
OPT_use_opt="-m" ;;
-M) OPT_use_classic=1
OPT_use_opt="-M" ;;
-x) OPT_use_experimental=1
OPT_use_opt="-x" ;;
-p) OPT_use_picsim=1
OPT_use_opt="-p" ;;
-3) OPT_use_all=1
OPT_use_opt="-3" ;;
-s) OPT_silent="-s"
OPT_noisy="-s" ;;
-S) OPT_moresilent=1
OPT_silent="-s"
OPT_noisy="-s" ;;
-n) OPT_silent=""
OPT_noisy="" ;;
-*) _usage "Unknown option '$i'" ;;
*) flist[$fcnt]="$i"
(( fcnt = fcnt + 1 ))
;;
esac
done
results=tryem_results.txt
results2=tryem_results2.txt
tmp=tryem_tmp.txt
if (( OPT_use_classic + OPT_use_minimal + OPT_use_picsim + OPT_use_original + OPT_use_all + OPT_use_experimental > 1 ))
then
usage "Use only one of -O -M -m -p o -3 options"
fi
if (( 1 )) ; then
\rm -f $results
_getspells() {
grep '{[ ]*0x[0-9a-fA-F]*,[ ]*"' spells.c | \
sed -n -e 's|^[ ]*{[ ]*0x[0-9a-fA-F]*,[ ]*"\([a-zA-Z0-9_]*[a-zA-Z_]\)[0-9]*".*|\1|p' | \
sort -u
}
list=`_getspells`
if (( OPT_all )) ; then
_getfiles() {
for j in wpic*.txt picfmtb_*/wpic*.txt
do
if [[ -f $j ]] ; then
echo "$j"
fi
done
}
elif (( fcnt > 0 )) ; then
_getfiles() {
for j in "${flist[@]}"
do
if [[ -f $j ]] ; then
echo "$j"
fi
done
}
else
_getfiles() {
for i in $list
do
for j in wpic*$i*.txt picfmtb_spells/wpic*.txt
do
if [[ -f $j ]] ; then
echo "$j"
fi
done
done
}
fi
list2=`_getfiles | sort -u`
if (( OPT_moresilent )) ; then
_runspell2() {
$OPT_prog -C -c $OPT_use_opt $OPT_noisy < $1 | \
tee -a $results > $tmp
}
else
_runspell2() {
$OPT_prog -C -c $OPT_use_opt $OPT_noisy < $1 | \
tee -a $results | \
tee $tmp | \
grep RESULT
}
fi
_runspell() {
if (( ! OPT_moresilent )) ; then
echo "================ $OPT_prog -C -c $OPT_use_opt $OPT_noisy $1"
fi
echo "RESULT:================ $1" >> $results
_runspell2 "$1"
}
if (( OPT_tokencheck )) ; then
_runspell() {
./$OPT_prog -C -c -q -t -3 -s < $1 > $tmp
grep '\*' $tmp >/dev/null && _badspell $1
}
_badspell() {
echo "================ $1"
echo "./$OPT_prog -C -c -q -t -3 < $1"
echo "RESULT:================ $1" >> $results
cat $tmp | tee -a $results
}
OPT_skipcheck=1
fi
echo "RESULT:" > $results
for j in $list2
do
if [[ -f $j ]] ; then
_runspell "$j"
grep 'ERROR' $tmp && exit 1
grep 'ASSERT' $tmp && exit 1
fi
done
if (( ! OPT_moresilent )) ; then
echo "######################"
echo "######################"
echo "######################"
fi
fi
if (( OPT_skipcheck )) ; then
exit 0
fi
if (( ! OPT_moresilent )) ; then
grep 'RESULT:' $results | egrep '\*|=|\+'
fi
grep 'RESULT:' $results > $results2
_check() {
typeset showSummary=$1
typeset showColor=$2
typeset a
typeset b
typeset c
typeset mo=""
typeset mofile=""
typeset val1=""
typeset val2=""
typeset resa=""
typeset resb=""
typeset scorea=0
typeset scoreb=0
typeset cnta=0
typeset cntb=0
typeset cntc=0
typeset cntd=0
typeset cnte=0
typeset cntf=0
typeset cntg=0
if (( showColor )) ; then
c0="[0m"
c03="[30;43m"
c71="[37;41m"
c72="[37;42m"
c74="[37;44m"
else
c0=""
c03=""
c71=""
c72=""
c74=""
fi
while read a b c
do
#echo "READ $a $b $c" >&2
case $a in
A) mo=`echo $c`
mofile="$b"
;;
B) resa=`echo $c`
scorea=`echo $b`
;;
C) resb=`echo $c`
scoreb=`echo $b`
;;
*) echo "ERROR: $a $b $c"
;;
esac
if [[ -n $resa && -n $resb ]] ; then
#echo "READ mo=$mo resa=$resa scorea=$scorea resb=$resb scoreb=$scoreb" >&2
val1=""
val2=""
if [[ $resa = $mo ]] ; then
if (( scoreb < 20 )) ; then
val1="F$c71"
val2="TOO CLOSE$c0"
(( cntf = cntf + 1 ))
elif (( scorea < 11 )) ; then
val1="A$c72"
val2="good$c0"
(( cnta = cnta + 1 ))
elif (( scoreb - scorea < 30 )) ; then
val1="E$c03"
val2="TOO CLOSE$c0"
(( cnte = cnte + 1 ))
elif (( scorea < 30 )) ; then
val1="B$c74"
val2="close$c0"
(( cntb = cntb + 1 ))
else
val1="C$c03"
val2="FAR OFF$c0"
(( cntc = cntc + 1 ))
fi
elif (( scoreb < 30 )) ; then
val1="G$c71"
val2="FALSE POSITIVE$c0"
(( cntg = cntg + 1 ))
else
val1="D$c03"
val2="MISS$c0"
(( cntd = cntd + 1 ))
fi
printf "%s%-25s %-15s %4d %-15s %4d %-15s %s\n" \
"$val1" "$mofile" "$mo" \
$scorea "$resa" $scoreb "$resb" \
"$val2"
mo=""
mofile=""
resa=""
resb=""
scorea=0
scoreb=0
fi
done
if (( showSummary )) ; then
printf "X GRN BLU YELLOW_____ RED____\n"
printf "Y WAS: %3d %3d %3d %3d %3d %3d %3d\n" \
23 9 2 1 6 7 1
# 17 7 1 0 6 2 0
# 18 7 1 1 8 5 0
# 20 7 1 2 8 8 1
printf "Z NOW: %3d %3d %3d %3d %3d %3d %3d\n" \
$cnta $cntb $cntc $cntd $cnte $cntf $cntg
fi
}
if (( ! OPT_moresilent )) ; then
grep 'RESULT:====' $results | sort
fi
if (( 1 || ! OPT_moresilent )) ; then
grep 'RESULT:' $results | egrep '\*|=|\+' | \
sed -n \
-e 's|^\(RESULT:==*\) *[a-zA-Z0-9_/]*/\(wpic[a-zA-Z0-9_]*\.txt.*\)|\1 \2|' \
-e 's|^RESULT:==* \(wpic\([a-z]*\)[_A-Z0-9][^.]*\.txt\).*|A \1 \2|p' \
-e 's|^RESULT: \* *0*\([0-9][0-9]*\) *\([a-zA-Z_]*\)[0-9]*.*|B \1 \2|p' \
-e 's|^RESULT: + *0*\([0-9][0-9]*\) *\([a-zA-Z_]*\)[0-9]*.*|C \1 \2|p' | \
_check 0 0 | sed 's|^.|OPL: |' | sort
fi
if (( 1 || ! OPT_all )) ; then
grep 'RESULT:' $results | egrep '\*|=|\+' | \
sed -n \
-e 's|^\(RESULT:==*\) *[a-zA-Z0-9_/]*/\(wpic[a-zA-Z0-9_]*\.txt.*\)|\1 \2|' \
-e 's|^RESULT:==* \(wpic\([a-z]*\)[_A-Z0-9][^.]*\.txt\).*|A \1 \2|p' \
-e 's|^RESULT: \* *0*\([0-9][0-9]*\) *\([a-zA-Z_]*\)[0-9]*.*|B \1 \2|p' \
-e 's|^RESULT: + *0*\([0-9][0-9]*\) *\([a-zA-Z_]*\)[0-9]*.*|C \1 \2|p' | \
_check 1 1 | sort | sed 's|^.||'
fi
|
This file Copyright (C) 2006 by Nathan (Acorn) Pooley
Go to TOP Wand page
Go to Acorn's personal webpage
Go to Hogwarts website: www.gotohogwarts.com
Snout: www.snout.org/game
Gadgets of Justice Unlimited
Snout GC (Wiki)
Snout Wiki
File created by do_doc at Wed May 30 03:30:44 PDT 2007