#!/bin/bash
set -e

export PRTE_MCA_plm_ssh_agent=/bin/false
export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe
export OMPI_MCA_btl_base_warn_component_unused=0
export OMPI_MCA_btl_tcp_if_include=lo   # avoid complaints about unreachable pairing between local and remote

DEB_HOST_ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_BITS=$(dpkg-architecture -qDEB_HOST_ARCH_BITS)

TEST_ARGS="--verbose -j${NPROC}"

# some 64-bit tests are expected to fail on 32-bit systems
# so list tests to skip in array variable SKIP_TEST_LIST
declare -a SKIP_TEST_LIST

if [ "$DEB_HOST_ARCH_BITS" = "32" -a "$SCOTCH_SONAME_SUFFIX" = "_64i" ]; then
    SKIP_TEST_LIST=("${SKIP_TEST_LIST[@]}" test_common_random)
fi

if [ "${DEB_HOST_ARCH}" = "ppc64el" ]; then
   # test_common_thread hangs on ppc64el, see Bug#1121516
   SKIP_TEST_LIST=("${SKIP_TEST_LIST[@]}" test_common_thread)
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
        # cmake uses | for "or" in regex, https://cmake.org/cmake/help/latest/command/string.html#regex-specification
        SKIP_TESTS="${SKIP_TESTS}|$t"
    fi
done
NPROC=`nproc`

echo "Running scotch tests using ${NPROC} processes"

if [ "x${SKIP_TESTS}" != "x" ]; then
    echo "skipping tests: ${SKIP_TESTS}"
    TEST_ARGS="${TEST_ARGS} -E \"${SKIP_TESTS}\""
fi

TESTDIR=$PWD/src/check/runcheck${BUILD_PTSCOTCH:+_pt}${SCOTCH_SONAME_SUFFIX}

mkdir ${TESTDIR}
cd ${TESTDIR}

cmake -DSCOTCH_TEST_STANDALONE=1 \
    -DSCOTCH_SONAME_SUFFIX=${SCOTCH_SONAME_SUFFIX}  \
    -DBUILD_PTSCOTCH=${BUILD_PTSCOTCH} \
    ..
make

if [ "${DEB_HOST_ARCH}" = "ppc64el" ]; then
    echo "Debug info on ppc64el for Bug#1121516:"
    uname -a
    dpkg -l gcc gcc-15 libc6-dev
    gcc --version
    /usr/sbin/ppc64_cpu --smt
    /usr/sbin/ppc64_cpu --info
    echo "nproc=`nproc`"
    echo "check test_common_thread"
    timeout 60 ./test_common_thread || err=$?
    echo -n "60-sec time-limited test_common_thread "
    if [ "x$err" != "x" ]; then
        echo "failed with exit code $err"
    else
        echo "passed"
    fi
fi

make -j${NPROC} test ARGS\+="${TEST_ARGS}"
