1#!/bin/sh 2# Test for output with appropriate precision 3 4# Copyright (C) 2015-2023 Free Software Foundation, Inc. 5 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. 10 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. 15 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/>. 18 19. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 20print_ver_ seq 21getlimits_ 22 23# Integer only. Before v8.24 these would switch output format 24 25seq 999999 inf | head -n2 > out || fail=1 26printf "%s\n" 999999 1000000 > exp || framework_failure_ 27compare exp out || fail=1 28 29# Exercise buffer handling in non floating point output 30for i in $(seq 100); do 31 n1="$(printf '%*s' $i '' | tr ' ' 9)" 32 n2="1$(echo $n1 | tr 9 0)" 33 34 seq $n1 $n2 > out || fail=1 35 printf "%s\n" "$n1" "$n2" > exp || framework_failure_ 36 compare exp out || fail=1 37done 38 39seq 0xF423F 0xF4240 > out || fail=1 40printf "%s\n" 999999 1000000 > exp || framework_failure_ 41compare exp out || fail=1 42 43# Ensure consistent precision for inf 44seq 1 .1 inf | head -n2 > out || fail=1 45printf "%s\n" 1.0 1.1 > exp || framework_failure_ 46compare exp out || fail=1 47 48# Ensure standard output methods with inf start 49seq inf inf | head -n2 | uniq > out || fail=1 50test "$(wc -l < out)" = 1 || fail=1 51 52# Ensure auto precision for hex float 53seq 1 0x1p-1 2 > out || fail=1 54printf "%s\n" 1 1.5 2 > exp || framework_failure_ 55compare exp out || fail=1 56 57# Ensure consistent precision for hex 58seq 1 .1 0x2 | head -n2 > out || fail=1 59printf "%s\n" 1.0 1.1 > exp || framework_failure_ 60compare exp out || fail=1 61 62# Ensure consistent handling of precision/width for exponents 63 64seq 1.1e1 12 > out || fail=1 65printf "%s\n" 11 12 > exp || framework_failure_ 66compare exp out || fail=1 67 68seq 11 1.2e1 > out || fail=1 69printf "%s\n" 11 12 > exp || framework_failure_ 70compare exp out || fail=1 71 72seq -w 1.1e4 | head -n1 > out || fail=1 73printf "%s\n" 00001 > exp || framework_failure_ 74compare exp out || fail=1 75 76seq -w 1.10000e5 1.10000e5 > out || fail=1 77printf "%s\n" 110000 > exp || framework_failure_ 78compare exp out || fail=1 79 80# Ensure no undefined behavior which failed with <= 8.32 81# This test would fail with: -fsanitize=undefined 82seq 1e$LONG_MIN 2> err || fail=1 83compare /dev/null err || fail=1 84 85Exit $fail 86