xref: /freebsd/contrib/bc/tests/scripts.sh (revision d43fa8ef534ac87a16843d45264f56cf11e0fcbc)
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ßerscript="$0"
313aa99676SStefan Eßer
323aa99676SStefan Eßertestdir=$(dirname "${script}")
333aa99676SStefan Eßer
34*d43fa8efSStefan Eßerpids=""
35*d43fa8efSStefan Eßer
36*d43fa8efSStefan Eßer# We need to figure out if we should run stuff in parallel.
37*d43fa8efSStefan Eßerpll=1
38*d43fa8efSStefan Eßer
39*d43fa8efSStefan Eßerwhile getopts "n" opt; do
40*d43fa8efSStefan Eßer
41*d43fa8efSStefan Eßer	case "$opt" in
42*d43fa8efSStefan Eßer		n) pll=0 ; shift ; set -e ;;
43*d43fa8efSStefan Eßer		?) usage "Invalid option: $opt" ;;
44*d43fa8efSStefan Eßer	esac
45*d43fa8efSStefan Eßer
46*d43fa8efSStefan Eßerdone
47*d43fa8efSStefan Eßer
4844d4804dSStefan Eßer# Command-line processing.
493aa99676SStefan Eßerif [ "$#" -eq 0 ]; then
50*d43fa8efSStefan Eßer	printf 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
513aa99676SStefan Eßer	exit 1
523aa99676SStefan Eßerelse
533aa99676SStefan Eßer	d="$1"
543aa99676SStefan Eßer	shift
553aa99676SStefan Eßerfi
563aa99676SStefan Eßer
573aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
583aa99676SStefan Eßer	run_extra_tests="$1"
593aa99676SStefan Eßer	shift
603aa99676SStefan Eßerelse
613aa99676SStefan Eßer	run_extra_tests=1
623aa99676SStefan Eßerfi
633aa99676SStefan Eßer
643aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
653aa99676SStefan Eßer	run_stack_tests="$1"
663aa99676SStefan Eßer	shift
673aa99676SStefan Eßerelse
683aa99676SStefan Eßer	run_stack_tests=1
693aa99676SStefan Eßerfi
703aa99676SStefan Eßer
713aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
723aa99676SStefan Eßer	generate="$1"
733aa99676SStefan Eßer	shift
743aa99676SStefan Eßerelse
753aa99676SStefan Eßer	generate=1
763aa99676SStefan Eßerfi
773aa99676SStefan Eßer
783aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
793aa99676SStefan Eßer	time_tests="$1"
803aa99676SStefan Eßer	shift
813aa99676SStefan Eßerelse
823aa99676SStefan Eßer	time_tests=0
833aa99676SStefan Eßerfi
843aa99676SStefan Eßer
853aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
863aa99676SStefan Eßer	exe="$1"
873aa99676SStefan Eßer	shift
883aa99676SStefan Eßerelse
893aa99676SStefan Eßer	exe="$testdir/../bin/$d"
903aa99676SStefan Eßerfi
913aa99676SStefan Eßer
923aa99676SStefan Eßerscriptdir="$testdir/$d/scripts"
933aa99676SStefan Eßer
9410328f8bSStefan Eßerscripts=$(cat "$scriptdir/all.txt")
9510328f8bSStefan Eßer
9644d4804dSStefan Eßer# Run each script test individually.
9710328f8bSStefan Eßerfor s in $scripts; do
983aa99676SStefan Eßer
993aa99676SStefan Eßer	f=$(basename "$s")
100*d43fa8efSStefan Eßer
101*d43fa8efSStefan Eßer	if [ "$pll" -ne 0 ]; then
102*d43fa8efSStefan Eßer		sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
103*d43fa8efSStefan Eßer			"$generate" "$time_tests" "$exe" "$@" &
104*d43fa8efSStefan Eßer		pids="$pids $!"
105*d43fa8efSStefan Eßer	else
10610328f8bSStefan Eßer		sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
10710328f8bSStefan Eßer			"$generate" "$time_tests" "$exe" "$@"
108*d43fa8efSStefan Eßer	fi
1093aa99676SStefan Eßer
1103aa99676SStefan Eßerdone
111*d43fa8efSStefan Eßer
112*d43fa8efSStefan Eßerif [ "$pll" -ne 0 ]; then
113*d43fa8efSStefan Eßer
114*d43fa8efSStefan Eßer	exit_err=0
115*d43fa8efSStefan Eßer
116*d43fa8efSStefan Eßer	for p in $pids; do
117*d43fa8efSStefan Eßer
118*d43fa8efSStefan Eßer		wait "$p"
119*d43fa8efSStefan Eßer		err="$?"
120*d43fa8efSStefan Eßer
121*d43fa8efSStefan Eßer		if [ "$err" -ne 0 ]; then
122*d43fa8efSStefan Eßer			printf 'A script failed!\n'
123*d43fa8efSStefan Eßer			exit_err=1
124*d43fa8efSStefan Eßer		fi
125*d43fa8efSStefan Eßer
126*d43fa8efSStefan Eßer	done
127*d43fa8efSStefan Eßer
128*d43fa8efSStefan Eßer	if [ "$exit_err" -ne 0 ]; then
129*d43fa8efSStefan Eßer		exit 1
130*d43fa8efSStefan Eßer	fi
131*d43fa8efSStefan Eßer
132*d43fa8efSStefan Eßerfi
133