xref: /freebsd/contrib/bc/tests/scripts.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ßerscript="$0"
313aa99676SStefan Eßer
323aa99676SStefan Eßertestdir=$(dirname "${script}")
333aa99676SStefan Eßer
34103d7cdfSStefan Eßer. "$testdir/../scripts/functions.sh"
35103d7cdfSStefan Eßer
364fca8e0fSStefan Eßer# Just print the usage and exit with an error. This can receive a message to
374fca8e0fSStefan Eßer# print.
384fca8e0fSStefan Eßer# @param 1  A message to print.
394fca8e0fSStefan Eßerusage() {
404fca8e0fSStefan Eßer	if [ $# -eq 1 ]; then
414fca8e0fSStefan Eßer		printf '%s\n\n' "$1"
424fca8e0fSStefan Eßer	fi
434fca8e0fSStefan Eßer	printf 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
444fca8e0fSStefan Eßer	exit 1
454fca8e0fSStefan Eßer}
464fca8e0fSStefan Eßer
47d43fa8efSStefan Eßerpids=""
48d43fa8efSStefan Eßer
49d43fa8efSStefan Eßer# We need to figure out if we should run stuff in parallel.
50d43fa8efSStefan Eßerpll=1
51d43fa8efSStefan Eßer
52d43fa8efSStefan Eßerwhile getopts "n" opt; do
53d43fa8efSStefan Eßer
54d43fa8efSStefan Eßer	case "$opt" in
55103d7cdfSStefan Eßer		n) pll=0 ; set -e ;;
56d43fa8efSStefan Eßer		?) usage "Invalid option: $opt" ;;
57d43fa8efSStefan Eßer	esac
58d43fa8efSStefan Eßer
59d43fa8efSStefan Eßerdone
60103d7cdfSStefan Eßershift $(($OPTIND - 1))
61d43fa8efSStefan Eßer
6244d4804dSStefan Eßer# Command-line processing.
633aa99676SStefan Eßerif [ "$#" -eq 0 ]; then
644fca8e0fSStefan Eßer	usage "Need at least 1 argument"
653aa99676SStefan Eßerelse
663aa99676SStefan Eßer	d="$1"
673aa99676SStefan Eßer	shift
684fca8e0fSStefan Eßer	check_d_arg "$d"
693aa99676SStefan Eßerfi
703aa99676SStefan Eßer
713aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
723aa99676SStefan Eßer	run_extra_tests="$1"
733aa99676SStefan Eßer	shift
744fca8e0fSStefan Eßer	check_bool_arg "$run_extra_tests"
753aa99676SStefan Eßerelse
763aa99676SStefan Eßer	run_extra_tests=1
774fca8e0fSStefan Eßer	check_bool_arg "$run_extra_tests"
783aa99676SStefan Eßerfi
793aa99676SStefan Eßer
803aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
813aa99676SStefan Eßer	run_stack_tests="$1"
823aa99676SStefan Eßer	shift
834fca8e0fSStefan Eßer	check_bool_arg "$run_stack_tests"
843aa99676SStefan Eßerelse
853aa99676SStefan Eßer	run_stack_tests=1
864fca8e0fSStefan Eßer	check_bool_arg "$run_stack_tests"
873aa99676SStefan Eßerfi
883aa99676SStefan Eßer
893aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
903aa99676SStefan Eßer	generate="$1"
913aa99676SStefan Eßer	shift
924fca8e0fSStefan Eßer	check_bool_arg "$generate"
933aa99676SStefan Eßerelse
943aa99676SStefan Eßer	generate=1
954fca8e0fSStefan Eßer	check_bool_arg "$generate"
963aa99676SStefan Eßerfi
973aa99676SStefan Eßer
983aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
993aa99676SStefan Eßer	time_tests="$1"
1003aa99676SStefan Eßer	shift
1014fca8e0fSStefan Eßer	check_bool_arg "$time_tests"
1023aa99676SStefan Eßerelse
1033aa99676SStefan Eßer	time_tests=0
1044fca8e0fSStefan Eßer	check_bool_arg "$time_tests"
1053aa99676SStefan Eßerfi
1063aa99676SStefan Eßer
1073aa99676SStefan Eßerif [ "$#" -gt 0 ]; then
1083aa99676SStefan Eßer	exe="$1"
1093aa99676SStefan Eßer	shift
1104fca8e0fSStefan Eßer	check_exec_arg "$exe"
1113aa99676SStefan Eßerelse
1123aa99676SStefan Eßer	exe="$testdir/../bin/$d"
1134fca8e0fSStefan Eßer	check_exec_arg "$exe"
1143aa99676SStefan Eßerfi
1153aa99676SStefan Eßer
1163aa99676SStefan Eßerscriptdir="$testdir/$d/scripts"
1173aa99676SStefan Eßer
11810328f8bSStefan Eßerscripts=$(cat "$scriptdir/all.txt")
11910328f8bSStefan Eßer
12044d4804dSStefan Eßer# Run each script test individually.
12110328f8bSStefan Eßerfor s in $scripts; do
1223aa99676SStefan Eßer
1233aa99676SStefan Eßer	f=$(basename "$s")
124d43fa8efSStefan Eßer
125d43fa8efSStefan Eßer	if [ "$pll" -ne 0 ]; then
126d43fa8efSStefan Eßer		sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
127d43fa8efSStefan Eßer			"$generate" "$time_tests" "$exe" "$@" &
128d43fa8efSStefan Eßer		pids="$pids $!"
129d43fa8efSStefan Eßer	else
13010328f8bSStefan Eßer		sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
13110328f8bSStefan Eßer			"$generate" "$time_tests" "$exe" "$@"
132d43fa8efSStefan Eßer	fi
1333aa99676SStefan Eßer
1343aa99676SStefan Eßerdone
135d43fa8efSStefan Eßer
136d43fa8efSStefan Eßerif [ "$pll" -ne 0 ]; then
137d43fa8efSStefan Eßer
138d43fa8efSStefan Eßer	exit_err=0
139d43fa8efSStefan Eßer
140d43fa8efSStefan Eßer	for p in $pids; do
141d43fa8efSStefan Eßer
142d43fa8efSStefan Eßer		wait "$p"
143d43fa8efSStefan Eßer		err="$?"
144d43fa8efSStefan Eßer
145d43fa8efSStefan Eßer		if [ "$err" -ne 0 ]; then
146d43fa8efSStefan Eßer			printf 'A script failed!\n'
147d43fa8efSStefan Eßer			exit_err=1
148d43fa8efSStefan Eßer		fi
149d43fa8efSStefan Eßer
150d43fa8efSStefan Eßer	done
151d43fa8efSStefan Eßer
152d43fa8efSStefan Eßer	if [ "$exit_err" -ne 0 ]; then
153d43fa8efSStefan Eßer		exit 1
154d43fa8efSStefan Eßer	fi
155d43fa8efSStefan Eßer
156d43fa8efSStefan Eßerfi
157