]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bc/tests/bc/timeconst.sh
MFC: 362681, 362697, 362914, 362984, 362986, 362987, 363091, 363172, 363809,
[FreeBSD/FreeBSD.git] / contrib / bc / tests / bc / timeconst.sh
1 #! /bin/sh
2 #
3 # Copyright (c) 2018-2020 Gavin D. Howard and contributors.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are met:
7 #
8 # * Redistributions of source code must retain the above copyright notice, this
9 #   list of conditions and the following disclaimer.
10 #
11 # * Redistributions in binary form must reproduce the above copyright notice,
12 #   this list of conditions and the following disclaimer in the documentation
13 #   and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26 #
27
28 # Tests the timeconst.bc script from the Linux kernel build.
29 # You can find the script at kernel/time/timeconst.bc in any Linux repo.
30 # One such repo is: https://github.com/torvalds/linux
31
32 script="$0"
33 testdir=$(dirname "$script")
34
35 if [ "$#" -gt 0 ]; then
36         timeconst="$1"
37         shift
38 else
39         timeconst="$testdir/scripts/timeconst.bc"
40 fi
41
42 if [ "$#" -gt 0 ]; then
43         bc="$1"
44         shift
45 else
46         bc="$testdir/../../bin/bc"
47 fi
48
49 out1="$testdir/../.log_bc_timeconst.txt"
50 out2="$testdir/../.log_bc_timeconst_test.txt"
51
52 base=$(basename "$timeconst")
53
54 if [ ! -f "$timeconst" ]; then
55         printf 'Warning: %s does not exist\n' "$timeconst"
56         printf 'Skipping...\n'
57         exit 0
58 fi
59
60 printf 'Running %s...' "$base"
61
62 nums=$(printf 'for (i = 0; i <= 1000; ++i) { i }\n' | bc)
63
64 for i in $nums; do
65
66         printf '%s\n' "$i" | bc -q "$timeconst" > "$out1"
67
68         err="$?"
69
70         if [ "$err" -ne 0 ]; then
71                 printf '\nOther bc is not GNU compatible. Skipping...\n'
72                 exit 0
73         fi
74
75         printf '%s\n' "$i" | "$bc" "$@" -q "$timeconst" > "$out2"
76
77         diff "$out1" "$out2"
78
79         error="$?"
80
81         if [ "$error" -ne 0 ]; then
82                 printf '\nFailed on input: %s\n' "$i"
83                 exit "$error"
84         fi
85
86 done
87
88 rm -f "$out1"
89 rm -f "$out2"
90
91 printf 'pass\n'