xref: /aosp_15_r20/external/bc/tests/other.sh (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
1*5a6e8488SAndroid Build Coastguard Worker#! /bin/sh
2*5a6e8488SAndroid Build Coastguard Worker#
3*5a6e8488SAndroid Build Coastguard Worker# SPDX-License-Identifier: BSD-2-Clause
4*5a6e8488SAndroid Build Coastguard Worker#
5*5a6e8488SAndroid Build Coastguard Worker# Copyright (c) 2018-2024 Gavin D. Howard and contributors.
6*5a6e8488SAndroid Build Coastguard Worker#
7*5a6e8488SAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without
8*5a6e8488SAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions are met:
9*5a6e8488SAndroid Build Coastguard Worker#
10*5a6e8488SAndroid Build Coastguard Worker# * Redistributions of source code must retain the above copyright notice, this
11*5a6e8488SAndroid Build Coastguard Worker#   list of conditions and the following disclaimer.
12*5a6e8488SAndroid Build Coastguard Worker#
13*5a6e8488SAndroid Build Coastguard Worker# * Redistributions in binary form must reproduce the above copyright notice,
14*5a6e8488SAndroid Build Coastguard Worker#   this list of conditions and the following disclaimer in the documentation
15*5a6e8488SAndroid Build Coastguard Worker#   and/or other materials provided with the distribution.
16*5a6e8488SAndroid Build Coastguard Worker#
17*5a6e8488SAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*5a6e8488SAndroid Build Coastguard Worker# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*5a6e8488SAndroid Build Coastguard Worker# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*5a6e8488SAndroid Build Coastguard Worker# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*5a6e8488SAndroid Build Coastguard Worker# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*5a6e8488SAndroid Build Coastguard Worker# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*5a6e8488SAndroid Build Coastguard Worker# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*5a6e8488SAndroid Build Coastguard Worker# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*5a6e8488SAndroid Build Coastguard Worker# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*5a6e8488SAndroid Build Coastguard Worker# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*5a6e8488SAndroid Build Coastguard Worker# POSSIBILITY OF SUCH DAMAGE.
28*5a6e8488SAndroid Build Coastguard Worker#
29*5a6e8488SAndroid Build Coastguard Worker
30*5a6e8488SAndroid Build Coastguard Workerset -e
31*5a6e8488SAndroid Build Coastguard Worker
32*5a6e8488SAndroid Build Coastguard Workerscript="$0"
33*5a6e8488SAndroid Build Coastguard Workertestdir=$(dirname "$script")
34*5a6e8488SAndroid Build Coastguard Worker
35*5a6e8488SAndroid Build Coastguard Worker. "$testdir/../scripts/functions.sh"
36*5a6e8488SAndroid Build Coastguard Worker
37*5a6e8488SAndroid Build Coastguard Workeroutputdir=${BC_TEST_OUTPUT_DIR:-$testdir}
38*5a6e8488SAndroid Build Coastguard Worker
39*5a6e8488SAndroid Build Coastguard Worker# Just print the usage and exit with an error. This can receive a message to
40*5a6e8488SAndroid Build Coastguard Worker# print.
41*5a6e8488SAndroid Build Coastguard Worker# @param 1  A message to print.
42*5a6e8488SAndroid Build Coastguard Workerusage() {
43*5a6e8488SAndroid Build Coastguard Worker	if [ $# -eq 1 ]; then
44*5a6e8488SAndroid Build Coastguard Worker		printf '%s\n\n' "$1"
45*5a6e8488SAndroid Build Coastguard Worker	fi
46*5a6e8488SAndroid Build Coastguard Worker	printf 'usage: %s dir extra_math [exec args...]\n' "$script"
47*5a6e8488SAndroid Build Coastguard Worker	exit 1
48*5a6e8488SAndroid Build Coastguard Worker}
49*5a6e8488SAndroid Build Coastguard Worker
50*5a6e8488SAndroid Build Coastguard Worker# Command-line processing.
51*5a6e8488SAndroid Build Coastguard Workerif [ "$#" -ge 2 ]; then
52*5a6e8488SAndroid Build Coastguard Worker
53*5a6e8488SAndroid Build Coastguard Worker	d="$1"
54*5a6e8488SAndroid Build Coastguard Worker	shift
55*5a6e8488SAndroid Build Coastguard Worker	check_d_arg "$d"
56*5a6e8488SAndroid Build Coastguard Worker
57*5a6e8488SAndroid Build Coastguard Worker	extra_math="$1"
58*5a6e8488SAndroid Build Coastguard Worker	shift
59*5a6e8488SAndroid Build Coastguard Worker	check_bool_arg "$extra_math"
60*5a6e8488SAndroid Build Coastguard Worker
61*5a6e8488SAndroid Build Coastguard Workerelse
62*5a6e8488SAndroid Build Coastguard Worker	usage "Not enough arguments; need 2"
63*5a6e8488SAndroid Build Coastguard Workerfi
64*5a6e8488SAndroid Build Coastguard Worker
65*5a6e8488SAndroid Build Coastguard Workerif [ "$#" -lt 1 ]; then
66*5a6e8488SAndroid Build Coastguard Worker	exe="$testdir/../bin/$d"
67*5a6e8488SAndroid Build Coastguard Worker	check_exec_arg "$exe"
68*5a6e8488SAndroid Build Coastguard Workerelse
69*5a6e8488SAndroid Build Coastguard Worker	exe="$1"
70*5a6e8488SAndroid Build Coastguard Worker	shift
71*5a6e8488SAndroid Build Coastguard Worker	check_exec_arg "$exe"
72*5a6e8488SAndroid Build Coastguard Workerfi
73*5a6e8488SAndroid Build Coastguard Worker
74*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
75*5a6e8488SAndroid Build Coastguard Worker	halt="quit"
76*5a6e8488SAndroid Build Coastguard Workerelse
77*5a6e8488SAndroid Build Coastguard Worker	halt="q"
78*5a6e8488SAndroid Build Coastguard Workerfi
79*5a6e8488SAndroid Build Coastguard Worker
80*5a6e8488SAndroid Build Coastguard Workermkdir -p "$outputdir"
81*5a6e8488SAndroid Build Coastguard Worker
82*5a6e8488SAndroid Build Coastguard Worker# For tests later.
83*5a6e8488SAndroid Build Coastguard Workernum=100000000000000000000000000000000000000000000000000000000000000000000000000000
84*5a6e8488SAndroid Build Coastguard Workernum2="$num"
85*5a6e8488SAndroid Build Coastguard Workernumres="$num"
86*5a6e8488SAndroid Build Coastguard Workernum70="10000000000000000000000000000000000000000000000000000000000000000000\\
87*5a6e8488SAndroid Build Coastguard Worker0000000000"
88*5a6e8488SAndroid Build Coastguard Worker
89*5a6e8488SAndroid Build Coastguard Worker# Set stuff for the correct calculator.
90*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
91*5a6e8488SAndroid Build Coastguard Worker	halt="halt"
92*5a6e8488SAndroid Build Coastguard Worker	opt="x"
93*5a6e8488SAndroid Build Coastguard Worker	lopt="extended-register"
94*5a6e8488SAndroid Build Coastguard Worker	line_var="BC_LINE_LENGTH"
95*5a6e8488SAndroid Build Coastguard Worker	lltest="line_length()"
96*5a6e8488SAndroid Build Coastguard Workerelse
97*5a6e8488SAndroid Build Coastguard Worker	halt="q"
98*5a6e8488SAndroid Build Coastguard Worker	opt="l"
99*5a6e8488SAndroid Build Coastguard Worker	lopt="mathlib"
100*5a6e8488SAndroid Build Coastguard Worker	line_var="DC_LINE_LENGTH"
101*5a6e8488SAndroid Build Coastguard Worker	num="$num pR"
102*5a6e8488SAndroid Build Coastguard Worker	lltest="glpR"
103*5a6e8488SAndroid Build Coastguard Workerfi
104*5a6e8488SAndroid Build Coastguard Worker
105*5a6e8488SAndroid Build Coastguard Worker# I use these, so unset them to make the tests work.
106*5a6e8488SAndroid Build Coastguard Workerunset BC_ENV_ARGS
107*5a6e8488SAndroid Build Coastguard Workerunset BC_LINE_LENGTH
108*5a6e8488SAndroid Build Coastguard Workerunset DC_ENV_ARGS
109*5a6e8488SAndroid Build Coastguard Workerunset DC_LINE_LENGTH
110*5a6e8488SAndroid Build Coastguard Worker
111*5a6e8488SAndroid Build Coastguard Workerset +e
112*5a6e8488SAndroid Build Coastguard Worker
113*5a6e8488SAndroid Build Coastguard Workerprintf '\nRunning %s quit test...' "$d"
114*5a6e8488SAndroid Build Coastguard Worker
115*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1
116*5a6e8488SAndroid Build Coastguard Worker
117*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "quit"
118*5a6e8488SAndroid Build Coastguard Worker
119*5a6e8488SAndroid Build Coastguard Worker# bc has two halt or quit commands, so test the second as well.
120*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = bc ]; then
121*5a6e8488SAndroid Build Coastguard Worker
122*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "quit" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1
123*5a6e8488SAndroid Build Coastguard Worker
124*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" quit
125*5a6e8488SAndroid Build Coastguard Worker
126*5a6e8488SAndroid Build Coastguard Worker	two=$("$exe" "$@" -e 1+1 -e quit)
127*5a6e8488SAndroid Build Coastguard Worker
128*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" quit
129*5a6e8488SAndroid Build Coastguard Worker
130*5a6e8488SAndroid Build Coastguard Worker	if [ "$two" != "2" ]; then
131*5a6e8488SAndroid Build Coastguard Worker		err_exit "$d failed test quit" 1
132*5a6e8488SAndroid Build Coastguard Worker	fi
133*5a6e8488SAndroid Build Coastguard Workerfi
134*5a6e8488SAndroid Build Coastguard Worker
135*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
136*5a6e8488SAndroid Build Coastguard Worker
137*5a6e8488SAndroid Build Coastguard Workerbase=$(basename "$exe")
138*5a6e8488SAndroid Build Coastguard Worker
139*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s environment var tests...' "$d"
140*5a6e8488SAndroid Build Coastguard Worker
141*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
142*5a6e8488SAndroid Build Coastguard Worker
143*5a6e8488SAndroid Build Coastguard Worker	export BC_ENV_ARGS=" '-l' '' -q"
144*5a6e8488SAndroid Build Coastguard Worker
145*5a6e8488SAndroid Build Coastguard Worker	printf 's(.02893)\n' 2> /dev/null | "$exe" "$@" > /dev/null
146*5a6e8488SAndroid Build Coastguard Worker
147*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" "environment var"
148*5a6e8488SAndroid Build Coastguard Worker
149*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -e 4 > /dev/null
150*5a6e8488SAndroid Build Coastguard Worker
151*5a6e8488SAndroid Build Coastguard Worker	err="$?"
152*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" "environment var"
153*5a6e8488SAndroid Build Coastguard Worker
154*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
155*5a6e8488SAndroid Build Coastguard Worker
156*5a6e8488SAndroid Build Coastguard Worker	printf 'Running keyword redefinition test...'
157*5a6e8488SAndroid Build Coastguard Worker
158*5a6e8488SAndroid Build Coastguard Worker	unset BC_ENV_ARGS
159*5a6e8488SAndroid Build Coastguard Worker
160*5a6e8488SAndroid Build Coastguard Worker	redefine_res="$outputdir/bc_outputs/redefine.txt"
161*5a6e8488SAndroid Build Coastguard Worker	redefine_out="$outputdir/bc_outputs/redefine_results.txt"
162*5a6e8488SAndroid Build Coastguard Worker
163*5a6e8488SAndroid Build Coastguard Worker	outdir=$(dirname "$redefine_out")
164*5a6e8488SAndroid Build Coastguard Worker
165*5a6e8488SAndroid Build Coastguard Worker	if [ ! -d "$outdir" ]; then
166*5a6e8488SAndroid Build Coastguard Worker		mkdir -p "$outdir"
167*5a6e8488SAndroid Build Coastguard Worker	fi
168*5a6e8488SAndroid Build Coastguard Worker
169*5a6e8488SAndroid Build Coastguard Worker	printf '5\n0\n' > "$redefine_res"
170*5a6e8488SAndroid Build Coastguard Worker
171*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" --redefine=print -e 'define print(x) { x }' -e 'print(5)' > "$redefine_out"
172*5a6e8488SAndroid Build Coastguard Worker	err="$?"
173*5a6e8488SAndroid Build Coastguard Worker
174*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out"
175*5a6e8488SAndroid Build Coastguard Worker
176*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -r "abs" -r "else" -e 'abs = 5;else = 0' -e 'abs;else' > "$redefine_out"
177*5a6e8488SAndroid Build Coastguard Worker	err="$?"
178*5a6e8488SAndroid Build Coastguard Worker
179*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out"
180*5a6e8488SAndroid Build Coastguard Worker
181*5a6e8488SAndroid Build Coastguard Worker	if [ "$extra_math" -ne 0 ]; then
182*5a6e8488SAndroid Build Coastguard Worker
183*5a6e8488SAndroid Build Coastguard Worker		printf 'halt\n' 2> /dev/null | "$exe" "$@" -lr abs -e "perm(5, 1)" -e "0" > "$redefine_out"
184*5a6e8488SAndroid Build Coastguard Worker		err="$?"
185*5a6e8488SAndroid Build Coastguard Worker
186*5a6e8488SAndroid Build Coastguard Worker		checktest "$d" "$err" "keyword not redefined in builtin library" "$redefine_res" "$redefine_out"
187*5a6e8488SAndroid Build Coastguard Worker
188*5a6e8488SAndroid Build Coastguard Worker	fi
189*5a6e8488SAndroid Build Coastguard Worker
190*5a6e8488SAndroid Build Coastguard Worker	"$exe" "$@" -r "break" -e 'define break(x) { x }' 2> "$redefine_out"
191*5a6e8488SAndroid Build Coastguard Worker	err="$?"
192*5a6e8488SAndroid Build Coastguard Worker
193*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "keyword redefinition error" "$redefine_out" "$d"
194*5a6e8488SAndroid Build Coastguard Worker
195*5a6e8488SAndroid Build Coastguard Worker	"$exe" "$@" -e 'define read(x) { x }' 2> "$redefine_out"
196*5a6e8488SAndroid Build Coastguard Worker	err="$?"
197*5a6e8488SAndroid Build Coastguard Worker
198*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "Keyword redefinition error without BC_REDEFINE_KEYWORDS" "$redefine_out" "$d"
199*5a6e8488SAndroid Build Coastguard Worker
200*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
201*5a6e8488SAndroid Build Coastguard Worker	printf 'Running multiline comment expression file test...'
202*5a6e8488SAndroid Build Coastguard Worker
203*5a6e8488SAndroid Build Coastguard Worker	multiline_expr_res=""
204*5a6e8488SAndroid Build Coastguard Worker	multiline_expr_out="$outputdir/bc_outputs/multiline_expr_results.txt"
205*5a6e8488SAndroid Build Coastguard Worker
206*5a6e8488SAndroid Build Coastguard Worker	# tests/bc/misc1.txt happens to have a multiline comment in it.
207*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/misc1.txt" > "$multiline_expr_out"
208*5a6e8488SAndroid Build Coastguard Worker	err="$?"
209*5a6e8488SAndroid Build Coastguard Worker
210*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "multiline comment in expression file" "$testdir/bc/misc1_results.txt" \
211*5a6e8488SAndroid Build Coastguard Worker		"$multiline_expr_out"
212*5a6e8488SAndroid Build Coastguard Worker
213*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
214*5a6e8488SAndroid Build Coastguard Worker	printf 'Running multiline comment expression file error test...'
215*5a6e8488SAndroid Build Coastguard Worker
216*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/05.txt" 2> "$multiline_expr_out"
217*5a6e8488SAndroid Build Coastguard Worker	err="$?"
218*5a6e8488SAndroid Build Coastguard Worker
219*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "multiline comment in expression file error" \
220*5a6e8488SAndroid Build Coastguard Worker		"$multiline_expr_out" "$d"
221*5a6e8488SAndroid Build Coastguard Worker
222*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
223*5a6e8488SAndroid Build Coastguard Worker	printf 'Running multiline string expression file test...'
224*5a6e8488SAndroid Build Coastguard Worker
225*5a6e8488SAndroid Build Coastguard Worker	# tests/bc/strings.txt happens to have a multiline string in it.
226*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/strings.txt" > "$multiline_expr_out"
227*5a6e8488SAndroid Build Coastguard Worker	err="$?"
228*5a6e8488SAndroid Build Coastguard Worker
229*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "multiline string in expression file" "$testdir/bc/strings_results.txt" \
230*5a6e8488SAndroid Build Coastguard Worker		"$multiline_expr_out"
231*5a6e8488SAndroid Build Coastguard Worker
232*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
233*5a6e8488SAndroid Build Coastguard Worker	printf 'Running multiline string expression file error test...'
234*5a6e8488SAndroid Build Coastguard Worker
235*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/16.txt" 2> "$multiline_expr_out"
236*5a6e8488SAndroid Build Coastguard Worker	err="$?"
237*5a6e8488SAndroid Build Coastguard Worker
238*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "multiline string in expression file with backslash error" \
239*5a6e8488SAndroid Build Coastguard Worker		"$multiline_expr_out" "$d"
240*5a6e8488SAndroid Build Coastguard Worker
241*5a6e8488SAndroid Build Coastguard Worker	printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/04.txt" 2> "$multiline_expr_out"
242*5a6e8488SAndroid Build Coastguard Worker	err="$?"
243*5a6e8488SAndroid Build Coastguard Worker
244*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "multiline string in expression file error" \
245*5a6e8488SAndroid Build Coastguard Worker		"$multiline_expr_out" "$d"
246*5a6e8488SAndroid Build Coastguard Worker
247*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
248*5a6e8488SAndroid Build Coastguard Worker
249*5a6e8488SAndroid Build Coastguard Workerelse
250*5a6e8488SAndroid Build Coastguard Worker
251*5a6e8488SAndroid Build Coastguard Worker	export DC_ENV_ARGS="'-x'"
252*5a6e8488SAndroid Build Coastguard Worker	export DC_EXPR_EXIT="1"
253*5a6e8488SAndroid Build Coastguard Worker
254*5a6e8488SAndroid Build Coastguard Worker	printf '4s stuff\n' 2> /dev/null | "$exe" "$@" > /dev/null
255*5a6e8488SAndroid Build Coastguard Worker
256*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" "environment var"
257*5a6e8488SAndroid Build Coastguard Worker
258*5a6e8488SAndroid Build Coastguard Worker	"$exe" "$@" -e 4pR > /dev/null
259*5a6e8488SAndroid Build Coastguard Worker
260*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" "environment var"
261*5a6e8488SAndroid Build Coastguard Worker
262*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
263*5a6e8488SAndroid Build Coastguard Worker
264*5a6e8488SAndroid Build Coastguard Worker	set +e
265*5a6e8488SAndroid Build Coastguard Worker
266*5a6e8488SAndroid Build Coastguard Worker	# dc has an extra test for a case that someone found running this easter.dc
267*5a6e8488SAndroid Build Coastguard Worker	# script. It went into an infinite loop, so we want to check that we did not
268*5a6e8488SAndroid Build Coastguard Worker	# regress.
269*5a6e8488SAndroid Build Coastguard Worker	printf 'three\n' 2> /dev/null | cut -c1-3 > /dev/null
270*5a6e8488SAndroid Build Coastguard Worker	err=$?
271*5a6e8488SAndroid Build Coastguard Worker
272*5a6e8488SAndroid Build Coastguard Worker	if [ "$err" -eq 0 ]; then
273*5a6e8488SAndroid Build Coastguard Worker
274*5a6e8488SAndroid Build Coastguard Worker		printf 'Running dc Easter script...'
275*5a6e8488SAndroid Build Coastguard Worker
276*5a6e8488SAndroid Build Coastguard Worker		easter_out="$outputdir/dc_outputs/easter.txt"
277*5a6e8488SAndroid Build Coastguard Worker		easter_res="$outputdir/dc_outputs/easter_results.txt"
278*5a6e8488SAndroid Build Coastguard Worker
279*5a6e8488SAndroid Build Coastguard Worker		outdir=$(dirname "$easter_out")
280*5a6e8488SAndroid Build Coastguard Worker
281*5a6e8488SAndroid Build Coastguard Worker		if [ ! -d "$outdir" ]; then
282*5a6e8488SAndroid Build Coastguard Worker			mkdir -p "$outdir"
283*5a6e8488SAndroid Build Coastguard Worker		fi
284*5a6e8488SAndroid Build Coastguard Worker
285*5a6e8488SAndroid Build Coastguard Worker		printf '4 April 2021\n' > "$easter_res"
286*5a6e8488SAndroid Build Coastguard Worker
287*5a6e8488SAndroid Build Coastguard Worker		"$testdir/dc/scripts/easter.sh" "$exe" 2021 "$@" 2> /dev/null | cut -c1-12 > "$easter_out"
288*5a6e8488SAndroid Build Coastguard Worker		err="$?"
289*5a6e8488SAndroid Build Coastguard Worker
290*5a6e8488SAndroid Build Coastguard Worker		checktest "$d" "$err" "Easter script" "$easter_out" "$easter_res"
291*5a6e8488SAndroid Build Coastguard Worker
292*5a6e8488SAndroid Build Coastguard Worker		printf 'pass\n'
293*5a6e8488SAndroid Build Coastguard Worker	fi
294*5a6e8488SAndroid Build Coastguard Worker
295*5a6e8488SAndroid Build Coastguard Worker	unset DC_ENV_ARGS
296*5a6e8488SAndroid Build Coastguard Worker	unset DC_EXPR_EXIT
297*5a6e8488SAndroid Build Coastguard Worker
298*5a6e8488SAndroid Build Coastguard Worker	printf 'Running dc extended register command tests...'
299*5a6e8488SAndroid Build Coastguard Worker
300*5a6e8488SAndroid Build Coastguard Worker	ext_reg_out="$outputdir/dc_outputs/ext_reg.txt"
301*5a6e8488SAndroid Build Coastguard Worker	ext_reg_res="$outputdir/dc_outputs/ext_reg_results.txt"
302*5a6e8488SAndroid Build Coastguard Worker
303*5a6e8488SAndroid Build Coastguard Worker	outdir=$(dirname "$ext_reg_out")
304*5a6e8488SAndroid Build Coastguard Worker
305*5a6e8488SAndroid Build Coastguard Worker	if [ ! -d "$outdir" ]; then
306*5a6e8488SAndroid Build Coastguard Worker		mkdir -p "$outdir"
307*5a6e8488SAndroid Build Coastguard Worker	fi
308*5a6e8488SAndroid Build Coastguard Worker
309*5a6e8488SAndroid Build Coastguard Worker	printf '0\n' > "$ext_reg_res"
310*5a6e8488SAndroid Build Coastguard Worker
311*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$halt" | "$exe" "$@" -e "gxpR" 2> /dev/null > "$ext_reg_out"
312*5a6e8488SAndroid Build Coastguard Worker	err="$?"
313*5a6e8488SAndroid Build Coastguard Worker
314*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res"
315*5a6e8488SAndroid Build Coastguard Worker
316*5a6e8488SAndroid Build Coastguard Worker	printf '1\n' > "$ext_reg_res"
317*5a6e8488SAndroid Build Coastguard Worker
318*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$halt" | "$exe" "$@" -x -e "gxpR" 2> /dev/null > "$ext_reg_out"
319*5a6e8488SAndroid Build Coastguard Worker	err="$?"
320*5a6e8488SAndroid Build Coastguard Worker
321*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res"
322*5a6e8488SAndroid Build Coastguard Worker
323*5a6e8488SAndroid Build Coastguard Worker	printf 'pass\n'
324*5a6e8488SAndroid Build Coastguard Worker
325*5a6e8488SAndroid Build Coastguard Workerfi
326*5a6e8488SAndroid Build Coastguard Worker
327*5a6e8488SAndroid Build Coastguard Workerout1="$outputdir/${d}_outputs/${d}_other.txt"
328*5a6e8488SAndroid Build Coastguard Workerout2="$outputdir/${d}_outputs/${d}_other_test.txt"
329*5a6e8488SAndroid Build Coastguard Worker
330*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s line length tests...' "$d"
331*5a6e8488SAndroid Build Coastguard Worker
332*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$numres" > "$out1"
333*5a6e8488SAndroid Build Coastguard Worker
334*5a6e8488SAndroid Build Coastguard Workerexport "$line_var"=80
335*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2"
336*5a6e8488SAndroid Build Coastguard Worker
337*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "line length" "$out1" "$out2"
338*5a6e8488SAndroid Build Coastguard Worker
339*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$num70" > "$out1"
340*5a6e8488SAndroid Build Coastguard Worker
341*5a6e8488SAndroid Build Coastguard Workerexport "$line_var"=2147483647
342*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2"
343*5a6e8488SAndroid Build Coastguard Worker
344*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "line length 2" "$out1" "$out2"
345*5a6e8488SAndroid Build Coastguard Worker
346*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$num2" > "$out1"
347*5a6e8488SAndroid Build Coastguard Worker
348*5a6e8488SAndroid Build Coastguard Workerexport "$line_var"=62
349*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$num" 2> /dev/null | "$exe" "$@" -L > "$out2"
350*5a6e8488SAndroid Build Coastguard Worker
351*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "line length 3" "$out1" "$out2"
352*5a6e8488SAndroid Build Coastguard Worker
353*5a6e8488SAndroid Build Coastguard Workerprintf '0\n' > "$out1"
354*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$lltest" 2> /dev/null | "$exe" "$@" -L > "$out2"
355*5a6e8488SAndroid Build Coastguard Worker
356*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "line length 3" "$out1" "$out2"
357*5a6e8488SAndroid Build Coastguard Worker
358*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
359*5a6e8488SAndroid Build Coastguard Worker
360*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$numres" > "$out1"
361*5a6e8488SAndroid Build Coastguard Workerexport "$line_var"=2147483647
362*5a6e8488SAndroid Build Coastguard Worker
363*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s arg tests...' "$d"
364*5a6e8488SAndroid Build Coastguard Worker
365*5a6e8488SAndroid Build Coastguard Workerf="$testdir/$d/add.txt"
366*5a6e8488SAndroid Build Coastguard Workerexprs=$(cat "$f")
367*5a6e8488SAndroid Build Coastguard Workerresults=$(cat "$testdir/$d/add_results.txt")
368*5a6e8488SAndroid Build Coastguard Worker
369*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n%s\n%s\n%s\n' "$results" "$results" "$results" "$results" > "$out1"
370*5a6e8488SAndroid Build Coastguard Worker
371*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" -e "$exprs" -f "$f" --expression "$exprs" --file "$f" -e "$halt" > "$out2"
372*5a6e8488SAndroid Build Coastguard Worker
373*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "arg" "$out1" "$out2"
374*5a6e8488SAndroid Build Coastguard Worker
375*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2"
376*5a6e8488SAndroid Build Coastguard Worker
377*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "arg" "$out1" "$out2"
378*5a6e8488SAndroid Build Coastguard Worker
379*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
380*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -i > /dev/null 2>&1
381*5a6e8488SAndroid Build Coastguard Workerfi
382*5a6e8488SAndroid Build Coastguard Worker
383*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -h > /dev/null
384*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "arg"
385*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -P > /dev/null
386*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "arg"
387*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -R > /dev/null
388*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "arg"
389*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -v > /dev/null
390*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "arg"
391*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -V > /dev/null
392*5a6e8488SAndroid Build Coastguard Workerchecktest_retcode "$d" "$?" "arg"
393*5a6e8488SAndroid Build Coastguard Worker
394*5a6e8488SAndroid Build Coastguard Workerout=$(printf '0.1\n-0.1\n1.1\n-1.1\n0.1\n-0.1\n')
395*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$out" > "$out1"
396*5a6e8488SAndroid Build Coastguard Worker
397*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
398*5a6e8488SAndroid Build Coastguard Worker	data=$(printf '0.1\n-0.1\n1.1\n-1.1\n.1\n-.1\n')
399*5a6e8488SAndroid Build Coastguard Workerelse
400*5a6e8488SAndroid Build Coastguard Worker	data=$(printf '0.1pR\n_0.1pR\n1.1pR\n_1.1pR\n.1pR\n_.1pR\n')
401*5a6e8488SAndroid Build Coastguard Workerfi
402*5a6e8488SAndroid Build Coastguard Worker
403*5a6e8488SAndroid Build Coastguard Workerprintf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -z > "$out2"
404*5a6e8488SAndroid Build Coastguard Workerchecktest "$d" "$?" "leading zero" "$out1" "$out2"
405*5a6e8488SAndroid Build Coastguard Worker
406*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ] && [ "$extra_math" -ne 0 ]; then
407*5a6e8488SAndroid Build Coastguard Worker
408*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -lz "$testdir/bc/leadingzero.txt" > "$out2"
409*5a6e8488SAndroid Build Coastguard Worker
410*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "leading zero script" "$testdir/bc/leadingzero_results.txt" "$out2"
411*5a6e8488SAndroid Build Coastguard Worker
412*5a6e8488SAndroid Build Coastguard Workerfi
413*5a6e8488SAndroid Build Coastguard Worker
414*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" -f "saotehasotnehasthistohntnsahxstnhalcrgxgrlpyasxtsaosysxsatnhoy.txt" > /dev/null 2> "$out2"
415*5a6e8488SAndroid Build Coastguard Workererr="$?"
416*5a6e8488SAndroid Build Coastguard Worker
417*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "invalid file argument" "$out2" "$d"
418*5a6e8488SAndroid Build Coastguard Worker
419*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "-$opt" -e "$exprs" > /dev/null 2> "$out2"
420*5a6e8488SAndroid Build Coastguard Workererr="$?"
421*5a6e8488SAndroid Build Coastguard Worker
422*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "invalid option argument" "$out2" "$d"
423*5a6e8488SAndroid Build Coastguard Worker
424*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "--$lopt" -e "$exprs" > /dev/null 2> "$out2"
425*5a6e8488SAndroid Build Coastguard Workererr="$?"
426*5a6e8488SAndroid Build Coastguard Worker
427*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "invalid long option argument" "$out2" "$d"
428*5a6e8488SAndroid Build Coastguard Worker
429*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "-u" -e "$exprs" > /dev/null 2> "$out2"
430*5a6e8488SAndroid Build Coastguard Workererr="$?"
431*5a6e8488SAndroid Build Coastguard Worker
432*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "unrecognized option argument" "$out2" "$d"
433*5a6e8488SAndroid Build Coastguard Worker
434*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "--uniform" -e "$exprs" > /dev/null 2> "$out2"
435*5a6e8488SAndroid Build Coastguard Workererr="$?"
436*5a6e8488SAndroid Build Coastguard Worker
437*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "unrecognized long option argument" "$out2" "$d"
438*5a6e8488SAndroid Build Coastguard Worker
439*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" -f > /dev/null 2> "$out2"
440*5a6e8488SAndroid Build Coastguard Workererr="$?"
441*5a6e8488SAndroid Build Coastguard Worker
442*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "missing required argument to short option" "$out2" "$d"
443*5a6e8488SAndroid Build Coastguard Worker
444*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" --file > /dev/null 2> "$out2"
445*5a6e8488SAndroid Build Coastguard Workererr="$?"
446*5a6e8488SAndroid Build Coastguard Worker
447*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "missing required argument to long option" "$out2" "$d"
448*5a6e8488SAndroid Build Coastguard Worker
449*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" --version=5 > /dev/null 2> "$out2"
450*5a6e8488SAndroid Build Coastguard Workererr="$?"
451*5a6e8488SAndroid Build Coastguard Worker
452*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "given argument to long option with no argument" "$out2" "$d"
453*5a6e8488SAndroid Build Coastguard Worker
454*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" -: > /dev/null 2> "$out2"
455*5a6e8488SAndroid Build Coastguard Workererr="$?"
456*5a6e8488SAndroid Build Coastguard Worker
457*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "colon short option" "$out2" "$d"
458*5a6e8488SAndroid Build Coastguard Worker
459*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" --: > /dev/null 2> "$out2"
460*5a6e8488SAndroid Build Coastguard Workererr="$?"
461*5a6e8488SAndroid Build Coastguard Worker
462*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "colon long option" "$out2" "$d"
463*5a6e8488SAndroid Build Coastguard Worker
464*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
465*5a6e8488SAndroid Build Coastguard Worker
466*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s builtin variable arg tests...' "$d"
467*5a6e8488SAndroid Build Coastguard Worker
468*5a6e8488SAndroid Build Coastguard Workerif [ "$extra_math" -ne 0 ]; then
469*5a6e8488SAndroid Build Coastguard Worker
470*5a6e8488SAndroid Build Coastguard Worker	out=$(printf '14\n15\n16\n17.25\n')
471*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$out" > "$out1"
472*5a6e8488SAndroid Build Coastguard Worker
473*5a6e8488SAndroid Build Coastguard Worker	if [ "$d" = "bc" ]; then
474*5a6e8488SAndroid Build Coastguard Worker		data=$(printf 's=scale;i=ibase;o=obase;t=seed@2;ibase=A;obase=A;s;i;o;t;')
475*5a6e8488SAndroid Build Coastguard Worker	else
476*5a6e8488SAndroid Build Coastguard Worker		data=$(printf 'J2@OIKAiAopRpRpRpR')
477*5a6e8488SAndroid Build Coastguard Worker	fi
478*5a6e8488SAndroid Build Coastguard Worker
479*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 -E17.25 > "$out2"
480*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable args" "$out1" "$out2"
481*5a6e8488SAndroid Build Coastguard Worker
482*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 --seed=17.25 > "$out2"
483*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable long args" "$out1" "$out2"
484*5a6e8488SAndroid Build Coastguard Worker
485*5a6e8488SAndroid Build Coastguard Workerelse
486*5a6e8488SAndroid Build Coastguard Worker
487*5a6e8488SAndroid Build Coastguard Worker	out=$(printf '14\n15\n16\n')
488*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$out" > "$out1"
489*5a6e8488SAndroid Build Coastguard Worker
490*5a6e8488SAndroid Build Coastguard Worker	if [ "$d" = "bc" ]; then
491*5a6e8488SAndroid Build Coastguard Worker		data=$(printf 's=scale;i=ibase;o=obase;ibase=A;obase=A;s;i;o;')
492*5a6e8488SAndroid Build Coastguard Worker	else
493*5a6e8488SAndroid Build Coastguard Worker		data=$(printf 'OIKAiAopRpRpR')
494*5a6e8488SAndroid Build Coastguard Worker	fi
495*5a6e8488SAndroid Build Coastguard Worker
496*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 > "$out2"
497*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable args" "$out1" "$out2"
498*5a6e8488SAndroid Build Coastguard Worker
499*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 > "$out2"
500*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable long args" "$out1" "$out2"
501*5a6e8488SAndroid Build Coastguard Worker
502*5a6e8488SAndroid Build Coastguard Workerfi
503*5a6e8488SAndroid Build Coastguard Worker
504*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
505*5a6e8488SAndroid Build Coastguard Worker
506*5a6e8488SAndroid Build Coastguard Worker	out=$(printf '100\n')
507*5a6e8488SAndroid Build Coastguard Worker	printf '%s\n' "$out" > "$out1"
508*5a6e8488SAndroid Build Coastguard Worker
509*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 -l > "$out2"
510*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable args with math lib" "$out1" "$out2"
511*5a6e8488SAndroid Build Coastguard Worker
512*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 --mathlib > "$out2"
513*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable long args with math lib" "$out1" "$out2"
514*5a6e8488SAndroid Build Coastguard Worker
515*5a6e8488SAndroid Build Coastguard Worker	export BC_ENV_ARGS="-l"
516*5a6e8488SAndroid Build Coastguard Worker
517*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 > "$out2"
518*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable args with math lib env arg" "$out1" "$out2"
519*5a6e8488SAndroid Build Coastguard Worker
520*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 > "$out2"
521*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable long args with math lib env arg" "$out1" "$out2"
522*5a6e8488SAndroid Build Coastguard Worker
523*5a6e8488SAndroid Build Coastguard Worker	export BC_ENV_ARGS="-S100"
524*5a6e8488SAndroid Build Coastguard Worker
525*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2"
526*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable args with math lib arg" "$out1" "$out2"
527*5a6e8488SAndroid Build Coastguard Worker
528*5a6e8488SAndroid Build Coastguard Worker	export BC_ENV_ARGS="--scale=100"
529*5a6e8488SAndroid Build Coastguard Worker
530*5a6e8488SAndroid Build Coastguard Worker	printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2"
531*5a6e8488SAndroid Build Coastguard Worker	checktest "$d" "$?" "builtin variable long args with math lib arg" "$out1" "$out2"
532*5a6e8488SAndroid Build Coastguard Worker
533*5a6e8488SAndroid Build Coastguard Workerfi
534*5a6e8488SAndroid Build Coastguard Worker
535*5a6e8488SAndroid Build Coastguard Workerprintf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=18923c.rlg > /dev/null 2> "$out2"
536*5a6e8488SAndroid Build Coastguard Workererr="$?"
537*5a6e8488SAndroid Build Coastguard Worker
538*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "invalid command-line arg for builtin variable" "$out2" "$d"
539*5a6e8488SAndroid Build Coastguard Worker
540*5a6e8488SAndroid Build Coastguard Workerif [ "$extra_math" -ne 0 ]; then
541*5a6e8488SAndroid Build Coastguard Worker
542*5a6e8488SAndroid Build Coastguard Worker	printf 'seed\n' 2> /dev/null | "$exe" "$@" --seed=18923c.rlg > /dev/null 2> "$out2"
543*5a6e8488SAndroid Build Coastguard Worker	err="$?"
544*5a6e8488SAndroid Build Coastguard Worker
545*5a6e8488SAndroid Build Coastguard Worker	checkerrtest "$d" "$err" "invalid command-line arg for seed" "$out2" "$d"
546*5a6e8488SAndroid Build Coastguard Worker
547*5a6e8488SAndroid Build Coastguard Workerfi
548*5a6e8488SAndroid Build Coastguard Worker
549*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
550*5a6e8488SAndroid Build Coastguard Worker
551*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s directory test...' "$d"
552*5a6e8488SAndroid Build Coastguard Worker
553*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "$testdir" > /dev/null 2> "$out2"
554*5a6e8488SAndroid Build Coastguard Workererr="$?"
555*5a6e8488SAndroid Build Coastguard Worker
556*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "directory" "$out2" "$d"
557*5a6e8488SAndroid Build Coastguard Worker
558*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
559*5a6e8488SAndroid Build Coastguard Worker
560*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s binary file test...' "$d"
561*5a6e8488SAndroid Build Coastguard Worker
562*5a6e8488SAndroid Build Coastguard Workerbin="/bin/sh"
563*5a6e8488SAndroid Build Coastguard Worker
564*5a6e8488SAndroid Build Coastguard Worker"$exe" "$@" "$bin" > /dev/null 2> "$out2"
565*5a6e8488SAndroid Build Coastguard Workererr="$?"
566*5a6e8488SAndroid Build Coastguard Worker
567*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "binary file" "$out2" "$d"
568*5a6e8488SAndroid Build Coastguard Worker
569*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
570*5a6e8488SAndroid Build Coastguard Worker
571*5a6e8488SAndroid Build Coastguard Workerprintf 'Running %s binary stdin test...' "$d"
572*5a6e8488SAndroid Build Coastguard Worker
573*5a6e8488SAndroid Build Coastguard Workercat "$bin" 2> /dev/null | "$exe" "$@" > /dev/null 2> "$out2"
574*5a6e8488SAndroid Build Coastguard Workererr="$?"
575*5a6e8488SAndroid Build Coastguard Worker
576*5a6e8488SAndroid Build Coastguard Workercheckerrtest "$d" "$err" "binary stdin" "$out2" "$d"
577*5a6e8488SAndroid Build Coastguard Worker
578*5a6e8488SAndroid Build Coastguard Workerprintf 'pass\n'
579*5a6e8488SAndroid Build Coastguard Worker
580*5a6e8488SAndroid Build Coastguard Workerif [ "$d" = "bc" ]; then
581*5a6e8488SAndroid Build Coastguard Worker
582*5a6e8488SAndroid Build Coastguard Worker	printf 'Running %s limits tests...' "$d"
583*5a6e8488SAndroid Build Coastguard Worker	printf 'limits\n' 2> /dev/null | "$exe" "$@" /dev/null > "$out2" 2>&1
584*5a6e8488SAndroid Build Coastguard Worker
585*5a6e8488SAndroid Build Coastguard Worker	checktest_retcode "$d" "$?" "limits"
586*5a6e8488SAndroid Build Coastguard Worker
587*5a6e8488SAndroid Build Coastguard Worker	if [ ! -s "$out2" ]; then
588*5a6e8488SAndroid Build Coastguard Worker		err_exit "$d did not produce output on the limits test" 1
589*5a6e8488SAndroid Build Coastguard Worker	fi
590*5a6e8488SAndroid Build Coastguard Worker
591*5a6e8488SAndroid Build Coastguard Worker	exec printf 'pass\n'
592*5a6e8488SAndroid Build Coastguard Worker
593*5a6e8488SAndroid Build Coastguard Workerfi
594