maint: avoid sc_tight_scope failure in sort.c
[coreutils.git] / tests / seq / seq-precision.sh
blob4cd62b94f1d1e5d6a6a155e723d0dcfdbc671310
1 #!/bin/sh
2 # Test for output with appropriate precision
4 # Copyright (C) 2015-2024 Free Software Foundation, Inc.
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <https://www.gnu.org/licenses/>.
19 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
20 print_ver_ seq
21 getlimits_
23 # Integer only. Before v8.24 these would switch output format
25 seq 999999 inf | head -n2 > out || fail=1
26 printf "%s\n" 999999 1000000 > exp || framework_failure_
27 compare exp out || fail=1
29 # Exercise buffer handling in non floating point output
30 for i in $(seq 100); do
31 n1="$(printf '%*s' $i '' | tr ' ' 9)"
32 n2="1$(echo $n1 | tr 9 0)"
34 seq $n1 $n2 > out || fail=1
35 printf "%s\n" "$n1" "$n2" > exp || framework_failure_
36 compare exp out || fail=1
37 done
39 seq 0xF423F 0xF4240 > out || fail=1
40 printf "%s\n" 999999 1000000 > exp || framework_failure_
41 compare exp out || fail=1
43 # Ensure consistent precision for inf
44 seq 1 .1 inf | head -n2 > out || fail=1
45 printf "%s\n" 1.0 1.1 > exp || framework_failure_
46 compare exp out || fail=1
48 # Ensure standard output methods with inf start
49 seq inf inf | head -n2 | uniq > out || fail=1
50 test "$(wc -l < out)" = 1 || fail=1
52 # Ensure auto precision for hex float
53 seq 1 0x1p-1 2 > out || fail=1
54 printf "%s\n" 1 1.5 2 > exp || framework_failure_
55 compare exp out || fail=1
57 # Ensure consistent precision for hex
58 seq 1 .1 0x2 | head -n2 > out || fail=1
59 printf "%s\n" 1.0 1.1 > exp || framework_failure_
60 compare exp out || fail=1
62 # Ensure consistent handling of precision/width for exponents
64 seq 1.1e1 12 > out || fail=1
65 printf "%s\n" 11 12 > exp || framework_failure_
66 compare exp out || fail=1
68 seq 11 1.2e1 > out || fail=1
69 printf "%s\n" 11 12 > exp || framework_failure_
70 compare exp out || fail=1
72 seq -w 1.1e4 | head -n1 > out || fail=1
73 printf "%s\n" 00001 > exp || framework_failure_
74 compare exp out || fail=1
76 seq -w 1.10000e5 1.10000e5 > out || fail=1
77 printf "%s\n" 110000 > exp || framework_failure_
78 compare exp out || fail=1
80 # Ensure no undefined behavior which failed with <= 8.32
81 # This test would fail with: -fsanitize=undefined
82 seq 1e$LONG_MIN 2> err || fail=1
83 compare /dev/null err || fail=1
85 Exit $fail