1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/bin/bash
# Executes one or several .mod or .m files in a separate directory, for the testsuite
set -e
shopt -s extglob
if (($# < 6 )); then
echo "Usage: $0 build_for matlab_octave_exe matlab_octave_version matlab_arch source_root build_root test_file(s) [-- extra_file(s)]" 2>&1
exit 1
fi
build_for=$1
matlab_octave_exe=$2
matlab_octave_version=$3
matlab_arch=$4
source_root=$5
build_root=$6
shift 6
test_files=()
while (($# > 0)); do
if [[ $1 == "--" ]]; then
shift
break
fi
test_files+=("$1")
shift
done
extra_files=("$@")
# Create and populate the temporary directory
# We use /var/tmp because /tmp is a tmpfs under Debian (thus in RAM), and some
# tests use a lot of disk (and would thus consume a lot of RAM)
tmpdir=$(mktemp -d --tmpdir=/var/tmp)
cleanup ()
{
rm -rf "${tmpdir}"
}
trap cleanup EXIT
for f in "${test_files[@]}" "${extra_files[@]}"; do
# NB: for computing the subdir, we do not use ${f%/*}, because the latter does not
# work with files which are not in a subdir (i.e. no slash in the filename).
# We rather use pattern substitution (and we use an extended pattern of the
# form *(pattern-list), hence the extglob option above).
subdir=${f/%*([^\/])/}
mkdir -p "${tmpdir}/${subdir}"
cp "${source_root}/tests/${f}" "${tmpdir}/${f}"
done
# If testing with MATLAB, compute the right batch flags
if [[ $build_for == matlab ]]; then
if [[ $matlab_arch == win64 ]]; then
matlab_batch_flags=(-noFigureWindows -batch)
else
matlab_batch_flags=(-nodisplay -batch)
fi
fi
export DYNARE_BUILD_DIR=$build_root
export source_root
for test_file in "${test_files[@]}"; do
test_basename=${test_file##*/}
# See the remark above for computing the subdir
test_subdir=${test_file/%*([^\/])/}
if [[ $test_file =~ \.mod$ ]]; then
export mod_file=$test_basename
if [[ $build_for == matlab ]]; then
test_arg=run_mod_file
else
test_arg=run_mod_file.m
fi
cp "${source_root}"/tests/run_mod_file.m "${tmpdir}"/"${test_subdir}"
elif [[ $test_file =~ \.m$ ]]; then
if [[ $build_for == matlab ]]; then
test_arg=${test_basename%.m}
else
test_arg=$test_basename
fi
echo "Running $test_file"
else
echo "Unsupported file extension: $test_file" 2>&1
exit 1
fi
cd "${tmpdir}"/"${test_subdir}"
if [[ $build_for == matlab ]]; then
"$matlab_octave_exe" "${matlab_batch_flags[@]}" "$test_arg"
else
# We cannot use the --no-window-system option and are forced to provide
# a window system so that some other graphics toolkit than gnuplot is
# available, since the latter is unmaintained, see bug:
# https://savannah.gnu.org/bugs/?62101 (this affects at least
# tests/shock_decomposition/ls2003_plot.mod)
"$matlab_octave_exe" --no-init-file --silent --no-history "$test_arg"
fi
done
|