Hogwarts Wand Docs: ../server/tryem

File: ../server/tryem

#!/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=""
        c03=""
        c71=""
        c72=""
        c74=""
    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