#
#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  SLEPc - Scalable Library for Eigenvalue Problem Computations
#  Copyright (c) 2002-2018, Universitat Politecnica de Valencia, Spain
#
#  This file is part of SLEPc.
#  SLEPc is distributed under a 2-clause BSD license (see LICENSE).
#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#

include ${PETSC_DIR}/lib/petsc/conf/test

ALLTESTS_PRINT_PROGRESS = no
# To print the test name use this
#ALLTESTS_PRINT_PROGRESS = test

SETTEST = \
        test=$(subst run,,$@); check=$${test}; \
        ([ x${ALLTESTS_PRINT_PROGRESS} = xtest ] && printf "%27s in $(subst ${SLEPC_DIR},SLEPC_DIR,${PWD})\n" $${test})

TESTCODE = \
        [ x${SAVE_OUTPUT} = xyes ] && cp $${test}.tmp output/$${check}.out; \
        ${DIFF} output/$${check}.out $${test}.tmp || \
        echo "Possible problem with $${test}, diffs above"; \
        ${RM} $${test}.tmp

TESTCODE_CUDA = \
        [ x${SAVE_OUTPUT} = xyes ] && cp $${test}.tmp output/$${check}.out; \
        ${SED} 's/type: seqcuda/type: seq/' $${test}.tmp | \
        ${SED} 's/type: seqaijcusparse/type: seqaij/' | ${DIFF} - output/$${check}.out || \
        echo "Possible problem with $${test}, diffs above"; \
        ${RM} $${test}.tmp

testexamples_C_Double: ${TESTEXAMPLES_C_DOUBLE}
testexamples_C_DataFile: ${TESTEXAMPLES_C_DATAFILE}
testexamples_DATAFILESPATH_Complex: ${TESTEXAMPLES_DATAFILESPATH_COMPLEX}
testexamples_ARPACK: ${TESTEXAMPLES_ARPACK}
testexamples_BLOPEX: ${TESTEXAMPLES_BLOPEX}
testexamples_BLZPACK: ${TESTEXAMPLES_BLZPACK}
testexamples_FEAST: ${TESTEXAMPLES_FEAST}
testexamples_PRIMME: ${TESTEXAMPLES_PRIMME}
testexamples_TRLAN: ${TESTEXAMPLES_TRLAN}

testexamples_C: ${TESTEXAMPLES_C}
testexamples_C_NotSingle: ${TESTEXAMPLES_C_NOTSINGLE}
testexamples_Cxx: ${TESTEXAMPLES_CXX}
testexamples_C_X: ${TESTEXAMPLES_C_X}
testexamples_Fortran: ${TESTEXAMPLES_FORTRAN}
testexamples_Fortran_NotSingle: ${TESTEXAMPLES_FORTRAN_NOTSINGLE}
testexamples_C_X_MPIUni: ${TESTEXAMPLES_C_X_MPIUNI}
testexamples_C_Complex: ${TESTEXAMPLES_C_COMPLEX}
testexamples_C_NoComplex: ${TESTEXAMPLES_C_NOCOMPLEX}
testexamples_C_NoComplex_NotSingle: ${TESTEXAMPLES_C_NOCOMPLEX_NOTSINGLE}
testexamples_DATAFILESPATH: ${TESTEXAMPLES_DATAFILESPATH}
testexamples_Fortran_DATAFILESPATH: ${TESTEXAMPLES_FORTRAN_DATAFILESPATH}
testexamples_Cxx_DATAFILESPATH: ${TESTEXAMPLES_CXX_DATAFILESPATH}
testexamples_DOUBLEINT32: ${TESTEXAMPLES_DOUBLEINT32}
testexamples_Fortran_DOUBLEINT32: ${TESTEXAMPLES_FORTRAN_DOUBLEINT32}
testexamples_Fortran_NoComplex: ${TESTEXAMPLES_FORTRAN_NOCOMPLEX}
testexamples_Fortran_NoComplex_NotSingle: ${TESTEXAMPLES_FORTRAN_NOCOMPLEX_NOTSINGLE}
testexamples_Fortran_MPIUni: ${TESTEXAMPLES_FORTRAN_MPIUNI}
testexamples_Fortran_Complex: ${TESTEXAMPLES_FORTRAN_COMPLEX}
testexamples_C_Complex_MPIUni: ${TESTEXAMPLES_C_CCOMPLEX_MPIUNI}
testexamples_F90: ${TESTEXAMPLES_F90}
testexamples_F90_NotSingle: ${TESTEXAMPLES_F90_NOTSINGLE}
testexamples_F90_Complex: ${TESTEXAMPLES_F90_COMPLEX}
testexamples_F90_NoComplex: ${TESTEXAMPLES_F90_NOCOMPLEX}
testexamples_VECCUDA: ${TESTEXAMPLES_VECCUDA}
testexamples_VECCUDA_Complex: ${TESTEXAMPLES_VECCUDA_COMPLEX}
testexamples_VECCUDA_NoComplex: ${TESTEXAMPLES_VECCUDA_NOCOMPLEX}
testexamples_VECCUDA_DATAFILESPATH: ${TESTEXAMPLES_VECCUDA_DATAFILESPATH}

slepc_alltests:
	-@${RM} -f ${PETSC_ARCH}/lib/slepc/conf/alltests.log alltests.log
	@if [ x${PETSC_ARCH} != x -a -d "${PETSC_ARCH}" ]; then \
            ln -s ${PETSC_ARCH}/lib/slepc/conf/alltests.log alltests.log; \
            ALLTESTSLOG=${PETSC_ARCH}/lib/slepc/conf/alltests.log; \
          else \
            ALLTESTSLOG=alltests.log; \
          fi; \
          ${OMAKE} alltest PETSC_ARCH=${PETSC_ARCH} PETSC_DIR=${PETSC_DIR} SLEPC_DIR=${SLEPC_DIR} MPIEXEC="${MPIEXEC}" DATAFILESPATH=${DATAFILESPATH} 2>&1 | tee $${ALLTESTSLOG}; \
          if [ x${ALLTESTS_CHECK_FAILURES} = xyes ]; then \
            cat $${ALLTESTSLOG} | ${SED} -e '1d' -e '$$d' | \
            ${GREP} -v '^[\*]\{7,7\} Testing: ${TESTMODE}_[a-zA-Z0-9_]* [\*]\{7,7\}$$' | \
            ${GREP} -v '^[\.]*$$' | wc -l | ${GREP} '^[ ]*0$$' > /dev/null; \
        fi;

alltest:
	-@date
	-@for i in ${TEST_RUNS} ; do \
          echo "******* Testing: ${TESTMODE}_$$i *******"; \
          ${OMAKE} PATH="${PETSC_DIR}/${PETSC_ARCH}/lib:${PATH}" DIFF=${PETSC_DIR}/lib/petsc/bin/petscdiff PETSC_ARCH=${PETSC_ARCH} PETSC_DIR=${PETSC_DIR} ACTION=${TESTMODE}_$$i MPIEXEC="${MPIEXEC}" PRINT_PROGRESS=${ALLTESTS_PRINT_PROGRESS} slepc_tree ; \
          if [ ${ALLTESTS_PRINT_PROGRESS}foo = dotfoo ] ; then printf "\n"; fi; \
        done
	-@date

