maint: update all copyright year number ranges
[platform/upstream/coreutils.git] / tests / misc / sort-debug-keys.sh
1 #!/bin/sh
2 # Test annotation of sort keys
3
4 # Copyright (C) 2010-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_ sort
21
22 number() { cat -n | sed 's/^ *//'; }
23
24 cat <<\EOF > exp
25 1
26  ^ no match for key
27
28 ^ no match for key
29 44
30   ^ no match for key
31 33
32   ^ no match for key
33 2
34  ^ no match for key
35 1
36  ^ no match for key
37
38 ^ no match for key
39 44
40   ^ no match for key
41 33
42   ^ no match for key
43 2
44  ^ no match for key
45
46 ^ no match for key
47 1
48 _
49 2
50 _
51 33
52 __
53 44
54 __
55 2>
56   ^ no match for key
57 3>1
58   _
59 1>2
60   _
61 1
62  ^ no match for key
63
64 ^ no match for key
65 44
66   ^ no match for key
67 33
68   ^ no match for key
69 2
70  ^ no match for key
71 1
72  ^ no match for key
73
74 ^ no match for key
75 44
76   ^ no match for key
77 33
78   ^ no match for key
79 2
80  ^ no match for key
81
82 ^ no match for key
83 1
84 _
85 2
86 _
87 33
88 __
89 44
90 __
91 2>
92   ^ no match for key
93 3>1
94   _
95 1>2
96   _
97 1
98  ^ no match for key
99
100 ^ no match for key
101 44
102   ^ no match for key
103 33
104   ^ no match for key
105 2
106  ^ no match for key
107 1
108  ^ no match for key
109
110 ^ no match for key
111 44
112   ^ no match for key
113 33
114   ^ no match for key
115 2
116  ^ no match for key
117
118 ^ no match for key
119 1
120 _
121 2
122 _
123 33
124 __
125 44
126 __
127 2>
128   ^ no match for key
129 3>1
130   _
131 1>2
132   _
133
134 ^ no match for key
135 JAN
136 ___
137 FEB
138 ___
139 FEB
140    ^ no match for key
141
142 ^ no match for key
143 JAN
144    ^ no match for key
145 JAZZ
146 ^ no match for key
147
148 ^ no match for key
149 JAN
150 ___
151 FEB
152 ___
153 2>JAZZ
154   ^ no match for key
155 3>
156   ^ no match for key
157 4>JAN
158   ___
159 1>FEB
160   ___
161
162 ^ no match for key
163 JANZ
164 ___
165 JAN
166 ___
167 FEB
168 ___
169 3>
170   ^ no match for key
171 2>JANZ
172   ___
173 4>JAN
174   ___
175 1>FEB
176   ___
177  1.2ignore
178  ___
179  1.1e4ignore
180  _____
181 >>a
182 ___
183 >b
184 __
185 a
186  ^ no match for key
187
188 ^ no match for key
189 a
190 _
191 b
192 _
193 -3
194 __
195 -2
196 __
197 -0
198 __
199 --Mi-1
200 ^ no match for key
201 -0
202 __
203 1
204 _
205  1
206  _
207 __
208 1
209 _
210 _
211  1
212  _
213 1
214 _
215  1
216 __
217 1
218 _
219 2,5
220 _
221 2.4
222 ___
223 2.,,3
224 __
225 2.4
226 ___
227 2,,3
228 _
229 2.4
230 ___
231 1a
232 _
233 2b
234 _
235 >a
236  _
237 A>chr10
238      ^ no match for key
239 B>chr1
240      ^ no match for key
241 EOF
242
243 (
244 for type in n h g; do
245   printf '1\n\n44\n33\n2\n' | sort -s -k2$type --debug
246   printf '1\n\n44\n33\n2\n' | sort -s -k1.3$type --debug
247   printf '1\n\n44\n33\n2\n' | sort -s -k1$type --debug
248   printf '2\n\n1\n' | number | sort -s -k2g --debug
249 done
250
251 printf 'FEB\n\nJAN\n' | sort -s -k1M --debug
252 printf 'FEB\n\nJAN\n' | sort -s -k2,2M --debug
253 printf 'FEB\nJAZZ\n\nJAN\n' | sort -s -k1M --debug
254 printf 'FEB\nJAZZ\n\nJAN\n' | number | sort -s -k2,2M --debug
255 printf 'FEB\nJANZ\n\nJAN\n' | sort -s -k1M --debug
256 printf 'FEB\nJANZ\n\nJAN\n' | number | sort -s -k2,2M --debug
257
258 printf ' 1.2ignore\n 1.1e4ignore\n' | sort -s -g --debug
259
260 printf '\tb\n\t\ta\n' | sort -s -d --debug # ignore = 1
261
262 printf 'a\n\n' | sort -s -k2,2 --debug #lena = 0
263
264 printf 'b\na\n' | sort -s -k1 --debug #otherwise key compare
265
266 printf -- '-0\n1\n-2\n--Mi-1\n-3\n-0\n' | sort -s --debug -k1,1h
267
268 printf ' 1\n1\n' | sort -b --debug
269 printf ' 1\n1\n' | sort -sb --debug
270 printf ' 1\n1\n' | sort --debug
271
272 # strnumcmp is a bit weird, so we don't match exactly
273 printf '2,5\n2.4\n' | sort -s -k1n --debug
274 printf '2.,,3\n2.4\n' | sort -s -k1n --debug
275 printf '2,,3\n2.4\n' | sort -s -k1n --debug
276
277 # -z means we convert \0 to \n
278 env printf '1a\x002b\x00' | sort -s -n -z --debug
279
280 # Check that \0 and \t intermix.
281 printf '\0\ta\n' | sort -s -k2b,2 --debug | tr -d '\0'
282
283 # Check that key end before key start is not underlined
284 printf 'A\tchr10\nB\tchr1\n' | sort -s -k2.4b,2.3n --debug
285 ) > out
286
287 compare exp out || fail=1
288
289 cat <<\EOF > exp
290    1²---++3   1,234  Mi
291                _
292    _________
293 ________________________
294    1²---++3   1,234  Mi
295               _____
296    ________
297 _______________________
298 +1234 1234Gi 1,234M
299 ^ no match for key
300 _____
301 ^ no match for key
302       ____
303       ____
304       _____
305              _____
306              _____
307              ______
308 ___________________
309 EOF
310
311 unset LC_ALL
312 f=$LOCALE_FR_UTF8
313
314 : ${LOCALE_FR_UTF8=none}
315 if test "$LOCALE_FR_UTF8" != "none"; then
316   (
317   echo '   1²---++3   1,234  Mi' |
318     LC_ALL=C sort --debug -k2g -k1b,1
319   echo '   1²---++3   1,234  Mi' |
320     LC_COLLATE=$f LC_CTYPE=$f LC_NUMERIC=$f LC_MESSAGES=C \
321         sort --debug -k2g -k1b,1
322   echo '+1234 1234Gi 1,234M' |
323     LC_COLLATE=$f LC_CTYPE=$f LC_NUMERIC=$f LC_MESSAGES=C \
324       sort --debug -k1,1n -k1,1g \
325         -k1,1h -k2,2n -k2,2g -k2,2h -k3,3n -k3,3g -k3,3h
326   ) > out
327   compare exp out || fail=1
328 fi
329
330 Exit $fail