set -e

# MPI tests are set up to run on 3 processes.
N_MPI=3
export OMPI_MCA_plm_rsh_agent=/bin/false
export OMPI_MCA_rmaps_base_oversubscribe=1
export OMPI_MCA_btl_base_warn_component_unused=0

DEB_HOST_ARCH=$( dpkg-architecture -qDEB_HOST_ARCH )

ARCH_SKIP_TESTS_LIST="arm64 armhf i386 ppc64el s390x"

case " ${ARCH_SKIP_TESTS_LIST} " in
  *\ ${DEB_HOST_ARCH}\ *) echo "skipping selected tests on ${DEB_HOST_ARCH}"
     TESTS_SKIPPED="test_compute_entity_collisions_2d"
     MULTIPLE_TESTS_SKIPPED="test_compute_entity_collisions_3d test_meshes_on_diagonal test_meshes_with_boundary_edge_overlap_2d test_volume_2d"

     case " armhf i386 s390x " in
	 *\ ${DEB_HOST_ARCH}\ *) ARCH_SPECIFIC_TESTS_SKIPPED="test_mixed_assembly_rank0";;
	 *) ARCH_SPECIFIC_TESTS_SKIPPED=;;
     esac
     
     for test in $MULTIPLE_TESTS_SKIPPED $ARCH_SPECIFIC_TESTS_SKIPPED; do
       TESTS_SKIPPED="$TESTS_SKIPPED or $test"
     done
     TEST_KEYWORD="not (${TESTS_SKIPPED})"
     echo skipping tests ${TESTS_SKIPPED};;

  *) TEST_KEYWORD=;;
esac

echo "=== python unit test (serial) ==="
python3 -m pytest --durations=20 -k "${TEST_KEYWORD}" python/test/unit/


MPI_TEST_KEYWORD="not test_function"
MPI_TESTS_SKIPPED="test_function.py"
MULTIPLE_MPI_TESTS_SKIPPED="test_function_assigner.py test_shared_entities[shared_vertex-mesh_factory8]"
for test in $MULTIPLE_MPI_TESTS_SKIPPED; do
  MPI_TESTS_SKIPPED="$MPI_TESTS_SKIPPED or $test"
done
MPI_TEST_KEYWORD="not (${MPI_TESTS_SKIPPED})"
echo skipping MPI tests ${MPI_TESTS_SKIPPED}

echo "=== python unit test (MPI) ==="
mpirun -n ${N_MPI} python3 -m pytest --durations=20 -k "${MPI_TEST_KEYWORD}" python/test/unit/ --color=no
