#!/usr/bin/env bash
# $Id: xc-run_testsuite 12322 2016-04-20 00:47:35Z dstrubbe $

if [ -n "$SKIP_CHECK" ]; then
    echo "Skipping checks"
    exit 0
fi

if [ -z "$srcdir" ]; then
  srcdir="./"
fi

if [ -z "$tmpdir" ]; then
  tmpdir="/tmp"
fi

if [ -z "$builddir" ]; then
  builddir="./"
fi

# We only print using colors if the output is going to a terminal
if [ -t 1 ] ; then
  NC='\033[0m'
  RED='\033[1;31m'
  GREEN='\033[1;32m'
  YELLOW='\033[1;33m'
  PINK='\033[1;35m'
fi
 
fail=0
echo -e "${YELLOW}Comparing against reference data${NC}"
echo -e "======================================================================"
echo -e "   Functional                     System               Result"
echo -e "                                             Unpolarized    Polarized "
echo -e "======================================================================"

for i in $(ls $srcdir/regression/*.pol.bz2 | sort); do
  refname=$(basename ${i} .pol.bz2)
  func=${refname%.*}
  system=${refname#*.}
  name=$(printf '%-30s %-10s' ${func} ${system})

  workdir=$(mktemp -d ${tmpdir}/libxc.XXXXXXXXXX)
  
  echo -ne "${NC} * ${PINK}${name}"

  bunzip2 -c $srcdir/regression/$refname.pol.bz2 > $workdir/$refname.pol_ref
  bunzip2 -c $srcdir/regression/$refname.unpol.bz2 > $workdir/$refname.unpol_ref

  $EXEC $builddir/xc-regression $func $srcdir/input/$system $workdir/$refname.pol $workdir/$refname.unpol > /dev/null
  
  # Spin-restricted
  res=$($builddir/xc-error $workdir/$refname.unpol $workdir/$refname.unpol_ref)
  if [ "x$res" = "x1" ]; then
      echo -ne "${GREEN}   OK     "
  else
      echo -ne "${RED}  FAIL    "
      let fail++
  fi

  # Spin-unrestricted
  res=$($builddir/xc-error $workdir/$refname.pol $workdir/$refname.pol_ref)
  if [ "x$res" = "x1" ]; then
      echo -e "      ${GREEN}OK"
  else
      echo -e "     ${RED}FAIL"
      let fail++
  fi
done

echo -e "${NC}"

exit $fail
