#!/bin/sh
# compara: los datos con unidades (t=25 tempC, l=100 cm) en el lenguaje de
# calcula: cada entrada de entradas/, con el sistema que dice su primer
# renglon (# sistema: ID), contra lo de esperado/. Estado 0 si dan igual.
#
#     tests/unidades/compara CALCULA            compara
#     tests/unidades/compara CALCULA --congela  guarda lo que da hoy
#
# Los modulos (libcalcula-*.so) los busca por LD_LIBRARY_PATH y los
# sistemas en ../../sistemas.
aqui=$(cd "$(dirname "$0")" && pwd)
calcula=${1:?uso: compara CALCULA [--congela]}
export CALCULA_SISTEMAS="$aqui/../../sistemas"
fallan=0; n=0
for e in "$aqui"/entradas/*; do
  b=$(basename "$e"); n=$((n + 1))
  sistema=$(sed -n '1s/^# sistema: *//p' "$e")
  sal=$(mktemp)
  # la ruta de los sistemas cambia de una copia a otra: queda como SISTEMAS
  { timeout 60 "$calcula" -s "$sistema" "$e" 2>&1; echo "estado $?"; } \
    | sed "s|$CALCULA_SISTEMAS|SISTEMAS|g" > "$sal"
  if [ "$2" = --congela ]; then cp "$sal" "$aqui/esperado/$b"
  elif cmp -s "$sal" "$aqui/esperado/$b"; then echo "  ok    $b"
  else echo "  FALLA $b"; diff "$aqui/esperado/$b" "$sal" | head -10 | sed 's/^/        /'; fallan=$((fallan + 1)); fi
  rm -f "$sal"
done
[ "$2" = --congela ] && { echo "$n congeladas"; exit 0; }
echo "$n entradas, $fallan distintas de lo esperado"
[ $fallan -eq 0 ]
