#!/bin/sh

# This seems to solve a problem on Mac OS X 10.5
ECHOEXE=/bin/echo

# Run CERTDemo.exe on images labeled for blinks, output results to /tmp
# Clean up the results file
# Run BlinkROC to get ROC
# Compare with 'good' ROC'
DEBUG=0
TESTNAME=BlinkTest
PID=$$
if [ ${DEBUG} -ne 1 ]; then
    RESULTS_FILE=/tmp/${TESTNAME}_${PID}.txt
else
    RESULTS_FILE=/tmp/BlinkTest_save.txt
fi
# $1 should be 'BLINK'
IMAGEDIR=$2

if [ ! -x ../CERTDemo.exe ]; then
    ${ECHOEXE} "${TESTNAME} failed: Unable to find CERTDemo.exe" >&2
    exit 64
fi

if [ ! -d ${IMAGEDIR} ]; then
    ${ECHOEXE} "${TESTNAME} failed: Image dir does not exist: ${IMAGEDIR}" >&2
    exit 65
fi

if [ ${DEBUG} -ne 1 ]; then
    rm -f ${RESULTS_FILE}
    ( cd ..; ./CERTDemo.exe -t -c UnitTests/CERT_Blink.xml -o ${RESULTS_FILE} ${IMAGEDIR} > /dev/null )
fi

TMP=/tmp/${TESTNAME}_${PID}_tmp.txt
rm -f ${TMP}

cat ${RESULTS_FILE}  | grep "${IMAGEDIR}" | grep -v "Unable to read file" | sed -e "s/^[^\t]\+\t//" > ${TMP}

# Have matlab calculate the ROC
ROCS=`matlab -nosplash -nojvm -nodesktop -nodisplay -r "addpath('../../Misc/WinBuildAndTest/');ROC=BlinkROC('${TMP}', 'BlinkLabels.txt');sprintf( '%.4f\t', ROC );disp(ans);exit" | tail -1`

if [ ${DEBUG} -ne 1 ]; then
    rm -f ${RESULTS_FILE}
    rm -f ${TMP}
fi

ROCARRAY=( ${ROCS} )
COUNT=${#ROCARRAY[@]}

if [ ${COUNT} -ne 2 ]; then
    ${ECHOEXE} "Invalid ROC output for Blinks: ${ROCS}" >&2
    exit 66
fi

GOODROC=0.9785

INDEX=0
COUNT=2
ROCS=( ${ROCS} )
LABELS=( "Blink AU" "Blink Detector" )

while [ ${INDEX} -lt ${COUNT} ]; do
    COMP=`${ECHOEXE} "${ROCS[${INDEX}]} < ${GOODROC}" | bc`
    ${ECHOEXE} -n "${LABELS[${INDEX}]}: ${ROCS[${INDEX}]} >= ${GOODROC}: "
    if [ ${COMP} -eq 1 ]; then
        ${ECHOEXE} "Failed!"
    else 
        ${ECHOEXE} "OK!"
    fi 
    (( INDEX++ ))
done

${ECHOEXE}

exit 0
