#!/bin/sh -eu

MY_PATH="$(dirname ${0})"
MY_PATH="$(cd ${MY_PATH} && pwd)"
if [ -z "$MY_PATH" ] ; then
    # error; for some reason, the path is not accessible
    # to the script (e.g. permissions re-evaled after suid)
    exit 1  # fail
fi

#exports
OS="$(uname)"
if [ "${OS}" = "CYGWIN_NT-6.3" ] ; then
	export EXT=".exe"
else
  LIBVS_PATH="${MY_PATH}/../../../bin/x64/${1}"
	if [ "${OS}" = "Darwin" ] ; then
		export DYLD_LIBRARY_PATH="../../../external_deps/lib/opencv2/lib/:../../../external_deps/lib/ceres/:$LIBVS_PATH:$DYLD_LIBRARY_PATH:/usr/local/cuda/lib/"
	else
		export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIBVS_PATH:/opt/libjpeg-turbo/lib/:/usr/local/lib/:/usr/local/cuda/lib64/"
	fi
	export EXT=""
	export DISPLAY=:0.0
fi

#executing unit-tests
export BINDIR="../../../bin/x64/${1}/test"
FILTER='./*/*.cpp'
NUMTESTS=`find . -maxdepth 1 -type d | wc -l`
SEP="*****"
FAILED_TESTS=""
for i in `ls $FILTER` ; do
	#test name: everything before Test.cpp
	n=`basename "$i" "Test.cpp"`
	echo "$SEP Executing test $n [$BINDIR$n$EXT] $SEP"
	"$BINDIR$n$EXT"
	if [ $? -ne 0 ] ; then
		echo "$SEP Test failed: $n [$BINDIR$n$EXT] $SEP"
		FAILED_TESTS="$FAILED_TESTS\t$n\n"
	fi
	echo "$SEP$SEP$SEP$SEP$SEP$SEP$SEP$SEP$SEP$SEP"
	echo
done

#return value
if [ $(echo -e "$FAILED_TESTS" | wc -l) != 1 ] ; then
	echo "$(($(echo -e $FAILED_TESTS | wc -l)-1)) tests (out of $NUMTESTS) failed:"
	echo "$FAILED_TESTS"
	echo "FAILURE"
	exit 1
fi

echo "SUCCESS"