#! bash 
# Last edited on 2008-02-04 20:36:13 by stolfi

uso="${0##*/} GRAMATICA TESTDIR..."

# Roda um ou mais testes do parser
# Cada teste deve estar num sub-diretorio separado do dir. corrente.
# O parametro {GRAMATICA} 'e o nome da gramatica sem extensao.

# ----------------------------------------------------------------------
# PARAMETROS

if [ $# -lt 2 ]; then echo "uso: ${uso}"; exit 1; fi

# Nome da  gramatica
nomegram="$1"; shift;

# Diretorios de testes
dirs=( $@ )

# ----------------------------------------------------------------------
export PATH=".:/usr/local/bin:/usr/X11/bin:/usr/bin:/bin"
dirgram="/home/msc2000/ra880518/parser/gramatica"

logname="`date +'%Y-%m-%d-%H%M%S'`"
summ="${logname}.sum"
rm -f ${summ}
touch ${summ}

serr="${logname}.err"
rm -f ${serr}
touch ${serr}

if [ ${dirgram}/${nomegram}.txt -nt ${dirgram}/${nomegram}.plg ]; then
  echo "${nomegram}.txt is newer than ${nomegram}.plg"
  echo "${nomegram}.txt is newer than ${nomegram}.plg" >> ${serr}
  exit 1
fi

for dir in ${dirs[@]}; do
  echo "=== ${dir} ====================================================="
  echo "=== ${dir} =====================================================" >> ${serr}
  ( cd ${dir} && rm -f tree.txt err.txt time.txt wrong-{model,lex-extra}.err  )
  ( cd ${dir} && ~ra880518/parser/prog-texto/script ${nomegram} ) 2>> ${serr}

  printf "%s " "${dir}" >> ${summ}
  if [ ! -r  ${dir}/time.txt ]; then 
    printf "? sec" >> ${summ}
  else
    cat ${dir}/time.txt \
      | tr '\012' ' ' \
      | sed \
          -e 's/Tempo de execucao //g' \
          -e 's/segundos/sec/g' \
      >> ${summ}
  fi
  if [ ! -r  ${dir}/tree.txt ]; then touch ${dir}/tree.txt; fi
  ( egrep -i '[Á]rvore m[ã]e do gabarito|Sentença incorreta' ${dir}/tree.txt \
    || echo " (no result) " ) \
    | sed \
        -e 's/[Á]rvore m[ã]e do gabarito com/gab =/g' \
        -e 's/[á]rvore(s) do total de/tot =/g' \
        -e 's/[á]rvore(s)./ok/g' \
        -e 's/Sentença incorreta./gab = 0 tot = 0 incorreta/g' \
        -e 's/ (no result)/ gab = 0 tot = 0 falhou/g' \
    >> ${summ}
done
