maint: update all copyright year number ranges
[platform/upstream/coreutils.git] / tests / misc / csplit.sh
1 #!/bin/sh
2 # various csplit tests
3
4 # Copyright (C) 2001-2013 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 <http://www.gnu.org/licenses/>.
18
19 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
20 print_ver_ csplit
21
22
23 # csplit could get a failed assertion to 2.0.17
24 (echo a; echo; echo) > in
25 csplit in '/^$/' 2 > out || fail=1
26 cat <<EOF > exp
27 2
28 0
29 2
30 EOF
31 compare exp out || fail=1
32 rm -f in out exp
33
34 # Ensure that xx02 contains just two newlines.
35 # This would fail due to reading from freed buffer with coreutils-5.0.91.
36 printf '\n\n' > exp
37 cp xx02 out || fail=1
38 compare exp out || fail=1
39 rm -f in out exp
40
41 # csplit would infloop
42 (echo; echo a) > in
43 csplit in '/a/-1' '{*}' > out || fail=1
44 cat <<EOF > exp
45 0
46 3
47 EOF
48 compare exp out || fail=1
49 rm -f in out exp
50
51 # 'echo |csplit - 1 1' used to abort.
52 echo > in
53 csplit in 1 1 > out 2> err || fail=1
54 cat <<EOF > exp
55 0
56 0
57 1
58 EOF
59 compare exp out || fail=1
60 cat <<\EOF > experr
61 csplit: warning: line number '1' is the same as preceding line number
62 EOF
63 compare experr err || fail=1
64 rm -f in out exp err experr
65
66 # 'echo | csplit -b '%0#6.3x' - 1' incorrectly warned about the format
67 # up through coreutils 8.6.
68 echo > in
69 csplit -b '%0#6.3x' in 1 > out 2> err || fail=1
70 cat <<EOF > exp
71 0
72 1
73 EOF
74 compare exp out || fail=1
75 touch experr
76 compare experr err || fail=1
77 compare 'xx   000' experr || fail=1
78 compare 'xx 0x001' in || fail=1
79 rm -f in out exp err experr xx*
80
81 # make sure 'csplit FILE 0' fails.
82 echo > in
83 csplit in 0 > out 2> err && fail=1
84 csplit in 2 1 > out 2>> err && fail=1
85 csplit in 3 3 > out 2>> err && fail=1
86 cat <<\EOF > experr
87 csplit: 0: line number must be greater than zero
88 csplit: line number '1' is smaller than preceding line number, 2
89 csplit: warning: line number '3' is the same as preceding line number
90 csplit: '3': line number out of range
91 EOF
92 compare experr err || fail=1
93
94 # Ensure that lines longer than the initial buffer length don't cause
95 # trouble (e.g. reading from freed memory, resulting in corrupt output).
96 # This test failed at least in coreutils-5.2.1 and 5.3.0, and was fixed
97 # in 5.3.1.
98 rm -f in out exp err experr xx??
99 printf 'x%8199s\nx\n%8199s\nx\n' x x > in
100 csplit in '/x\{1\}/' '{*}' > /dev/null || fail=1
101 cat xx?? | compare - in || fail=1
102
103 Exit $fail