xref: /freebsd/contrib/bc/tests/read.sh (revision 10328f8b)
13aa99676SStefan Eßer#! /bin/sh
23aa99676SStefan Eßer#
33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause
43aa99676SStefan Eßer#
510328f8bSStefan Eßer# Copyright (c) 2018-2021 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ßertestdir=$(dirname "$script")
343aa99676SStefan Eßer
353aa99676SStefan Eßer. "$testdir/../functions.sh"
363aa99676SStefan Eßer
373aa99676SStefan Eßerif [ "$#" -lt 1 ]; then
383aa99676SStefan Eßer	printf 'usage: %s dir [exe [args...]]\n' "$0"
393aa99676SStefan Eßer	printf 'valid dirs are:\n'
403aa99676SStefan Eßer	printf '\n'
413aa99676SStefan Eßer	cat "$testdir/all.txt"
423aa99676SStefan Eßer	printf '\n'
433aa99676SStefan Eßer	exit 1
443aa99676SStefan Eßerfi
453aa99676SStefan Eßer
463aa99676SStefan Eßerd="$1"
473aa99676SStefan Eßershift
483aa99676SStefan Eßer
493aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
503aa99676SStefan Eßer	exe="$1"
513aa99676SStefan Eßer	shift
523aa99676SStefan Eßerelse
533aa99676SStefan Eßer	exe="$testdir/../bin/$d"
543aa99676SStefan Eßerfi
553aa99676SStefan Eßer
563aa99676SStefan Eßername="$testdir/$d/read.txt"
573aa99676SStefan Eßerresults="$testdir/$d/read_results.txt"
583aa99676SStefan Eßererrors="$testdir/$d/read_errors.txt"
593aa99676SStefan Eßer
6010328f8bSStefan Eßerout="$testdir/${d}_outputs/read_results.txt"
6110328f8bSStefan Eßeroutdir=$(dirname "$out")
6210328f8bSStefan Eßer
6310328f8bSStefan Eßerif [ ! -d "$outdir" ]; then
6410328f8bSStefan Eßer	mkdir -p "$outdir"
6510328f8bSStefan Eßerfi
663aa99676SStefan Eßer
673aa99676SStefan Eßerexebase=$(basename "$exe")
683aa99676SStefan Eßer
693aa99676SStefan Eßerif [ "$d" = "bc" ]; then
703aa99676SStefan Eßer	options="-lq"
713aa99676SStefan Eßer	halt="halt"
723aa99676SStefan Eßerelse
733aa99676SStefan Eßer	options="-x"
743aa99676SStefan Eßer	halt="q"
753aa99676SStefan Eßerfi
763aa99676SStefan Eßer
773aa99676SStefan Eßerif [ "$d" = "bc" ]; then
783aa99676SStefan Eßer	read_call="read()"
793aa99676SStefan Eßer	read_expr="${read_call}\n5+5;"
803aa99676SStefan Eßerelse
813aa99676SStefan Eßer	read_call="?"
823aa99676SStefan Eßer	read_expr="${read_call}"
833aa99676SStefan Eßerfi
843aa99676SStefan Eßer
853aa99676SStefan Eßerprintf 'Running %s read...' "$d"
863aa99676SStefan Eßer
8710328f8bSStefan Eßerset +e
8810328f8bSStefan Eßer
893aa99676SStefan Eßerwhile read line; do
903aa99676SStefan Eßer
913aa99676SStefan Eßer	printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" > "$out"
9210328f8bSStefan Eßer	checktest "$d" "$?" 'read' "$results" "$out"
933aa99676SStefan Eßer
943aa99676SStefan Eßerdone < "$name"
953aa99676SStefan Eßer
963aa99676SStefan Eßerprintf 'pass\n'
973aa99676SStefan Eßer
983aa99676SStefan Eßerprintf 'Running %s read errors...' "$d"
993aa99676SStefan Eßer
1003aa99676SStefan Eßerwhile read line; do
1013aa99676SStefan Eßer
1023aa99676SStefan Eßer	printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null
1033aa99676SStefan Eßer	err="$?"
1043aa99676SStefan Eßer
10510328f8bSStefan Eßer	checkerrtest "$d" "$err" "$line" "$out" "$exebase"
1063aa99676SStefan Eßer
1073aa99676SStefan Eßerdone < "$errors"
1083aa99676SStefan Eßer
1093aa99676SStefan Eßerprintf 'pass\n'
1103aa99676SStefan Eßer
1113aa99676SStefan Eßerprintf 'Running %s empty read...' "$d"
1123aa99676SStefan Eßer
1133aa99676SStefan Eßerread_test=$(printf '%s\n' "$read_call")
1143aa99676SStefan Eßer
1153aa99676SStefan Eßerprintf '%s\n' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
1163aa99676SStefan Eßererr="$?"
1173aa99676SStefan Eßer
11810328f8bSStefan Eßercheckerrtest "$d" "$err" "$read_test" "$out" "$exebase"
1193aa99676SStefan Eßer
1203aa99676SStefan Eßerprintf 'pass\n'
1213aa99676SStefan Eßer
1223aa99676SStefan Eßerprintf 'Running %s read EOF...' "$d"
1233aa99676SStefan Eßer
1243aa99676SStefan Eßerread_test=$(printf '%s' "$read_call")
1253aa99676SStefan Eßer
1263aa99676SStefan Eßerprintf '%s' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
1273aa99676SStefan Eßererr="$?"
1283aa99676SStefan Eßer
12910328f8bSStefan Eßercheckerrtest "$d" "$err" "$read_test" "$out" "$exebase"
1303aa99676SStefan Eßer
13110328f8bSStefan Eßerexec printf 'pass\n'
132