]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bc/tests/radamsa.sh
mlx4en(4): Fix wrong mbuf cluster size in mlx4_en_debugnet_init()
[FreeBSD/FreeBSD.git] / contrib / bc / tests / radamsa.sh
1 #! /bin/bash
2 #
3 # SPDX-License-Identifier: BSD-2-Clause
4 #
5 # Copyright (c) 2018-2021 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
30 getentry() {
31
32         if [ $# -gt 0 ]; then
33                 entnum="$1"
34         else
35                 entnum=0
36         fi
37
38         e=$(cat -)
39         num=$(printf '%s\n' "$e" | wc -l)
40
41         if [ "$entnum" -eq 0 ]; then
42                 rand=$(printf 'irand(%s) + 1\n' "$num" | "$bcdir/bc")
43         else
44                 rand="$entnum"
45         fi
46
47         ent=$(printf '%s\n' "$e" | tail -n +$rand | head -n 1)
48
49         printf '%s\n' "$ent"
50 }
51
52 script="$0"
53
54 if [ "$#" -lt 1 ]; then
55         printf 'usage: %s dir\n' "$0"
56         exit 1
57 fi
58
59 d="$1"
60 shift
61
62 dir=$(dirname "$script")
63
64 . "$dir/../functions.sh"
65
66 bcdir="$dir/../bin"
67
68 if [ "$d" = "bc" ]; then
69         inputs="$dir/../../inputs"
70         opts="-lq"
71 elif [ "$d" = "dc" ]; then
72         inputs="$dir/../../inputs_dc"
73         opts="-x"
74 else
75         err_exit "wrong type of executable" 1
76 fi
77
78 export ASAN_OPTIONS="abort_on_error=1"
79
80 entries=$(cat "$dir/radamsa.txt")
81
82 IFS=$'\n'
83
84 go=1
85
86 while [ "$go" -ne 0 ]; do
87
88         if [ "$d" = "bc" ]; then
89
90                 entry=$(cat -- "$dir/radamsa.txt" | getentry)
91                 items=$(printf '%s\n' "$entry" | radamsa -n 10)
92
93                 printf '%s\n' "$items"
94
95                 for i in `seq 1 10`; do
96
97                         item=$(printf '%s\n' "$items" | getentry "$i")
98
99                         export BC_ENV_ARGS="$item"
100                         echo 'halt' | "$bcdir/$d"
101                         err=$?
102
103                         checkcrash "$d" "$err" "radamsa env args: \"$item\""
104                 done
105
106         fi
107
108         f=$(ls "$inputs" | getentry)
109         l=$(cat "$inputs/$f" | wc -l)
110         ll=$(printf '%s^2\n' "$l" | bc)
111
112         for i in $(seq 1 2); do
113                 data=$(cat "$inputs/$f" | radamsa -n 1)
114                 printf '%s\n' "$data" > "$dir/../.log_${d}_test.txt"
115                 printf '%s\n' "$data" | timeout -s SIGTERM 5 "$bcdir/$d" "$opts" > /dev/null
116                 err=$?
117                 checkcrash "$d" "$err" "radamsa stdin"
118         done
119
120 done