#!/bin/bash
set -efu

PYS=${PYS:-"$(py3versions -s 2>/dev/null)"}
TESTMODE=${TESTMODE:-full}
TESTPKG=${TESTPKG:-}
export HOME=$AUTOPKGTEST_TMP
export TMPDIR=$AUTOPKGTEST_TMP

SUBMODULE=
if [ "x${TESTPKG}" != "x" ]; then
    SUBMODULE="-s ${TESTPKG}";
fi

MODE=
if [ "x${TESTMODE}" != "xfull" ]; then
    MODE="-m full";
fi

# some tests are expected to fail
# so list tests to skip in array variable SKIP_TEST_LIST
declare -a SKIP_TEST_LIST

# some arches fail some tests with specific BLAS implementations
# Bug#1003880: skip test_hermitian_modes with blis on i386 (sparse.linalg._eigen.arpack)
arch=$(dpkg-architecture -qDEB_HOST_ARCH)
ma=$(dpkg-architecture -qDEB_HOST_MULTIARCH)
if [ "$arch" = "i386" ] && update-alternatives --query libblas.so.3-$ma | sed -n "/^Value:/p" | grep -q blis ; then
    SKIP_TEST_LIST=(${SKIP_TEST_LIST[@]} test_hermitian_modes test_complex_nonsymmetric_modes test_standard_nonsymmetric_starting_vector test_general_nonsymmetric_starting_vector test_svd_linop)
fi
if [ "$arch" = "armhf" ] && update-alternatives --query libblas.so.3-$ma | sed -n "/^Value:/p" | grep -q openblas ; then
    # test_large_rank_deficient in scipy/optimize/tests/test_lsq_linear.py times out or segfaults with openblas on armhf
    # and other TestTRF tests time out
    # test_disp in optimize/tests/test_linprog.py times out with openblas on armhf
    SKIP_TEST_LIST=(${SKIP_TEST_LIST[@]} test_large_rank_deficient TestTRF test_disp)
fi
if [ "$arch" = "armhf" ] && update-alternatives --query libblas.so.3-$ma | sed -n "/^Value:/p" | grep -q atlas ; then
    SKIP_TEST_LIST=(${SKIP_TEST_LIST[@]} test_aligned_mem)
fi

SKIP_TESTS=""
list_initialised=0
for t in ${SKIP_TEST_LIST[@]}; do
    if [ ${list_initialised} = 0 ]; then
	SKIP_TESTS=$t
	list_initialised=1
    else
	SKIP_TESTS="${SKIP_TESTS} or $t"
    fi
done
if [ "x${SKIP_TESTS}" != "x" ]; then
    SKIP_TESTS="not ( ${SKIP_TESTS} )"
fi
echo "skipping tests with SKIP_TEST_LIST=${SKIP_SKIP_TEST_LIST[@]}"

for py in $PYS; do
    echo "=== Testing: $py $TESTPKG ==="
    $py runtests.py -n -v ${MODE} ${SUBMODULE} -- -k "${SKIP_TESTS}" 2>&1
    echo "=== Done: $py $TESTPKG ==="
done
