1#!/bin/sh 2# exercise nl functionality 3 4# Copyright (C) 2002-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_ nl 21getlimits_ 22 23echo a | nl > out || fail=1 24echo b | nl -s%n >> out || fail=1 25echo c | nl -n ln >> out || fail=1 26echo d | nl -n rn >> out || fail=1 27echo e | nl -n rz >> out || fail=1 28echo === >> out 29printf 'a\n\n' | nl > t || fail=1; cat -A t >> out 30cat <<\EOF > exp 31 1 a 32 1%nb 331 c 34 1 d 35000001 e 36=== 37 1^Ia$ 38 $ 39EOF 40compare exp out || fail=1 41 42# Ensure numbering reset at each delimiter. 43# coreutils <= v8.25 only reset at a page header. 44printf '%s\n' '\:\:\:' a '\:\:' b '\:' c > in.txt || framework_failure_ 45nl -ha -fa in.txt > out.tmp || fail=1 46nl -p -ha -fa in.txt >> out.tmp || fail=1 47sed '/^$/d' < out.tmp > out || framework_failure_ 48cat <<\EOF > exp 49 1 a 50 1 b 51 1 c 52 1 a 53 2 b 54 3 c 55EOF 56compare exp out || fail=1 57 58# Ensure we only indicate overflow when needing to output overflowed numbers 59returns_ 1 nl -v$INTMAX_OFLOW /dev/null || fail=1 60printf '%s\n' a \\:\\: b > in.txt || framework_failure_ 61nl -v$INTMAX_MAX in.txt > out || fail=1 62cat <<EOF > exp 63$INTMAX_MAX a 64 65$INTMAX_MAX b 66EOF 67compare exp out || fail=1 68returns_ 1 nl -p -v$INTMAX_MAX in.txt > out || fail=1 69 70# Test negative iteration 71returns_ 1 nl -i$INTMAX_UFLOW /dev/null || fail=1 72printf '%s\n' a b > in.txt || framework_failure_ 73nl -v$INTMAX_MAX -i$INTMAX_MIN in.txt > out || fail=1 74cat <<EOF > exp 75$INTMAX_MAX a 76 -1 b 77EOF 78compare exp out || fail=1 79printf '%s\n' a b c > in.txt || framework_failure_ 80returns_ 1 nl -v$INTMAX_MAX -i$INTMAX_MIN in.txt > out || fail=1 81 82# Test GNU extension to --section-delimiter, of disabling section matching 83printf '%s\n' a '\:\:' c > in.txt || framework_failure_ 84nl -d '' in.txt > out || fail=1 85cat <<\EOF > exp 86 1 a 87 2 \:\: 88 3 c 89EOF 90compare exp out || fail=1 91 92# Test GNU extension to --section-delimiter, of supporting strings longer than 2 93printf '%s\n' a foofoo c > in.txt || framework_failure_ 94nl -d 'foo' in.txt > out || fail=1 95cat <<EOF > exp 96 1 a 97 98 1 c 99EOF 100compare exp out || fail=1 101 102# Ensure single char delimiters assume a following ':' character (as per POSIX) 103# coreutils <= v8.32 didn't match single char delimiters at all 104printf '%s\n' a x:x: c > in.txt || framework_failure_ 105nl -d 'x' in.txt > out || fail=1 106cat <<EOF > exp 107 1 a 108 109 1 c 110EOF 111compare exp out || fail=1 112 113Exit $fail 114