#!/bin/bash
set -e

# Run a selection of unit tests. They were selected randomly.

pkg=libstan-math-dev

export LC_ALL=C.UTF-8
if [ "${AUTOPKGTEST_TMP}" = "" ] ; then
  AUTOPKGTEST_TMP=$(mktemp -d /tmp/${pkg}-test.XXXXXX)
  # Double quote below to expand the temporary directory variable now versus
  # later is on purpose.
  # shellcheck disable=SC2064
  trap "rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
fi

cp -r test/ $AUTOPKGTEST_TMP
cd $AUTOPKGTEST_TMP

arch_triple=$(dpkg-architecture -qDEB_HOST_MULTIARCH)

touch outputsOfTests
for F in prim/prob/gamma_lccdf_test prim/err/check_cholesky_factor_test rev/functor/chem_dae_sens_typed_test rev/fun/to_vector_test prim/fun/size_mvt_test rev/fun/eigenvectors_sym_test mix/fun/rank_test opencl/double_d_test prim/fun/get_base1_lhs_test rev/meta/promote_var_matrix_test prim/prob/hmm_latent_rng_test prim/prob/bernoulli_logit_glm_rng_test mix/fun/isnan_test opencl/rev/weibull_lcdf_test rev/functor/ode_store_sensitivities_test opencl/rev/to_array_1d_test opencl/kernel_generator/unary_operation_cl_test prim/err/check_vector_index_test mix/fun/bessel_first_kind_test prim/prob/frechet_ccdf_log_test; do \
    g++ -DTBB_INTERFACE_NEW -D_REENTRANT -I . -I /usr/include/eigen3 -I /usr/lib/${arch_triple}/openmpi/include -I /usr/lib/${arch_triple}/mpich/include -O2 test/unit/math/$F.cpp -lgtest_main -lgtest -ltbb -lsundials_core -lsundials_cvodes -lsundials_kinsol -lsundials_idas -lmpi -o test/unit/math/$F.out; \
    test/unit/math/$F.out > outputOfThisTest; \
    cat outputOfThisTest; \
    cat outputOfThisTest >> outputsOfTests; \
done
! grep "FAILED" outputsOfTests
