#!/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 )

# tests randomly time out (both serial and MPI), see Bug#1091613
# amd64 and arm64 seem to have stabilised. Skip other arches.
case " amd64 arm64 " in
    *\ ${DEB_HOST_ARCH}\ *)  echo "run all tests on ${DEB_HOST_ARCH}";;
    *) TEST_SELECTION="not (test_original_checkpoint or test_checkpointing)";
       echo "test skips: ${TEST_SELECTION}";;
esac

# s390x segfaults in all known tests. Something is amiss.
# Adios2 upstream acknowledges big-endian support is not tested.
# (some adios2 and dolfinx VTX tests fail, some pass)
# Assume all big-endian systems will fail adios4dolfinx and skip them all.
DEB_HOST_ARCH_ENDIAN=$(dpkg-architecture -qDEB_HOST_ARCH_ENDIAN)
if [ "x${DEB_HOST_ARCH_ENDIAN}" = "xbig" ]; then
  echo "Adios2 support is not tested on big-endian systems."
else
  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 adios4dolfinx trying to read in output files generated with a
    # different PETSc scalar type (real vs complex).
    ${MPIEXEC} python$pyver -m pytest --basetemp=${AUTOPKGTEST_TMP} --color=no -k "${TEST_SELECTION}" tests
  done
fi
