]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bc/tests/script.sh
MFV d60fa10fd872db7e3d8cb1e161cfdae026c43b14:
[FreeBSD/FreeBSD.git] / contrib / bc / tests / script.sh
1 #! /bin/sh
2 #
3 # SPDX-License-Identifier: BSD-2-Clause
4 #
5 # Copyright (c) 2018-2021 Gavin D. Howard and contributors.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are met:
9 #
10 # * Redistributions of source code must retain the above copyright notice, this
11 #   list of conditions and the following disclaimer.
12 #
13 # * Redistributions in binary form must reproduce the above copyright notice,
14 #   this list of conditions and the following disclaimer in the documentation
15 #   and/or other materials provided with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
28 #
29
30 set -e
31
32 script="$0"
33
34 testdir=$(dirname "${script}")
35
36 . "$testdir/../functions.sh"
37
38 if [ "$#" -lt 2 ]; then
39         printf 'usage: %s dir script [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
40         exit 1
41 fi
42
43 d="$1"
44 shift
45
46 f="$1"
47 shift
48
49 if [ "$#" -gt 0 ]; then
50         run_extra_tests="$1"
51         shift
52 else
53         run_extra_tests=1
54 fi
55
56 if [ "$#" -gt 0 ]; then
57         run_stack_tests="$1"
58         shift
59 else
60         run_stack_tests=1
61 fi
62
63 if [ "$#" -gt 0 ]; then
64         generate="$1"
65         shift
66 else
67         generate=1
68 fi
69
70 if [ "$#" -gt 0 ]; then
71         time_tests="$1"
72         shift
73 else
74         time_tests=0
75 fi
76
77 if [ "$#" -gt 0 ]; then
78         exe="$1"
79         shift
80 else
81         exe="$testdir/../bin/$d"
82 fi
83
84 if [ "$d" = "bc" ]; then
85
86         if [ "$run_stack_tests" -ne 0 ]; then
87                 options="-lgq"
88         else
89                 options="-lq"
90         fi
91
92         halt="halt"
93
94 else
95         options="-x"
96         halt="q"
97 fi
98
99 scriptdir="$testdir/$d/scripts"
100
101 name="${f%.*}"
102
103 if [ "$f" = "timeconst.bc" ]; then
104         exit 0
105 fi
106
107 if [ "$run_extra_tests" -eq 0 ]; then
108         if [ "$f" = "rand.bc" ]; then
109                 printf 'Skipping %s script: %s\n' "$d" "$f"
110                 exit 0
111         fi
112 fi
113
114 if [ "$run_stack_tests" -eq 0 ]; then
115
116         if [ "$f" = "globals.bc" -o "$f" = "references.bc" -o "$f" = "rand.bc" ]; then
117                 printf 'Skipping %s script: %s\n' "$d" "$f"
118                 exit 0
119         fi
120
121 fi
122
123 out="$testdir/${d}_outputs/${name}_script_results.txt"
124 outdir=$(dirname "$out")
125
126 if [ ! -d "$outdir" ]; then
127         mkdir -p "$outdir"
128 fi
129
130 unset BC_ENV_ARGS
131 unset BC_LINE_LENGTH
132 unset DC_ENV_ARGS
133 unset DC_LINE_LENGTH
134
135 s="$scriptdir/$f"
136 orig="$testdir/$name.txt"
137 results="$scriptdir/$name.txt"
138
139 if [ -f "$orig" ]; then
140         res="$orig"
141 elif [ -f "$results" ]; then
142         res="$results"
143 elif [ "$generate" -eq 0 ]; then
144         printf 'Skipping %s script %s\n' "$d" "$s"
145         exit 0
146 else
147         printf 'Generating %s results...' "$f"
148         printf '%s\n' "$halt" | "$d" "$s" > "$results"
149         printf 'done\n'
150         res="$results"
151 fi
152
153 set +e
154
155 printf 'Running %s script %s...' "$d" "$f"
156
157 if [ "$time_tests" -ne 0 ]; then
158         printf '\n'
159         printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out"
160         err="$?"
161         printf '\n'
162 else
163         printf '%s\n' "$halt" | "$exe" "$@" $options "$s" > "$out"
164         err="$?"
165 fi
166
167 checktest "$d" "$err" "script $f" "$res" "$out"
168
169 rm -f "$out"
170
171 exec printf 'pass\n'