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