File: test-driver

package info (click to toggle)
dynare 7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 79,248 kB
  • sloc: cpp: 82,011; ansic: 28,583; objc: 12,573; yacc: 5,105; pascal: 2,374; lex: 1,502; python: 1,118; sh: 1,116; makefile: 605; lisp: 162; xml: 18
file content (101 lines) | stat: -rwxr-xr-x 3,010 bytes parent folder | download
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