#!/bin/bash
set -e

# allow for the possibility that MPI tests are run
# on systems with a single CPU
export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe

# OpenMPI 5 often sends uphelpful warnings to stderr, which are not actually errors:
#   opal/mca/btl/tcp/btl_tcp_proc.c:266:mca_btl_tcp_proc_create_interface_graph] Unable to find reachable pairing between local and remote interfaces
# This env variable was identified as a workaround in Bug#1087784, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1087784
export OMPI_MCA_btl_tcp_if_include=lo

DEB_HOST_ARCH=$( dpkg-architecture -qDEB_HOST_ARCH )

declare -a SKIP_TEST_LIST

if [ "${MPIEXEC}x" != "x" ]; then
    TMPDIR_TAG=${TMPDIR_TAG}_mpi
fi

if [[ $PETSC_DIR = *complex* ]]; then
    # test_xdmf_function fails with complex numbers, upstream Issue#22
    SKIP_TEST_LIST=("${SKIP_TEST_LIST[@]}" test_xdmf_function)
    TMPDIR_TAG=${TMPDIR_TAG}_complex
fi

TEST_SELECTION=""
for t in ${SKIP_TEST_LIST[@]}; do
    if [ "x${TEST_SELECTION}" = "x" ]; then
        TEST_SELECTION=$t
    else
        TEST_SELECTION="${TEST_SELECTION} or $t"
    fi
done
if [ "x${TEST_SELECTION}" != "x" ]; then
    TEST_SELECTION="not ( ${TEST_SELECTION} )"
    echo "skipping tests: ${TEST_SELECTION}"
fi

n_proc=`nproc`
echo "${n_proc} CPUs are available"
for pyver in `py3versions -sv`; do
    # By default, pytest tmp_path retains the temporary directory for the last 3
    # pytest invocations.
    # Using the --basetemp option will remove the directory before every run,
    # effectively meaning the temporary directories of only the most recent run
    # will be kept. We definitely do not want to keep old runs, because they may
    # result in io4dolfinx trying to read in output files generated with a
    # different PETSc scalar type (real vs complex).
    ${MPIEXEC} python${pyver} -m pytest --basetemp=${AUTOPKGTEST_TMP}/io4dolfinx${TMPDIR_TAG}_py${pyver} --color=no -k "${TEST_SELECTION}" tests
done
