]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bc/tests/script.sh
Update to version 3.1.1
[FreeBSD/FreeBSD.git] / contrib / bc / tests / script.sh
1 #! /bin/sh
2 #
3 # SPDX-License-Identifier: BSD-2-Clause
4 #
5 # Copyright (c) 2018-2020 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 if [ "$#" -lt 2 ]; then
37         printf 'usage: %s dir script [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
38         exit 1
39 fi
40
41 d="$1"
42 shift
43
44 f="$1"
45 shift
46
47 if [ "$#" -gt 0 ]; then
48         run_extra_tests="$1"
49         shift
50 else
51         run_extra_tests=1
52 fi
53
54 if [ "$#" -gt 0 ]; then
55         run_stack_tests="$1"
56         shift
57 else
58         run_stack_tests=1
59 fi
60
61 if [ "$#" -gt 0 ]; then
62         generate="$1"
63         shift
64 else
65         generate=1
66 fi
67
68 if [ "$#" -gt 0 ]; then
69         time_tests="$1"
70         shift
71 else
72         time_tests=0
73 fi
74
75 if [ "$#" -gt 0 ]; then
76         exe="$1"
77         shift
78 else
79         exe="$testdir/../bin/$d"
80 fi
81
82 out="$testdir/../.log_${d}_test.txt"
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 s="$scriptdir/$f"
124 orig="$testdir/$name.txt"
125 results="$scriptdir/$name.txt"
126
127 if [ -f "$orig" ]; then
128         res="$orig"
129 elif [ -f "$results" ]; then
130         res="$results"
131 elif [ "$generate" -eq 0 ]; then
132         printf 'Skipping %s script %s\n' "$d" "$s"
133         exit 0
134 else
135         printf 'Generating %s results...' "$f"
136         printf '%s\n' "$halt" | "$d" "$s" > "$results"
137         printf 'done\n'
138         res="$results"
139 fi
140
141 printf 'Running %s script %s...' "$d" "$f"
142
143 if [ "$time_tests" -ne 0 ]; then
144         printf '\n'
145         printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out"
146         printf '\n'
147 else
148         printf '%s\n' "$halt" | "$exe" "$@" $options "$s" > "$out"
149 fi
150
151 diff "$res" "$out"
152
153 rm -f "$out"
154
155 printf 'pass\n'