xref: /freebsd/contrib/bc/tests/test.sh (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1#! /bin/sh
2#
3# SPDX-License-Identifier: BSD-2-Clause
4#
5# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions are met:
9#
10# * Redistributions of source code must retain the above copyright notice, this
11#   list of conditions and the following disclaimer.
12#
13# * Redistributions in binary form must reproduce the above copyright notice,
14#   this list of conditions and the following disclaimer in the documentation
15#   and/or other materials provided with the distribution.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27# POSSIBILITY OF SUCH DAMAGE.
28#
29
30set -e
31
32script="$0"
33
34testdir=$(dirname "$script")
35
36if [ "$#" -lt 2 ]; then
37	printf 'usage: %s dir test [generate_tests] [time_tests] [exe [args...]]\n' "$0"
38	printf 'valid dirs are:\n'
39	printf '\n'
40	cat "$testdir/all.txt"
41	printf '\n'
42	exit 1
43fi
44
45d="$1"
46shift
47
48t="$1"
49name="$testdir/$d/$t.txt"
50results="$testdir/$d/${t}_results.txt"
51shift
52
53if [ "$#" -gt 0 ]; then
54	generate_tests="$1"
55	shift
56else
57	generate_tests=1
58fi
59
60if [ "$#" -gt 0 ]; then
61	time_tests="$1"
62	shift
63else
64	time_tests=0
65fi
66
67if [ "$#" -gt 0 ]; then
68	exe="$1"
69	shift
70else
71	exe="$testdir/../bin/$d"
72fi
73
74out="$testdir/../.log_${d}_test.txt"
75
76if [ "$d" = "bc" ]; then
77	options="-lq"
78	var="BC_LINE_LENGTH"
79	halt="halt"
80else
81	options=""
82	var="DC_LINE_LENGTH"
83	halt="q"
84fi
85
86if [ "${exe#*toybox}" != "$exe" -o "${exe#*busybox}" != "$exe" ]; then
87	if [ "$t" = "print2" -o "$t" = "misc4" ]; then
88		base=$(basename "$exe")
89		printf 'Skipping %s test for %s...\n' "$t" "$base"
90		exit 0
91	fi
92fi
93
94if [ ! -f "$name" ]; then
95
96	if [ "$generate_tests" -eq 0 ]; then
97		printf 'Skipping %s %s test\n' "$d" "$t"
98		exit 0
99	fi
100
101	printf 'Generating %s %s...' "$d" "$t"
102	"$testdir/$d/scripts/$t.$d" > "$name"
103	printf 'done\n'
104fi
105
106if [ ! -f "$results" ]; then
107	printf 'Generating %s %s results...' "$d" "$t"
108	printf '%s\n' "$halt" | "$d" $options "$name" > "$results"
109	printf 'done\n'
110fi
111
112if [ "$d" = "dc" ]; then
113	options="-x"
114fi
115
116export $var=string
117
118printf 'Running %s %s...' "$d" "$t"
119
120if [ "$time_tests" -ne 0 ]; then
121	printf '\n'
122	printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$name" > "$out"
123	printf '\n'
124else
125	printf '%s\n' "$halt" | "$exe" "$@" $options "$name" > "$out"
126fi
127
128diff "$results" "$out"
129
130rm -f "$out"
131
132printf 'pass\n'
133