110328f8bSStefan Eßer#! /bin/sh 210328f8bSStefan Eßer# 310328f8bSStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 410328f8bSStefan Eßer# 5d101cdd6SStefan Eßer# Copyright (c) 2018-2023 Gavin D. Howard and contributors. 610328f8bSStefan Eßer# 710328f8bSStefan Eßer# Redistribution and use in source and binary forms, with or without 810328f8bSStefan Eßer# modification, are permitted provided that the following conditions are met: 910328f8bSStefan Eßer# 1010328f8bSStefan Eßer# * Redistributions of source code must retain the above copyright notice, this 1110328f8bSStefan Eßer# list of conditions and the following disclaimer. 1210328f8bSStefan Eßer# 1310328f8bSStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice, 1410328f8bSStefan Eßer# this list of conditions and the following disclaimer in the documentation 1510328f8bSStefan Eßer# and/or other materials provided with the distribution. 1610328f8bSStefan Eßer# 1710328f8bSStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1810328f8bSStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1910328f8bSStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2010328f8bSStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2110328f8bSStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2210328f8bSStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2310328f8bSStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2410328f8bSStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2510328f8bSStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2610328f8bSStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2710328f8bSStefan Eßer# POSSIBILITY OF SUCH DAMAGE. 2810328f8bSStefan Eßer# 2910328f8bSStefan Eßer 3010328f8bSStefan Eßerset -e 3110328f8bSStefan Eßer 3210328f8bSStefan Eßerscript="$0" 3310328f8bSStefan Eßertestdir=$(dirname "$script") 3410328f8bSStefan Eßer 3544d4804dSStefan Eßer. "$testdir/../scripts/functions.sh" 3610328f8bSStefan Eßer 37662087dfSStefan Eßeroutputdir=${BC_TEST_OUTPUT_DIR:-$testdir} 38662087dfSStefan Eßer 3944d4804dSStefan Eßer# Command-line processing. 4044d4804dSStefan Eßerif [ "$#" -ge 2 ]; then 4144d4804dSStefan Eßer 4210328f8bSStefan Eßer d="$1" 4310328f8bSStefan Eßer shift 4444d4804dSStefan Eßer 4544d4804dSStefan Eßer extra_math="$1" 4644d4804dSStefan Eßer shift 4744d4804dSStefan Eßer 4810328f8bSStefan Eßerelse 4944d4804dSStefan Eßer err_exit "usage: $script dir extra_math [exec args...]" 1 5010328f8bSStefan Eßerfi 5110328f8bSStefan Eßer 5210328f8bSStefan Eßerif [ "$#" -lt 1 ]; then 5310328f8bSStefan Eßer exe="$testdir/../bin/$d" 5410328f8bSStefan Eßerelse 5510328f8bSStefan Eßer exe="$1" 5610328f8bSStefan Eßer shift 5710328f8bSStefan Eßerfi 5810328f8bSStefan Eßer 5910328f8bSStefan Eßerif [ "$d" = "bc" ]; then 6010328f8bSStefan Eßer halt="quit" 6110328f8bSStefan Eßerelse 6210328f8bSStefan Eßer halt="q" 6310328f8bSStefan Eßerfi 6410328f8bSStefan Eßer 6578bc019dSStefan Eßermkdir -p "$outputdir" 6678bc019dSStefan Eßer 6744d4804dSStefan Eßer# For tests later. 6810328f8bSStefan Eßernum=100000000000000000000000000000000000000000000000000000000000000000000000000000 69d43fa8efSStefan Eßernum2="$num" 7010328f8bSStefan Eßernumres="$num" 7110328f8bSStefan Eßernum70="10000000000000000000000000000000000000000000000000000000000000000000\\ 7210328f8bSStefan Eßer0000000000" 7310328f8bSStefan Eßer 7444d4804dSStefan Eßer# Set stuff for the correct calculator. 7510328f8bSStefan Eßerif [ "$d" = "bc" ]; then 7610328f8bSStefan Eßer halt="halt" 7710328f8bSStefan Eßer opt="x" 7810328f8bSStefan Eßer lopt="extended-register" 7910328f8bSStefan Eßer line_var="BC_LINE_LENGTH" 80d43fa8efSStefan Eßer lltest="line_length()" 8110328f8bSStefan Eßerelse 8210328f8bSStefan Eßer halt="q" 8310328f8bSStefan Eßer opt="l" 8410328f8bSStefan Eßer lopt="mathlib" 8510328f8bSStefan Eßer line_var="DC_LINE_LENGTH" 8610328f8bSStefan Eßer num="$num pR" 87d43fa8efSStefan Eßer lltest="glpR" 8810328f8bSStefan Eßerfi 8910328f8bSStefan Eßer 9044d4804dSStefan Eßer# I use these, so unset them to make the tests work. 9144d4804dSStefan Eßerunset BC_ENV_ARGS 9244d4804dSStefan Eßerunset BC_LINE_LENGTH 9344d4804dSStefan Eßerunset DC_ENV_ARGS 9444d4804dSStefan Eßerunset DC_LINE_LENGTH 9544d4804dSStefan Eßer 9610328f8bSStefan Eßerset +e 9710328f8bSStefan Eßer 9810328f8bSStefan Eßerprintf '\nRunning %s quit test...' "$d" 9910328f8bSStefan Eßer 10010328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" > /dev/null 2>&1 10110328f8bSStefan Eßer 10210328f8bSStefan Eßerchecktest_retcode "$d" "$?" "quit" 10310328f8bSStefan Eßer 10444d4804dSStefan Eßer# bc has two halt or quit commands, so test the second as well. 10510328f8bSStefan Eßerif [ "$d" = bc ]; then 10610328f8bSStefan Eßer 10710328f8bSStefan Eßer printf '%s\n' "quit" | "$exe" "$@" > /dev/null 2>&1 10810328f8bSStefan Eßer 10910328f8bSStefan Eßer checktest_retcode "$d" "$?" quit 11010328f8bSStefan Eßer 11110328f8bSStefan Eßer two=$("$exe" "$@" -e 1+1 -e quit) 11210328f8bSStefan Eßer 11310328f8bSStefan Eßer checktest_retcode "$d" "$?" quit 11410328f8bSStefan Eßer 11510328f8bSStefan Eßer if [ "$two" != "2" ]; then 11610328f8bSStefan Eßer err_exit "$d failed test quit" 1 11710328f8bSStefan Eßer fi 11810328f8bSStefan Eßerfi 11910328f8bSStefan Eßer 12010328f8bSStefan Eßerprintf 'pass\n' 12110328f8bSStefan Eßer 12210328f8bSStefan Eßerbase=$(basename "$exe") 12310328f8bSStefan Eßer 12410328f8bSStefan Eßerprintf 'Running %s environment var tests...' "$d" 12510328f8bSStefan Eßer 12610328f8bSStefan Eßerif [ "$d" = "bc" ]; then 12710328f8bSStefan Eßer 12810328f8bSStefan Eßer export BC_ENV_ARGS=" '-l' '' -q" 12910328f8bSStefan Eßer 13010328f8bSStefan Eßer printf 's(.02893)\n' | "$exe" "$@" > /dev/null 13110328f8bSStefan Eßer 13210328f8bSStefan Eßer checktest_retcode "$d" "$?" "environment var" 13310328f8bSStefan Eßer 134d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -e 4 > /dev/null 13510328f8bSStefan Eßer 13610328f8bSStefan Eßer err="$?" 13710328f8bSStefan Eßer checktest_retcode "$d" "$?" "environment var" 1387e5c51e5SStefan Eßer 1397e5c51e5SStefan Eßer printf 'pass\n' 1407e5c51e5SStefan Eßer 14144d4804dSStefan Eßer printf 'Running keyword redefinition test...' 14244d4804dSStefan Eßer 14344d4804dSStefan Eßer unset BC_ENV_ARGS 14444d4804dSStefan Eßer 145662087dfSStefan Eßer redefine_res="$outputdir/bc_outputs/redefine.txt" 146662087dfSStefan Eßer redefine_out="$outputdir/bc_outputs/redefine_results.txt" 14744d4804dSStefan Eßer 14878bc019dSStefan Eßer outdir=$(dirname "$redefine_out") 14944d4804dSStefan Eßer 15044d4804dSStefan Eßer if [ ! -d "$outdir" ]; then 15144d4804dSStefan Eßer mkdir -p "$outdir" 15244d4804dSStefan Eßer fi 15344d4804dSStefan Eßer 15444d4804dSStefan Eßer printf '5\n0\n' > "$redefine_res" 15544d4804dSStefan Eßer 156d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" --redefine=print -e 'define print(x) { x }' -e 'print(5)' > "$redefine_out" 15723210c9fSStefan Eßer err="$?" 15844d4804dSStefan Eßer 15944d4804dSStefan Eßer checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out" 16044d4804dSStefan Eßer 161d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -r "abs" -r "else" -e 'abs = 5;else = 0' -e 'abs;else' > "$redefine_out" 16223210c9fSStefan Eßer err="$?" 16344d4804dSStefan Eßer 16444d4804dSStefan Eßer checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out" 16544d4804dSStefan Eßer 16644d4804dSStefan Eßer if [ "$extra_math" -ne 0 ]; then 16744d4804dSStefan Eßer 168d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -lr abs -e "perm(5, 1)" -e "0" > "$redefine_out" 16923210c9fSStefan Eßer err="$?" 17044d4804dSStefan Eßer 17144d4804dSStefan Eßer checktest "$d" "$err" "keyword not redefined in builtin library" "$redefine_res" "$redefine_out" 17244d4804dSStefan Eßer 17344d4804dSStefan Eßer fi 17444d4804dSStefan Eßer 17544d4804dSStefan Eßer "$exe" "$@" -r "break" -e 'define break(x) { x }' 2> "$redefine_out" 17644d4804dSStefan Eßer err="$?" 17744d4804dSStefan Eßer 17844d4804dSStefan Eßer checkerrtest "$d" "$err" "keyword redefinition error" "$redefine_out" "$d" 17944d4804dSStefan Eßer 18044d4804dSStefan Eßer "$exe" "$@" -e 'define read(x) { x }' 2> "$redefine_out" 18144d4804dSStefan Eßer err="$?" 18244d4804dSStefan Eßer 18344d4804dSStefan Eßer checkerrtest "$d" "$err" "Keyword redefinition error without BC_REDEFINE_KEYWORDS" "$redefine_out" "$d" 18444d4804dSStefan Eßer 18544d4804dSStefan Eßer printf 'pass\n' 18623210c9fSStefan Eßer printf 'Running multiline comment expression file test...' 18723210c9fSStefan Eßer 18823210c9fSStefan Eßer multiline_expr_res="" 18923210c9fSStefan Eßer multiline_expr_out="$outputdir/bc_outputs/multiline_expr_results.txt" 19023210c9fSStefan Eßer 19123210c9fSStefan Eßer # tests/bc/misc1.txt happens to have a multiline comment in it. 192d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/misc1.txt" > "$multiline_expr_out" 19323210c9fSStefan Eßer err="$?" 19423210c9fSStefan Eßer 19523210c9fSStefan Eßer checktest "$d" "$err" "multiline comment in expression file" "$testdir/bc/misc1_results.txt" \ 19623210c9fSStefan Eßer "$multiline_expr_out" 19723210c9fSStefan Eßer 19823210c9fSStefan Eßer printf 'pass\n' 19923210c9fSStefan Eßer printf 'Running multiline comment expression file error test...' 20023210c9fSStefan Eßer 201d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/05.txt" 2> "$multiline_expr_out" 20223210c9fSStefan Eßer err="$?" 20323210c9fSStefan Eßer 20423210c9fSStefan Eßer checkerrtest "$d" "$err" "multiline comment in expression file error" \ 20523210c9fSStefan Eßer "$multiline_expr_out" "$d" 20623210c9fSStefan Eßer 20723210c9fSStefan Eßer printf 'pass\n' 20823210c9fSStefan Eßer printf 'Running multiline string expression file test...' 20923210c9fSStefan Eßer 21023210c9fSStefan Eßer # tests/bc/strings.txt happens to have a multiline string in it. 211d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/strings.txt" > "$multiline_expr_out" 21223210c9fSStefan Eßer err="$?" 21323210c9fSStefan Eßer 21423210c9fSStefan Eßer checktest "$d" "$err" "multiline string in expression file" "$testdir/bc/strings_results.txt" \ 21523210c9fSStefan Eßer "$multiline_expr_out" 21623210c9fSStefan Eßer 21723210c9fSStefan Eßer printf 'pass\n' 21823210c9fSStefan Eßer printf 'Running multiline string expression file error test...' 21923210c9fSStefan Eßer 220d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/16.txt" 2> "$multiline_expr_out" 22123210c9fSStefan Eßer err="$?" 22223210c9fSStefan Eßer 22323210c9fSStefan Eßer checkerrtest "$d" "$err" "multiline string in expression file with backslash error" \ 22423210c9fSStefan Eßer "$multiline_expr_out" "$d" 22523210c9fSStefan Eßer 226d101cdd6SStefan Eßer printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/04.txt" 2> "$multiline_expr_out" 22723210c9fSStefan Eßer err="$?" 22823210c9fSStefan Eßer 22923210c9fSStefan Eßer checkerrtest "$d" "$err" "multiline string in expression file error" \ 23023210c9fSStefan Eßer "$multiline_expr_out" "$d" 23123210c9fSStefan Eßer 23223210c9fSStefan Eßer printf 'pass\n' 23344d4804dSStefan Eßer 23410328f8bSStefan Eßerelse 23510328f8bSStefan Eßer 23610328f8bSStefan Eßer export DC_ENV_ARGS="'-x'" 23710328f8bSStefan Eßer export DC_EXPR_EXIT="1" 23810328f8bSStefan Eßer 23910328f8bSStefan Eßer printf '4s stuff\n' | "$exe" "$@" > /dev/null 24010328f8bSStefan Eßer 24110328f8bSStefan Eßer checktest_retcode "$d" "$?" "environment var" 24210328f8bSStefan Eßer 24344d4804dSStefan Eßer "$exe" "$@" -e 4pR > /dev/null 24410328f8bSStefan Eßer 24510328f8bSStefan Eßer checktest_retcode "$d" "$?" "environment var" 24610328f8bSStefan Eßer 24710328f8bSStefan Eßer printf 'pass\n' 24810328f8bSStefan Eßer 2497e5c51e5SStefan Eßer set +e 2507e5c51e5SStefan Eßer 25144d4804dSStefan Eßer # dc has an extra test for a case that someone found running this easter.dc 25244d4804dSStefan Eßer # script. It went into an infinite loop, so we want to check that we did not 25344d4804dSStefan Eßer # regress. 2548c39e252SStefan Eßer printf 'three\n' | cut -c1-3 > /dev/null 2557e5c51e5SStefan Eßer err=$? 2567e5c51e5SStefan Eßer 2577e5c51e5SStefan Eßer if [ "$err" -eq 0 ]; then 2587e5c51e5SStefan Eßer 2597e5c51e5SStefan Eßer printf 'Running dc Easter script...' 2607e5c51e5SStefan Eßer 261662087dfSStefan Eßer easter_res="$outputdir/dc_outputs/easter.txt" 262662087dfSStefan Eßer easter_out="$outputdir/dc_outputs/easter_results.txt" 2637e5c51e5SStefan Eßer 2647e5c51e5SStefan Eßer outdir=$(dirname "$easter_out") 2657e5c51e5SStefan Eßer 2667e5c51e5SStefan Eßer if [ ! -d "$outdir" ]; then 2677e5c51e5SStefan Eßer mkdir -p "$outdir" 2687e5c51e5SStefan Eßer fi 2697e5c51e5SStefan Eßer 2707e5c51e5SStefan Eßer printf '4 April 2021\n' > "$easter_res" 2717e5c51e5SStefan Eßer 27244d4804dSStefan Eßer "$testdir/dc/scripts/easter.sh" "$exe" 2021 "$@" | cut -c1-12 > "$easter_out" 2737e5c51e5SStefan Eßer err="$?" 2747e5c51e5SStefan Eßer 2757e5c51e5SStefan Eßer checktest "$d" "$err" "Easter script" "$easter_res" "$easter_out" 2767e5c51e5SStefan Eßer 2777e5c51e5SStefan Eßer printf 'pass\n' 2787e5c51e5SStefan Eßer fi 2797e5c51e5SStefan Eßer 2807e5c51e5SStefan Eßerfi 2817e5c51e5SStefan Eßer 282662087dfSStefan Eßerout1="$outputdir/${d}_outputs/${d}_other.txt" 283662087dfSStefan Eßerout2="$outputdir/${d}_outputs/${d}_other_test.txt" 28410328f8bSStefan Eßer 28510328f8bSStefan Eßerprintf 'Running %s line length tests...' "$d" 28610328f8bSStefan Eßer 28710328f8bSStefan Eßerprintf '%s\n' "$numres" > "$out1" 28810328f8bSStefan Eßer 28910328f8bSStefan Eßerexport "$line_var"=80 29010328f8bSStefan Eßerprintf '%s\n' "$num" | "$exe" "$@" > "$out2" 29110328f8bSStefan Eßer 292d43fa8efSStefan Eßerchecktest "$d" "$?" "line length" "$out1" "$out2" 29310328f8bSStefan Eßer 29410328f8bSStefan Eßerprintf '%s\n' "$num70" > "$out1" 29510328f8bSStefan Eßer 29610328f8bSStefan Eßerexport "$line_var"=2147483647 29710328f8bSStefan Eßerprintf '%s\n' "$num" | "$exe" "$@" > "$out2" 29810328f8bSStefan Eßer 299d43fa8efSStefan Eßerchecktest "$d" "$?" "line length 2" "$out1" "$out2" 300d43fa8efSStefan Eßer 301d43fa8efSStefan Eßerprintf '%s\n' "$num2" > "$out1" 302d43fa8efSStefan Eßer 303d43fa8efSStefan Eßerexport "$line_var"=62 304d43fa8efSStefan Eßerprintf '%s\n' "$num" | "$exe" "$@" -L > "$out2" 305d43fa8efSStefan Eßer 306d43fa8efSStefan Eßerchecktest "$d" "$?" "line length 3" "$out1" "$out2" 307d43fa8efSStefan Eßer 308d43fa8efSStefan Eßerprintf '0\n' > "$out1" 309d43fa8efSStefan Eßerprintf '%s\n' "$lltest" | "$exe" "$@" -L > "$out2" 310d43fa8efSStefan Eßer 311d43fa8efSStefan Eßerchecktest "$d" "$?" "line length 3" "$out1" "$out2" 31210328f8bSStefan Eßer 31310328f8bSStefan Eßerprintf 'pass\n' 31410328f8bSStefan Eßer 315d43fa8efSStefan Eßerprintf '%s\n' "$numres" > "$out1" 316d43fa8efSStefan Eßerexport "$line_var"=2147483647 317d43fa8efSStefan Eßer 31810328f8bSStefan Eßerprintf 'Running %s arg tests...' "$d" 31910328f8bSStefan Eßer 32010328f8bSStefan Eßerf="$testdir/$d/add.txt" 32110328f8bSStefan Eßerexprs=$(cat "$f") 32210328f8bSStefan Eßerresults=$(cat "$testdir/$d/add_results.txt") 32310328f8bSStefan Eßer 32410328f8bSStefan Eßerprintf '%s\n%s\n%s\n%s\n' "$results" "$results" "$results" "$results" > "$out1" 32510328f8bSStefan Eßer 32610328f8bSStefan Eßer"$exe" "$@" -e "$exprs" -f "$f" --expression "$exprs" --file "$f" -e "$halt" > "$out2" 32710328f8bSStefan Eßer 32810328f8bSStefan Eßerchecktest "$d" "$?" "arg" "$out1" "$out2" 32910328f8bSStefan Eßer 33010328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2" 33110328f8bSStefan Eßer 33210328f8bSStefan Eßerchecktest "$d" "$?" "arg" "$out1" "$out2" 33310328f8bSStefan Eßer 33410328f8bSStefan Eßerif [ "$d" = "bc" ]; then 33510328f8bSStefan Eßer printf '%s\n' "$halt" | "$exe" "$@" -i > /dev/null 2>&1 33610328f8bSStefan Eßerfi 33710328f8bSStefan Eßer 33810328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -h > /dev/null 33910328f8bSStefan Eßerchecktest_retcode "$d" "$?" "arg" 34010328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -P > /dev/null 34110328f8bSStefan Eßerchecktest_retcode "$d" "$?" "arg" 34244d4804dSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -R > /dev/null 34344d4804dSStefan Eßerchecktest_retcode "$d" "$?" "arg" 34410328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -v > /dev/null 34510328f8bSStefan Eßerchecktest_retcode "$d" "$?" "arg" 34610328f8bSStefan Eßerprintf '%s\n' "$halt" | "$exe" "$@" -V > /dev/null 34710328f8bSStefan Eßerchecktest_retcode "$d" "$?" "arg" 34810328f8bSStefan Eßer 349d43fa8efSStefan Eßerout=$(printf '0.1\n-0.1\n1.1\n-1.1\n0.1\n-0.1\n') 350d43fa8efSStefan Eßerprintf '%s\n' "$out" > "$out1" 351d43fa8efSStefan Eßer 352d43fa8efSStefan Eßerif [ "$d" = "bc" ]; then 353d43fa8efSStefan Eßer data=$(printf '0.1\n-0.1\n1.1\n-1.1\n.1\n-.1\n') 354d43fa8efSStefan Eßerelse 355d43fa8efSStefan Eßer data=$(printf '0.1pR\n_0.1pR\n1.1pR\n_1.1pR\n.1pR\n_.1pR\n') 356d43fa8efSStefan Eßerfi 357d43fa8efSStefan Eßer 358d43fa8efSStefan Eßerprintf '%s\n' "$data" | "$exe" "$@" -z > "$out2" 359d43fa8efSStefan Eßerchecktest "$d" "$?" "leading zero" "$out1" "$out2" 360d43fa8efSStefan Eßer 361d43fa8efSStefan Eßerif [ "$d" = "bc" ] && [ "$extra_math" -ne 0 ]; then 362d43fa8efSStefan Eßer 363d43fa8efSStefan Eßer printf '%s\n' "$halt" | "$exe" "$@" -lz "$testdir/bc/leadingzero.txt" > "$out2" 364d43fa8efSStefan Eßer 365d43fa8efSStefan Eßer checktest "$d" "$?" "leading zero script" "$testdir/bc/leadingzero_results.txt" "$out2" 366d43fa8efSStefan Eßer 367d43fa8efSStefan Eßerfi 368d43fa8efSStefan Eßer 36910328f8bSStefan Eßer"$exe" "$@" -f "saotehasotnehasthistohntnsahxstnhalcrgxgrlpyasxtsaosysxsatnhoy.txt" > /dev/null 2> "$out2" 37010328f8bSStefan Eßererr="$?" 37110328f8bSStefan Eßer 37210328f8bSStefan Eßercheckerrtest "$d" "$err" "invalid file argument" "$out2" "$d" 37310328f8bSStefan Eßer 37410328f8bSStefan Eßer"$exe" "$@" "-$opt" -e "$exprs" > /dev/null 2> "$out2" 37510328f8bSStefan Eßererr="$?" 37610328f8bSStefan Eßer 37710328f8bSStefan Eßercheckerrtest "$d" "$err" "invalid option argument" "$out2" "$d" 37810328f8bSStefan Eßer 37910328f8bSStefan Eßer"$exe" "$@" "--$lopt" -e "$exprs" > /dev/null 2> "$out2" 38010328f8bSStefan Eßererr="$?" 38110328f8bSStefan Eßer 38210328f8bSStefan Eßercheckerrtest "$d" "$err" "invalid long option argument" "$out2" "$d" 38310328f8bSStefan Eßer 38410328f8bSStefan Eßer"$exe" "$@" "-u" -e "$exprs" > /dev/null 2> "$out2" 38510328f8bSStefan Eßererr="$?" 38610328f8bSStefan Eßer 38710328f8bSStefan Eßercheckerrtest "$d" "$err" "unrecognized option argument" "$out2" "$d" 38810328f8bSStefan Eßer 38910328f8bSStefan Eßer"$exe" "$@" "--uniform" -e "$exprs" > /dev/null 2> "$out2" 39010328f8bSStefan Eßererr="$?" 39110328f8bSStefan Eßer 39210328f8bSStefan Eßercheckerrtest "$d" "$err" "unrecognized long option argument" "$out2" "$d" 39310328f8bSStefan Eßer 39410328f8bSStefan Eßer"$exe" "$@" -f > /dev/null 2> "$out2" 39510328f8bSStefan Eßererr="$?" 39610328f8bSStefan Eßer 39710328f8bSStefan Eßercheckerrtest "$d" "$err" "missing required argument to short option" "$out2" "$d" 39810328f8bSStefan Eßer 39910328f8bSStefan Eßer"$exe" "$@" --file > /dev/null 2> "$out2" 40010328f8bSStefan Eßererr="$?" 40110328f8bSStefan Eßer 40210328f8bSStefan Eßercheckerrtest "$d" "$err" "missing required argument to long option" "$out2" "$d" 40310328f8bSStefan Eßer 40410328f8bSStefan Eßer"$exe" "$@" --version=5 > /dev/null 2> "$out2" 40510328f8bSStefan Eßererr="$?" 40610328f8bSStefan Eßer 40710328f8bSStefan Eßercheckerrtest "$d" "$err" "given argument to long option with no argument" "$out2" "$d" 40810328f8bSStefan Eßer 40944d4804dSStefan Eßer"$exe" "$@" -: > /dev/null 2> "$out2" 41044d4804dSStefan Eßererr="$?" 41144d4804dSStefan Eßer 41244d4804dSStefan Eßercheckerrtest "$d" "$err" "colon short option" "$out2" "$d" 41344d4804dSStefan Eßer 41444d4804dSStefan Eßer"$exe" "$@" --: > /dev/null 2> "$out2" 41544d4804dSStefan Eßererr="$?" 41644d4804dSStefan Eßer 41744d4804dSStefan Eßercheckerrtest "$d" "$err" "colon long option" "$out2" "$d" 41844d4804dSStefan Eßer 41910328f8bSStefan Eßerprintf 'pass\n' 42010328f8bSStefan Eßer 42178bc019dSStefan Eßerprintf 'Running %s builtin variable arg tests...' "$d" 42278bc019dSStefan Eßer 42378bc019dSStefan Eßerif [ "$extra_math" -ne 0 ]; then 42478bc019dSStefan Eßer 42578bc019dSStefan Eßer out=$(printf '14\n15\n16\n17.25\n') 42678bc019dSStefan Eßer printf '%s\n' "$out" > "$out1" 42778bc019dSStefan Eßer 42878bc019dSStefan Eßer if [ "$d" = "bc" ]; then 42978bc019dSStefan Eßer data=$(printf 's=scale;i=ibase;o=obase;t=seed@2;ibase=A;obase=A;s;i;o;t;') 43078bc019dSStefan Eßer else 43178bc019dSStefan Eßer data=$(printf 'J2@OIKAiAopRpRpRpR') 43278bc019dSStefan Eßer fi 43378bc019dSStefan Eßer 43478bc019dSStefan Eßer printf '%s\n' "$data" | "$exe" "$@" -S14 -I15 -O16 -E17.25 > "$out2" 43578bc019dSStefan Eßer checktest "$d" "$?" "builtin variable args" "$out1" "$out2" 43678bc019dSStefan Eßer 43778bc019dSStefan Eßer printf '%s\n' "$data" | "$exe" "$@" --scale=14 --ibase=15 --obase=16 --seed=17.25 > "$out2" 43878bc019dSStefan Eßer checktest "$d" "$?" "builtin variable long args" "$out1" "$out2" 43978bc019dSStefan Eßer 44078bc019dSStefan Eßerelse 44178bc019dSStefan Eßer 44278bc019dSStefan Eßer out=$(printf '14\n15\n16\n') 44378bc019dSStefan Eßer printf '%s\n' "$out" > "$out1" 44478bc019dSStefan Eßer 44578bc019dSStefan Eßer if [ "$d" = "bc" ]; then 44678bc019dSStefan Eßer data=$(printf 's=scale;i=ibase;o=obase;ibase=A;obase=A;s;i;o;') 44778bc019dSStefan Eßer else 44878bc019dSStefan Eßer data=$(printf 'OIKAiAopRpRpR') 44978bc019dSStefan Eßer fi 45078bc019dSStefan Eßer 45178bc019dSStefan Eßer printf '%s\n' "$data" | "$exe" "$@" -S14 -I15 -O16 > "$out2" 45278bc019dSStefan Eßer checktest "$d" "$?" "builtin variable args" "$out1" "$out2" 45378bc019dSStefan Eßer 45478bc019dSStefan Eßer printf '%s\n' "$data" | "$exe" "$@" --scale=14 --ibase=15 --obase=16 > "$out2" 45578bc019dSStefan Eßer checktest "$d" "$?" "builtin variable long args" "$out1" "$out2" 45678bc019dSStefan Eßer 45778bc019dSStefan Eßerfi 45878bc019dSStefan Eßer 459d101cdd6SStefan Eßerif [ "$d" = "bc" ]; then 460d101cdd6SStefan Eßer 461d101cdd6SStefan Eßer out=$(printf '100\n') 462d101cdd6SStefan Eßer printf '%s\n' "$out" > "$out1" 463d101cdd6SStefan Eßer 464d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" -S100 -l > "$out2" 465d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable args with math lib" "$out1" "$out2" 466d101cdd6SStefan Eßer 467d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" --scale=100 --mathlib > "$out2" 468d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable long args with math lib" "$out1" "$out2" 469d101cdd6SStefan Eßer 470d101cdd6SStefan Eßer export BC_ENV_ARGS="-l" 471d101cdd6SStefan Eßer 472d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" -S100 > "$out2" 473d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable args with math lib env arg" "$out1" "$out2" 474d101cdd6SStefan Eßer 475d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" --scale=100 > "$out2" 476d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable long args with math lib env arg" "$out1" "$out2" 477d101cdd6SStefan Eßer 478d101cdd6SStefan Eßer export BC_ENV_ARGS="-S100" 479d101cdd6SStefan Eßer 480d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" -l > "$out2" 481d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable args with math lib arg" "$out1" "$out2" 482d101cdd6SStefan Eßer 483d101cdd6SStefan Eßer export BC_ENV_ARGS="--scale=100" 484d101cdd6SStefan Eßer 485d101cdd6SStefan Eßer printf 'scale\n' | "$exe" "$@" -l > "$out2" 486d101cdd6SStefan Eßer checktest "$d" "$?" "builtin variable long args with math lib arg" "$out1" "$out2" 487d101cdd6SStefan Eßer 488d101cdd6SStefan Eßerfi 489d101cdd6SStefan Eßer 49078bc019dSStefan Eßerprintf 'scale\n' | "$exe" "$@" --scale=18923c.rlg > /dev/null 2> "$out2" 49178bc019dSStefan Eßererr="$?" 49278bc019dSStefan Eßer 49378bc019dSStefan Eßercheckerrtest "$d" "$err" "invalid command-line arg for builtin variable" "$out2" "$d" 49478bc019dSStefan Eßer 49578bc019dSStefan Eßerif [ "$extra_math" -ne 0 ]; then 49678bc019dSStefan Eßer 49778bc019dSStefan Eßer printf 'seed\n' | "$exe" "$@" --seed=18923c.rlg > /dev/null 2> "$out2" 49878bc019dSStefan Eßer err="$?" 49978bc019dSStefan Eßer 50078bc019dSStefan Eßer checkerrtest "$d" "$err" "invalid command-line arg for seed" "$out2" "$d" 50178bc019dSStefan Eßer 50278bc019dSStefan Eßerfi 50378bc019dSStefan Eßer 50478bc019dSStefan Eßerprintf 'pass\n' 50578bc019dSStefan Eßer 50610328f8bSStefan Eßerprintf 'Running %s directory test...' "$d" 50710328f8bSStefan Eßer 50810328f8bSStefan Eßer"$exe" "$@" "$testdir" > /dev/null 2> "$out2" 50910328f8bSStefan Eßererr="$?" 51010328f8bSStefan Eßer 51110328f8bSStefan Eßercheckerrtest "$d" "$err" "directory" "$out2" "$d" 51210328f8bSStefan Eßer 51310328f8bSStefan Eßerprintf 'pass\n' 51410328f8bSStefan Eßer 51510328f8bSStefan Eßerprintf 'Running %s binary file test...' "$d" 51610328f8bSStefan Eßer 51710328f8bSStefan Eßerbin="/bin/sh" 51810328f8bSStefan Eßer 51910328f8bSStefan Eßer"$exe" "$@" "$bin" > /dev/null 2> "$out2" 52010328f8bSStefan Eßererr="$?" 52110328f8bSStefan Eßer 52210328f8bSStefan Eßercheckerrtest "$d" "$err" "binary file" "$out2" "$d" 52310328f8bSStefan Eßer 52410328f8bSStefan Eßerprintf 'pass\n' 52510328f8bSStefan Eßer 52610328f8bSStefan Eßerprintf 'Running %s binary stdin test...' "$d" 52710328f8bSStefan Eßer 52810328f8bSStefan Eßercat "$bin" | "$exe" "$@" > /dev/null 2> "$out2" 52910328f8bSStefan Eßererr="$?" 53010328f8bSStefan Eßer 53110328f8bSStefan Eßercheckerrtest "$d" "$err" "binary stdin" "$out2" "$d" 53210328f8bSStefan Eßer 53310328f8bSStefan Eßerprintf 'pass\n' 53410328f8bSStefan Eßer 53510328f8bSStefan Eßerif [ "$d" = "bc" ]; then 53610328f8bSStefan Eßer 53710328f8bSStefan Eßer printf 'Running %s limits tests...' "$d" 538d101cdd6SStefan Eßer printf 'limits\n' | "$exe" "$@" /dev/null > "$out2" 2>&1 53910328f8bSStefan Eßer 54010328f8bSStefan Eßer checktest_retcode "$d" "$?" "limits" 54110328f8bSStefan Eßer 54210328f8bSStefan Eßer if [ ! -s "$out2" ]; then 54310328f8bSStefan Eßer err_exit "$d did not produce output on the limits test" 1 54410328f8bSStefan Eßer fi 54510328f8bSStefan Eßer 54610328f8bSStefan Eßer exec printf 'pass\n' 54710328f8bSStefan Eßer 54810328f8bSStefan Eßerfi 549