xref: /freebsd-src/contrib/bc/tests/stdin.sh (revision a970610a3af63b3f4df5b69d91c6b4093a00ed8f)
13aa99676SStefan Eßer#! /bin/sh
23aa99676SStefan Eßer#
33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause
43aa99676SStefan Eßer#
5*a970610aSStefan Eßer# Copyright (c) 2018-2024 Gavin D. Howard and contributors.
63aa99676SStefan Eßer#
73aa99676SStefan Eßer# Redistribution and use in source and binary forms, with or without
83aa99676SStefan Eßer# modification, are permitted provided that the following conditions are met:
93aa99676SStefan Eßer#
103aa99676SStefan Eßer# * Redistributions of source code must retain the above copyright notice, this
113aa99676SStefan Eßer#   list of conditions and the following disclaimer.
123aa99676SStefan Eßer#
133aa99676SStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice,
143aa99676SStefan Eßer#   this list of conditions and the following disclaimer in the documentation
153aa99676SStefan Eßer#   and/or other materials provided with the distribution.
163aa99676SStefan Eßer#
173aa99676SStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
183aa99676SStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
193aa99676SStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
203aa99676SStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
213aa99676SStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
223aa99676SStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
233aa99676SStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
243aa99676SStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
253aa99676SStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
263aa99676SStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
273aa99676SStefan Eßer# POSSIBILITY OF SUCH DAMAGE.
283aa99676SStefan Eßer#
293aa99676SStefan Eßer
303aa99676SStefan Eßerset -e
313aa99676SStefan Eßer
323aa99676SStefan Eßerscript="$0"
333aa99676SStefan Eßer
343aa99676SStefan Eßertestdir=$(dirname "$script")
353aa99676SStefan Eßer
3644d4804dSStefan Eßer. "$testdir/../scripts/functions.sh"
3710328f8bSStefan Eßer
38662087dfSStefan Eßeroutputdir=${BC_TEST_OUTPUT_DIR:-$testdir}
39662087dfSStefan Eßer
404fca8e0fSStefan Eßer# Just print the usage and exit with an error. This can receive a message to
414fca8e0fSStefan Eßer# print.
424fca8e0fSStefan Eßer# @param 1  A message to print.
434fca8e0fSStefan Eßerusage() {
444fca8e0fSStefan Eßer	if [ $# -eq 1 ]; then
454fca8e0fSStefan Eßer		printf '%s\n\n' "$1"
464fca8e0fSStefan Eßer	fi
473aa99676SStefan Eßer	printf 'usage: %s dir [exe [args...]]\n' "$0"
483aa99676SStefan Eßer	printf 'valid dirs are:\n'
493aa99676SStefan Eßer	printf '\n'
503aa99676SStefan Eßer	cat "$testdir/all.txt"
513aa99676SStefan Eßer	printf '\n'
523aa99676SStefan Eßer	exit 1
534fca8e0fSStefan Eßer}
544fca8e0fSStefan Eßer
554fca8e0fSStefan Eßer# Command-line processing.
564fca8e0fSStefan Eßerif [ "$#" -lt 1 ]; then
574fca8e0fSStefan Eßer	usage "Not enough arguments"
583aa99676SStefan Eßerfi
593aa99676SStefan Eßer
603aa99676SStefan Eßerd="$1"
613aa99676SStefan Eßershift
624fca8e0fSStefan Eßercheck_d_arg "$d"
633aa99676SStefan Eßer
643aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
653aa99676SStefan Eßer	exe="$1"
663aa99676SStefan Eßer	shift
674fca8e0fSStefan Eßer	check_exec_arg "$exe"
683aa99676SStefan Eßerelse
693aa99676SStefan Eßer	exe="$testdir/../bin/$d"
704fca8e0fSStefan Eßer	check_exec_arg "$exe"
713aa99676SStefan Eßerfi
723aa99676SStefan Eßer
73662087dfSStefan Eßerout="$outputdir/${d}_outputs/stdin_results.txt"
7410328f8bSStefan Eßeroutdir=$(dirname "$out")
7510328f8bSStefan Eßer
7644d4804dSStefan Eßer# Make sure the directory exists.
7710328f8bSStefan Eßerif [ ! -d "$outdir" ]; then
7810328f8bSStefan Eßer	mkdir -p "$outdir"
7910328f8bSStefan Eßerfi
803aa99676SStefan Eßer
8144d4804dSStefan Eßer# Set stuff for the correct calculator.
823aa99676SStefan Eßerif [ "$d" = "bc" ]; then
8344d4804dSStefan Eßer	options="-lq"
843aa99676SStefan Eßerelse
853aa99676SStefan Eßer	options="-x"
863aa99676SStefan Eßerfi
873aa99676SStefan Eßer
883aa99676SStefan Eßerrm -f "$out"
893aa99676SStefan 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
983aa99676SStefan Eßerprintf 'Running %s stdin tests...' "$d"
993aa99676SStefan Eßer
10044d4804dSStefan Eßer# Run the file through stdin.
1013aa99676SStefan Eßercat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
10210328f8bSStefan Eßerchecktest "$d" "$?" "stdin" "$testdir/$d/stdin_results.txt" "$out"
1033aa99676SStefan Eßer
10444d4804dSStefan Eßer# bc has some more tests; run those.
105cf7becd2SStefan Eßerif [ "$d" = "bc" ]; then
106cf7becd2SStefan Eßer
107cf7becd2SStefan Eßer	cat "$testdir/$d/stdin1.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
108a30efc5cSStefan Eßer	checktest "$d" "$?" "stdin1" "$testdir/$d/stdin1_results.txt" "$out"
109cf7becd2SStefan Eßer
110cf7becd2SStefan Eßer	cat "$testdir/$d/stdin2.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
111a30efc5cSStefan Eßer	checktest "$d" "$?" "stdin2" "$testdir/$d/stdin2_results.txt" "$out"
112cf7becd2SStefan Eßerfi
113cf7becd2SStefan Eßer
11410328f8bSStefan Eßerrm -f "$out"
1153aa99676SStefan Eßer
11610328f8bSStefan Eßerexec printf 'pass\n'
117